Appliquer une macro à tous les onglets du classeur

Crazydunker -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis novice en VBA, je n'ai pas reçu de cours sur cette pratique. Je me documente sur le net et je comprends un petit peu la logique des codes.
J'ai réussi à obtenir ce code VBA pour rendre 2 cellules interdépendantes (l'une modifie l'autre et vice versa).

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
On Error GoTo fin
nom = Target.Name.Name
If InStr(nom, "?") > 0 Then
nom = Left(nom, InStr(nom, "?"))
Application.EnableEvents = False
num = 1
encor:
Range(nom & num).Value = Target.Value
num = num + 1
GoTo encor
End If
fin:
On Error GoTo 0
Application.EnableEvents = True
End Sub


Elle fonctionne correctement pour lier 2 cellules sur un onglet, par contre quand il s'agit de lier 2 cellules d'onglets différents, le code ne fonctionne plus...
Pensez-vous que le problème est dû à la cible de la macro ? Ou alors est-il dû à une impossibilité de le faire sur 2 onglets différents ?

Merci d'avance de votre aide.

Cordialement

Configuration: Windows / Firefox 63.0


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

3 réponses

  1. Crazydunker
     
    Bonjour,

    merci Patrice33740 de m'avoir répondu. Effectivement tout cela ne doit pas être très standardisé !!! J'ai parcouru très rapidement le cours que vous m'avez envoyé. Effectivement il a l'air très intéressant mais il faudrait une bonne centaine d'heure d'entrainement pour éventuellement comprendre le problème qui se pose à moi.
    Pourrais-je être éclairé par un spécialiste VBA sur la macro ci-dessus pour la faire fonctionner sur l'ensemble du classeur et non sur une seule feuille ?

    Cordialement
    0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Essaies ce code :
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim n As Name
    Dim f As String
      On Error GoTo fin
      nom = Target.Name.Name
      If InStr(nom, "?") > 0 Then
        nom = Left(nom, InStr(nom, "?"))
        Application.EnableEvents = False
        num = 1
    encor:
        Set n = ThisWorkbook.Names(nom & num)
        f = Replace(Split(n.RefersTo, "!")(0), "=", "")
        Worksheets(f).Range(nom & num).Value = Target.Value
        num = num + 1
        GoTo encor
      End If
    fin:
      On Error GoTo 0
      Application.EnableEvents = True
    End Sub


    Il faut le mettre dans chaque feuille concernée

    0