'Macro "évènementielle" se déclenche quand une cellule est modifiée sur
'n'importe quelle feuille
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'"Sh" désigne la feuille modifiée et "Target" la cellule ou la plage de cellules modifiées
'déclaration des variables
Dim Lig As Variant, Col As Variant, Ws As Worksheet, Res As Variant
's'il s'agit d'une feuille "Campagne"
If Left(Sh.Name, 8) = "Campagne" Then
'si une cellule est modifiée (par commodité, c'est le cas général
'sinon, on peut toujours faire autrement
If Target.Count > 1 Then Exit Sub
'Si les cellules des colonnes "B", "N", "W", "AF" et "AP:AW" sont concernées
If Target.Column = 2 Or Target.Column = 14 Or Target.Column = 23 Or _
Target.Column = 31 Or (Target.Column >= 42 And Target.Column <= 49) Then
'Boucle sur toutes les feuilles
For Each Ws In Sheets
'recherche du plus grand millésime des feuilles Campagne
If Right(Ws.Name, 4) > Res And Left(Ws.Name, 8) = "Campagne" Then Res = Right(Ws.Name, 4)
Next Ws
'si la feuille modifiée correspond à ce millésime
If Right(Sh.Name, 4) = Res Then
'désactive les macros évènementielles
Application.EnableEvents = False
'boucle sur toutes les feuilles
For Each Ws In Sheets
With Ws
's'il s'agit d'une feuille différente de celle modifiée
If Left(.Name, 8) = "Campagne" And .Name <> Sh.Name Then
'recherche de la ligne correspondante à la cellule modifiée (avec EQUIV)
Lig = Application.Match(Cells(Target.Row, 1), .[A:A], 0)
'recherche de la colonne correspondante à la cellule modifiée (avec EQUIV)
Col = Application.Match(Cells(1, Target.Column), .[1:1], 0)
'si on a trouvé correspondante sur la feuille cible
If IsNumeric(ligne) And IsNumeric(Col) Then
'modification de la cellule cible
.Cells(Lig, Col) = Target.Value
End If
End If
End With
Next Ws
'réactive les macros évènementielles
Application.EnableEvents = True
End If
End If
End If
End Sub