À propos de la co-création dans Excel

Découvrez comment fonctionne la co-création dans Excel et comment vous devrez peut-être ajuster votre complément ou macro pour une intégration fluide avec la co-création.

Co-écriture est disponible pour tous les utilisateurs d’Excel Online. Cette fonctionnalité est également disponible sur Excel pour Windows Desktop, mais uniquement pour Office 365 clients.

Présentation de la co-création

Co-écriture vous permet de modifier un classeur hébergé dans le cloud (c’est-à-dire OneDrive, OneDrive Entreprise ou SharePoint Online) simultanément avec d’autres utilisateurs. À chaque enregistrement, tous les utilisateurs qui modifient le classeur à ce moment-là peuvent voir les modifications. Une fois l’enregistrement automatique activé, vous pouvez voir les modifications apportées au classeur en temps réel. Si vous n’êtes pas prêt à voir vos modifications, vous pouvez désactiver l’enregistrement automatique jusqu’à ce que vous soyez prêt à partager vos modifications et à recevoir les modifications des autres.

Principes de la co-création

Excel synchronise automatiquement les modifications apportées au classeur (que ce soit par un utilisateur ou par votre code). Par exemple, supposons que le code s’exécute sur l’instance d’un utilisateur et modifie le contenu d’une cellule comme suit : Range("A1").Value = "myNewValue". Excel se charge d’envoyer cette modification à d’autres co-auteurs.

Supposons maintenant qu’il y ait du code en cours d’exécution sur l’instance d’un autre utilisateur qui inspecte le contenu de cette cellule comme suit : MsgBox Range("A1").Value. Le deuxième utilisateur voyait la valeur "myNewValue" qui avait été définie par le premier utilisateur.

Toutefois, Excel ne synchronise pas automatiquement les variables créées par votre code en dehors du contenu du classeur. Par exemple, supposons que votre code lit une valeur à partir d’une cellule, puis la charge dans une variable :

Dim myVariable
myVariable = Range("A1").Value

Excel ne met pas automatiquement à jour la valeur de myVariable, ce qui signifie qu’elle myVariable ne sera pas synchronisée avec une variable du même nom créée par le code s’exécutant sur les instances Excel des autres co-auteurs.

Situations dans lesquelles vous devrez peut-être adapter votre solution à un environnement de co-création

Étant donné que les macros et compléments existants peuvent s’appuyer sur Excel pour transmettre en toute transparence les modifications apportées au classeur aux co-auteurs, vous pouvez généralement utiliser votre code dans ce nouvel environnement sans apporter de modifications ou de mises à jour. Toutefois, dans deux cas, vous devrez peut-être adapter votre code si vous souhaitez qu’il fonctionne correctement dans un paramètre de co-création :

Les événements BeforeRemoteChange et AfterRemoteChange ont été ajoutés pour vous permettre de gérer les modifications à distance le cas échéant.

Compléments qui ont un état interne en mémoire en dehors du contenu du classeur

Imaginez un complément qui permet à l’utilisateur de créer des graphiques personnalisés basés sur des données dans un classeur Excel. Ce complément charge les données des graphiques de l’utilisateur dans une feuille masquée du classeur. Lorsqu’un utilisateur ouvre un fichier contenant les graphiques personnalisés, le complément lit les données de la feuille masquée et charge le graphique en mémoire. À mesure que l’utilisateur modifie le graphique, cette structure en mémoire est mise à jour et réécrit dans le fichier avant chaque enregistrement. Ce complément part du principe que la seule fois où il est nécessaire de lire la feuille masquée et de la charger en mémoire, c’est au moment de l’ouverture du fichier.

Co-écriture ouvre une autre possibilité : la feuille masquée peut être modifiée par un autre utilisateur exécutant le même complément en même temps. Si cela se produit, les graphiques affichés par les utilisateurs risquent de devenir désynchronisées. Par exemple :

  • Supposons que l’utilisateur A ouvre le fichier et commence à afficher un graphique personnalisé existant.
  • Pendant qu’elle effectue cette opération, l’utilisateur B ouvre le même fichier et commence à apporter des modifications au graphique personnalisé (par exemple, modifie le type de graphique).
  • Cette modification est enregistrée dans la feuille par le complément sur l’ordinateur de l’utilisateur B, mais l’utilisateur A ne voit jamais la modification tant qu’il n’a pas rechargé le fichier.

Solution de contournement

Autant que possible, essayez d’éviter de faire des hypothèses sur le moment où les données du classeur peuvent être modifiées. Dans ce cas, vous pouvez modifier le complément pour réagir à l’événement AfterRemoteChange , puis vérifier les valeurs de la feuille masquée pour voir si elles doivent être lues à nouveau par le complément pour permettre à l’utilisateur A d’afficher les modifications apportées au graphique par l’utilisateur B. Le complément est destiné à être exécuté chaque fois que la plage de graphiques est modifiée. Cela se produit lors du chargement et peut se produire avec une modification à distance. Par conséquent, votre logique dans AfterRemoteChange doit réexécuter le complément.

