[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.

image

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 , mais voici

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

4classeur1.xlsm (12.58 Ko)

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

image

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.

Rechercher des sujets similaires à "vba erreur pas"