Bonjour,
il ne peut y avoir qu'une seule macro Worksheet_Change
En conséquence tu es obligé de gérer tous les cas de figure dans la même macro.
En premier tu gères la sélection unique :
If Target.Count = 1 Then
End if
Et à l'intérieur tu gères les plages avec Intersect (voir l'aide et l'exemple de VBA sur ce mot)
Utilise également une variable sur Target.Column pour vérifier les colonnes 20 à 22 et ça devrait le faire.
En cas de problème, tu fais signe...
[Edit] ça va te donner quelque chose comme ça :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Address = "$M$7" And Not IsEmpty(Target) Then
Call MacroDate
Else
i = Target.Column
If i > 19 And i < 23 Then Call TonAutreMacro
End If
End If
End Sub
Nota : Il est assez maladroit de faire des Call dans une macro Worksheet_Change car tu perds la référence à Target (à moins de la passer en param) Bref il faut mieux tout coder dans la macro Worksheet_Change plutot que de faire des Call
[Edit (2)] Bon d'accord, je n'ai pas utilisé intersect... Il n'en demeure pas moins que c'est l'outis à privilégier dans ce genre de situation...
A+