Bonjour à tous,
J'ai un souci de compatibilité entre l'utilisation du If ... ElseIf ... EndIf et du GoTo ...Exit Sub. J'explique :
Dans un tableau Excel je rentre une date dans la cellule L16C3. Je mets en place un bouton associé à une macro qui va tester la validité de cette entrée et afficher un message adapté à l'erreur de saisie éventuellement faite.
D'abord je teste la présence d'une donnée, puis si c'est une date, puis si elle ne dépasse pas celle du jour. En cas d'erreur j'affiche un message adapté à l'erreur, je sélectionne la cellule concernée et je quitte par un Exit Sub.
Ce qui donne le code suivant
Lors de l'exécution j'obtiens une erreur de compilation "Else sans If", ce qui n'est manifestement pas le cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Sub Validation() 'Test date d'arrivée 'si la cellule est vide If IsEmpty(Cells(16, 3).Value) Then GoTo Erreur1 'si la donnée n'est pas une date valide ElseIf Not IsDate(Cells(16, 3).Value) Then GoTo Erreur2 'si la date est supérieure à aujourd'hui ElseIf Cells(16, 3).Value > Date Then GoTo Erreur3 End If Exit Sub Erreur1: MsgBox "Pas de date d'arrivée", 1, "Attention" Cells(16, 3).Select Exit Sub Erreur2: MsgBox "Ne correspond pas au format jj/mm/aa", 1, "Attention" Cells(16, 3).Select Exit Sub Erreur3: MsgBox "Erreur de date", 1, "Attention" Cells(16, 3).Select Exit Sub End Sub
Je suppose que les If ... ElseIf... End If ne font pas "bon ménage" avec les GoTo et Exit Sub. Pouvez-vous m'en dire plus à ce sujet ?
Comme les tests s'y prêtent j'ai contourné le problème avec des If ... Then sans Else, ce qui donne le code :
Je sais, ça va vous paraître bizarre, je pose un problème et je donne une solution. Ce que je souhaite c'est comprendre pourquoi la première solution ne fonctionne pas et comment peut-on la faire fonctionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 'Test date d'arrivée 'si la cellule est vide If IsEmpty(Cells(16, 3).Value) Then GoTo Erreur1 'si la donnée n'est pas une date valide If Not IsDate(Cells(16, 3).Value) Then GoTo Erreur2 'si la date est supérieure à aujourd'hui If Cells(16, 3).Value > Date Then GoTo Erreur3
Merci de m'éclairer sur ce point.
Partager