[VBA] Si erreur, ne pas faire le IF
Bonjour,
Dans mon code j'ai configuré la gestion d'erreur de la sorte:
On Error Resume Next
J'ai un IF où les conditions ne peuvent être testés car j'ai une erreur sur le Range donc je voudrais End if car toutes les conditions ET ne sont pas remplis.
Cependant comme montré sur la photo, le code passe dans le THEN mais j'aimerai que le code passe au prochaine IF
Que dois-je mettre comme gestion d'erreur ?
D'avance merci,
A+
bonjour,
une fichier avec le code vaut mieux qu'une photo
on error goto terreur
'ton test sur checkbox 3
cb4:
'ton test sur checkbox 4
....
exit sub
terreur:
resume cb4
end sub
une fichier avec le code vaut mieux qu'une photo
Je l'attendais celle la 🙄🤗
Le problème ne viens pas de mon Checkbox mais de mon Range ! En fait le surlignage jaune est trompeur sur ma photo..
Dans mon IF j'ai 3 conditions liés avec ET
Sur la photo tu peux voir: ... and Range("L79") < truc and ...
Mon Range("L79") = Erreur donc la comparaison avec truc ne peux pas se faire, j'aimerais donc que la condition IF soit skip
Sur ma photo je montre que en mode pas à pas (Jaune) malgré l'erreur le code exécute le Then
Est-ce un peu mieux expliqué ?
Je prépare le fichier anonimisé au cas ou
Je pense que ce classeur illustre le problème, il faut aller chercher la macro dans le module 1
re-bonjour,
décidément quelques jours de vacances ne me valent rien...
voici
Sub test()
On Error GoTo terreur
If 1 = 1 And Range("D13") > 5 And 2 = 2 Then MsgBox ("Ce msg ne doit pas apparaître")
cb4:
MsgBox "instruction suivante malgré l'erreur"
Exit Sub
terreur:
Resume cb4
End Sub
Ok, alors j'ai fait cela (un peu fastidieux) :
Select Case Range("C17")
Case Is = 16
On Error GoTo er1
If Me.CheckBox1.Value = True And Range("D34") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("D34") > 0 Then Me.CheckBox1.Value = False
er1:
On Error GoTo er2
If Me.CheckBox2.Value = True And Range("H34") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("H34") > 0 Then Me.CheckBox2.Value = False
er2:
On Error GoTo er3
If Me.CheckBox3.Value = True And Range("L34") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("L34") > 0 Then Me.CheckBox3.Value = False
er3:
On Error GoTo er4
If Me.CheckBox4.Value = True And Range("P34") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("P34") > 0 Then Me.CheckBox4.Value = False
er4:
Case Is = 31
On Error GoTo er5
If Me.CheckBox1.Value = True And Range("D49") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("D49") > 0 Then Me.CheckBox1.Value = False
er5:
On Error GoTo er6
If Me.CheckBox2.Value = True And Range("H49") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("H49") > 0 Then Me.CheckBox2.Value = False
er6:
On Error GoTo er7
If Me.CheckBox3.Value = True And Range("L49") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("L49") > 0 Then Me.CheckBox3.Value = False
er7:
On Error GoTo er8
If Me.CheckBox4.Value = True And Range("P49") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("P49") > 0 Then Me.CheckBox4.Value = False
er8:
Case Is = 61
On Error GoTo er9
If Me.CheckBox1.Value = True And Range("D79") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("D79") > 0 Then Me.CheckBox1.Value = False
er9:
On Error GoTo er10
If Me.CheckBox2.Value = True And Range("H79") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("H79") > 0 Then Me.CheckBox2.Value = False
er10:
On Error GoTo er11
If Me.CheckBox3.Value = True And Range("L79") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("L79") > 0 Then Me.CheckBox3.Value = False
er11:
On Error GoTo er12
If Me.CheckBox4.Value = True And Range("P79") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("P79") > 0 Then Me.CheckBox4.Value = False
er12:
End Select
Mais maintenant j'ai une erreur "incompatibilité de type" pourtant quelques soit l'erreur, il devrais passer à la ligne d'après ! grrrrr
Je vais déposer mon fichier ici demain matin ce sera plus simple pour trouver une solution. Je pense que l'erreur vient d'une autre procédure appelé en fait ça à l'air assez complexe...
re-bonjour,
ton code devrait ressembler à ceci
Select Case Range("C17")
Case Is = 16
On Error GoTo er1
If Me.CheckBox1.Value = True And Range("D34") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("D34") > 0 Then Me.CheckBox1.Value = False
rer1:
On Error GoTo er2
If Me.CheckBox2.Value = True And Range("H34") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("H34") > 0 Then Me.CheckBox2.Value = False
rer2:
On Error GoTo er3
If Me.CheckBox3.Value = True And Range("L34") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("L34") > 0 Then Me.CheckBox3.Value = False
rer3:
On Error GoTo er4
If Me.CheckBox4.Value = True And Range("P34") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("P34") > 0 Then Me.CheckBox4.Value = False
rer4:
Case Is = 31
On Error GoTo er5
If Me.CheckBox1.Value = True And Range("D49") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("D49") > 0 Then Me.CheckBox1.Value = False
rer5:
On Error GoTo er6
If Me.CheckBox2.Value = True And Range("H49") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("H49") > 0 Then Me.CheckBox2.Value = False
rer6:
On Error GoTo er7
If Me.CheckBox3.Value = True And Range("L49") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("L49") > 0 Then Me.CheckBox3.Value = False
rer7:
On Error GoTo er8
If Me.CheckBox4.Value = True And Range("P49") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("P49") > 0 Then Me.CheckBox4.Value = False
rer8:
Case Is = 61
On Error GoTo er9
If Me.CheckBox1.Value = True And Range("D79") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("D79") > 0 Then Me.CheckBox1.Value = False
rer9:
On Error GoTo er10
If Me.CheckBox2.Value = True And Range("H79") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("H79") > 0 Then Me.CheckBox2.Value = False
rer10:
On Error GoTo er11
If Me.CheckBox3.Value = True And Range("L79") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("L79") > 0 Then Me.CheckBox3.Value = False
rer11:
On Error GoTo er12
If Me.CheckBox4.Value = True And Range("P79") < CDbl(Replace(Me.TextBox_cpk.Value, ".", ",") * 1) + 0.15 And Range("P79") > 0 Then Me.CheckBox4.Value = False
rer12:
End Select
On error goto 0
'suite de tes instructions
Exit Sub
'traitement des erreurs
er1: Resume rer1
er2: Resume rer2
er3: Resume rer3
er4: Resume rer4
er5: Resume rer5
er6: Resume rer6
er7: Resume rer7
er8: Resume rer8
er9: Resume rer9
er10: Resume rer10
er11: Resume rer11
er12: Resume rer12
Bonjour H2So4,
je ne comprend pas pourquoi ont doit passer par "er1: Resume rer1"
Et pourquoi pas "court circuiter" comme je l'avais fait ?
En tout cas, tout à l'air de fonctionner comme je le souhaite maintenant !
Merci
bonjour,
l'instruction on error goto x provoque le branchement vers un ensemble d'instructions (que l'on trouve à l'étiquette x:) qui va gérer l'erreur, quand l'erreur est gérée on retourne au déroulement normal du programme avec une instruction resume qui réenclenche également la gestion d'erreur, sans cette instruction la prochaine erreur détectée provoquera l'affichage de la fenêtre classique vba avec le code de l'erreur.