Appliquer une macro à tous les onglets du classeur

Crazydunker -  
Patrice33740 Messages postés 8561 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

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Tout ça ne parait pas très orthodoxe !

Un excellent cours VBA pour débutant (gratuit) :
ftp://ftp-developpez.com/bidou/Cours/VBA/formationVBA.pdf
0
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
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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