Compléments qui tirent parti des événements

Votre complément ou macro peut déjà s’abonner à des événements d’enregistrement ou de modification. Avec l’introduction de la co-création, vous pouvez rencontrer des problèmes avec :

Enregistrer les événements

Vous pouvez rencontrer des problèmes lorsque votre code utilise des événements d’enregistrement tels que BeforeSave et AfterSave. Pour plus d’informations, consultez Problèmes potentiels liés aux événements d’enregistrement et Enregistrement automatique.

Événements de modification

Par défaut, votre code n’a généralement pas besoin de gérer les modifications des utilisateurs distants. Toutefois, dans certains cas, la gestion des modifications à distance peut entraîner des problèmes. Deux exemples de scénarios sont explorés ici.

Exemple de scénario : Validation des données

Un événement de modification est déclenché lorsqu’une plage spécifique est modifiée dans le classeur. Votre code de complément valide ensuite la modification et, si la vérification échoue, avertit l’utilisateur via une fenêtre contextuelle. Toutefois, si tous les utilisateurs distants qui collaborent sur ce classeur sont avertis d’un échec de validation non lié à leurs propres modifications, cela peut entraîner une mauvaise expérience.

Exemple

Pour cet exemple, un graphique a été créé pour afficher la quantité de produits fabriqués en vendant différents desserts. Ni le coût ni le nombre d’articles vendus ne doivent être négatifs, il existe donc une vérification de validation qui affiche un message à l’utilisateur. Lorsque la valeur non valide est envoyée aux utilisateurs distants, le message de validation ne doit pas s’afficher pour eux.

Public Sub ValidateFigures()
    Dim rangeToValidate As Range
    Set rangeToValidate = ActiveWorkbook.Worksheets("Chart").Range("B2:C6")
    For Each cell In rangeToValidate.Cells
        If (cell.Value < 0) Then
            MsgBox ("Error: Value should not be negative. " & cell.Address)
        End If
    Next
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveWorkbook.Worksheets("Chart").ValidateFigures
End Sub

Par conséquent, il n’est pas nécessaire de s’abonner à l’événement BeforeRemoteChange ou AfterRemoteChange dans ce cas.

Private Sub Workbook_AfterRemoteChange()
    ' Do not call validation from RemoteChange event
    'ActiveWorkbook.Worksheets("Chart").ValidateFigures
End Sub

Figure 1. Exemple de graphique représentant les ventes de dessert

ventes de dessert

Exemple de scénario : Cohérence des données

Un événement de modification est déclenché et votre code de complément synchronise les données du classeur avec les données d’une autre partie du classeur ou d’un système externe. Si un utilisateur distant reçoit la modification qui entraîne la synchronisation des mêmes données par le code du complément, cela peut entraîner une diminution des performances de l’utilisateur distant ou la duplication des données dans le système externe.

Problèmes potentiels liés aux événements de modification

Bien que, normalement, vous ne souhaitez pas que votre code de gestionnaire d’événements s’exécute en réponse aux modifications d’un utilisateur distant, le comportement par défaut de ne pas déclencher les événements de modification peut entraîner des problèmes. Voici quelques exemples de problèmes et la façon dont vous pouvez les contourner à l’aide des événements BeforeRemoteChange et AfterRemoteChange .

Exemple de scénario : Visualisation des données

Votre complément trace les points de données sur une carte en fonction des données d’emplacement trouvées dans une plage du classeur. Si un utilisateur modifie l’une des données d’emplacement, tous les utilisateurs distants doivent recevoir cette modification afin que la carte de chaque utilisateur puisse être mise à jour.

Exemple

Supposons que vous avez créé une carte personnalisée. Dans cet exemple, vous pouvez ajouter du code pour modifier les données d’emplacement, puis mettre à jour la carte. Le classeur est partagé avec une personne dans une autre ville. Une fois l’enregistrement automatique activé, la modification est transmise à l’utilisateur distant, mais la carte de cet utilisateur n’est pas mise à jour.

Public Sub UpdateMap()
    'Code that updates map
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    'Call subroutine that updates map
End Sub

Utilisez maintenant l’événement AfterRemoteChange pour ajouter du code qui met à jour la carte. Les modifications suivantes envoyées à l’utilisateur distant sont utilisées pour mettre à jour la carte.

Private Sub Workbook_AfterRemoteChange()
    'Call subroutine that updates map
End Sub

Figure 2. Exemple de carte de Londres avec quelques points d’intérêt

locations de londres

Exemple de scénario : volet Office navigation

Votre complément affiche tous les onglets actuels du classeur dans un volet Office pour faciliter la navigation. Si un utilisateur ajoute une feuille de calcul, tous les utilisateurs distants doivent recevoir cette modification afin que le volet Office de chaque utilisateur puisse afficher un lien vers la nouvelle feuille de calcul.

Voir aussi

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.