Salut @+,
je ne doute pas qu'il existe plus simple, juste que n'ayant pas le 1/100e de tes connaissances en VBA, j'ai juste essayé de comprende ce qu'il voulait faire et aider "SON" code à fonctionner.
Il me semble que c'est réalisé, je ne doute pas que tu puisses faire faire ça plus facilement, pour tout t'avouer j'ai toujours pas trouvé a quoi ça pourrait lui être utile...
Bon pour répondre à ta question, la macro année elle se déclenche quand on saisit une date en g2, elle lance la macro correspondant à l'année saisie enfin je crois.
Je te le répète c'est juste adapter son code pour arriver au résultat qu'il souhaite.
Pour moi le VBA c'est juste pour me faciliter la vie professionnelle: j'ai horreur de gratter du papier et ce forum (et toi en particulier) m'a fait découvrir la puissance qu'on pouvait tirer d'Excel (que j'utilisais déjà pas mal avec les formules et les TCD).
Quand je réponds aux gens c'est aussi une façon de vous exposer mes erreurs et de pouvoir progresser un peu plus s vous me les corrigez.c'est pour me permettre de comprendre un peu plus le langage etme familiariser avec ses instructions.
Là en l'occurence, je me suis satisfait de ne pas me faire virer par le compilateur et a priori d'obtenir ce que voulait Steve, n'oublie pas je ne suis que dans mes premiers pas en VBA (y a un mois je ne savais pas faire apparaitre une Msgbox et écrire une valeur dans une cellule en VBA...).
En l'occurence, merci de me dire si mon code ne fait pas ce que j'ai compris qu'il devait faire?
Dim IsectA8 As Range
Dim isectG2 As Range
'ça permet de sortir du prog si on a une range qui fait plus d'une cellule
If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then Exit Sub
'ce qui evite l'erreur incompatibilité de types quand on compare target.value
'car seule une cellule a une value pau une plage de plusieurs cellules
Set IsectA8 = Application.Intersect(Range("a8"), Target)
' target =cellule cliquée si c'est a8 il aura la valeur en a8 issue de la liste de validation
'appelle la macro correspondant à la valeur de a8
If Target.Value = "franck" Then Call franck
If Target.Value = "olivier" Then Call olivier
Set isectG2 = Application.Intersect(Range("g2"), Target)
'idem pour la cellule G2
'si g2 n'est pas la cellule cliquée on sort du prog
If isectG2 Is Nothing Then Exit Sub
'sinon on lance la macro correpondant à l'année de la date en g2
Select Case Year(Target.Value)
Case 2001
Call Macro2001
Case 2002
Call Macro2002
End Select
Si je suis dans l'erreur dans une interprétation merci de me corriger, je suis d'accord avec toi ça me parait stupide en l'espèce d'utiliser Intersect mais ...
Ben bonne soirée
Steplof