Appliquer une macro à tous les onglets du classeur

Fermé
Crazydunker - Modifié le 3 déc. 2018 à 22:26
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 8 déc. 2018 à 19:26
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.
A voir également:

3 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
3 déc. 2018 à 23:45
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
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
8 déc. 2018 à 19:26
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