Quitter une boucle IF

Bonjour,

Décidément il y'a quelque chose que je comprends pas avec les boucles sur VBA..

Imaginons j'écrive ça :

If Controls(CheckBox20).Value = True Then
        Range("B15").Value = Controls("Label20").Caption
        UserForm1.CheckBox20.Value = False
End If

Ce que je comprend de leur "Erreur d'éxécution n°[...] Argument non valide", c'est qu'il faudrait que je donne une consigne dans le cas ou ma Checkbox est en état False ?

J'aimerais simplement que le code quitte le IF et continue le programme si la condition n'est pas valide en fait..

Merci de votre aide

Bonjour,

c'est bien comme ça que fonctionne le IF effectivement. Il ne s'agit pas d'une boucle mais d'une condition.

Si la condition est vérifiée, il fait quelque chose puis continue le script, sinon il fait autre chose (ou pas) puis continue le script.

Le soucis viens ici d'une erreur d'argument. Tu as un fichier à nous joindre ? (L'erreur est surement l'oubli de guillemet dans la condition du IF autour de Checkbox20 ?)

C'est bien ce que je pensais, et du coups si la condition n'est pas remplie il faut stipuler un truc du genre :

Else :quitterlaboucle:

Ou ne rien stipuler me fera automatiquement quitter la boucle ?

Tu as l'air d'avoir raison pour les "

C'est bien ce que je pensais, et du coups si la condition n'est pas remplie il faut stipuler un truc du genre :

Else :quitterlaboucle:

Ou ne rien stipuler me fera automatiquement quitter la boucle ?

Tu as l'air d'avoir raison pour les "

Bonjour,

Comme indiqué précédemment par melch, une structure IF n'est pas une boucle, il n'y a rien non plus à écrire pour quitter la structure... C'est au contraire une condition qui permet d'exécuter les instructions dans la structure.

Exemple :

If VarBooléenne = False Then CettePartieEstExécutée 
'Correspond implicitement à
If VarBooléenne = False Then CettePartieEstExécutée Else OnContinueNormalement

D'accord, ça marche j'ai compris !

Dernière petite question histoire de vérifier que ça va bien marcher,

Si la structure de mon code est :

While

If

End If

[...]

If

End If

Wend

et que j'insère une sortie prématurée de boucle dans un IF, logiquement au premier IF exécuté je devrait sortir de ma boucle While et être dispensé de tous les autres IF c'est bien ça ?

D'accord, ça marche j'ai compris !

Dernière petite question histoire de vérifier que ça va bien marcher,

Si la structure de mon code est :

While

If

La syntaxe n'est pas tout à fait celle-ci... C'est

While [condition]
   [Instruction(s)]
Wend

Il s'agit cette fois d'une boucle, le contenu étant exécuté tant que la condition reste vérifiée. C'est équivalent à :

Do While [condition]...Loop

Et proche de

Do Until [condition]...Loop (si la condition est vérifiée, elle provoque la sortie de la boucle)

Do...Loop Until [condition] (le contenu de la boucle est exécuté une première fois, puis à nouveau tant que la condition n'est PAS vérifiée)

Do...Loop While [condition] (le contenu de la boucle est exécuté une première fois, puis à nouveau tant que la condition est vérifiée)

Personnellement, je préfère utiliser une boucle For Var = ValDébut To ValFin...Next (ou l'on connait par avance le nombre de répétition dans la boucle), que l'on peut éventuellement quitter prématurément grâce à If [condition] Then Exit For

Bonjour,

Décidément il y'a quelque chose que je comprends pas avec les boucles sur VBA..

Imaginons j'écrive ça :

If Controls(CheckBox20).Value = True Then
        Range("B15").Value = Controls("Label20").Caption
        UserForm1.CheckBox20.Value = False
End If

Ce que je comprend de leur "Erreur d'éxécution n°[...] Argument non valide", c'est qu'il faudrait que je donne une consigne dans le cas ou ma Checkbox est en état False ?

J'aimerais simplement que le code quitte le IF et continue le programme si la condition n'est pas valide en fait..

Merci de votre aide

Bonjour,

J'ai un peu de mal à comprendre pourquoi la première fois tu utilises Controls(checkbox20) et ensuite userfom1.Checkbox20.value ?

Si ton userform est déjà ouvert checkbox20 ne suffit pas ?

If CheckBox20.Value = True Then
        Range("B15").Value = Controls("Label20").Caption
        CheckBox20.Value = False
End If

D'accord, alors :

For i = 20 To 45
    If Range("B14").Value <> "" Then Exit For
        Else: Controls("CheckBox" & i).Value = True
            Range("B14").Value = Controls("Label" & i).Caption
            CheckBox.Value = False
    End If
    Next i
Exit For

Tant que j'ai rien dans ma cellule B14, les "i" 20 à 45 doivent s’exécuter

Si une checkbox est cochée, le Label de même numéro que la Checkbox est inséré en B14, puis se décoche, et enfin on quitte la boucle

Sinon, je passe à la checkbox suivante.

Si aucune checkbox n'est cochée, on quitte la boucle.

C'est bien ce que mon code comprend ?

Bonjour,

Décidément il y'a quelque chose que je comprends pas avec les boucles sur VBA..

Imaginons j'écrive ça :

If Controls(CheckBox20).Value = True Then
        Range("B15").Value = Controls("Label20").Caption
        UserForm1.CheckBox20.Value = False
End If

Ce que je comprend de leur "Erreur d'éxécution n°[...] Argument non valide", c'est qu'il faudrait que je donne une consigne dans le cas ou ma Checkbox est en état False ?

J'aimerais simplement que le code quitte le IF et continue le programme si la condition n'est pas valide en fait..

Merci de votre aide

Bonjour,

J'ai un peu de mal à comprendre pourquoi la première fois tu utilises Controls(checkbox20) et ensuite userfom1.Checkbox20.value ?

Si ton userform est déjà ouvert checkbox20 ne suffit pas ?

If CheckBox20.Value = True Then
        Range("B15").Value = Controls("Label20").Caption
        CheckBox20.Value = False
End If

Salut,

Si si tu as raison, c'est pas trop le problème par contre

Ton code commenté :

For i = 20 To 45
    If Range("B14").Value <> "" Then 
            Exit For 'Indentation revue
    Else
            Controls("CheckBox" & i).Value = True 'Indentation revue
            Range("B14").Value = Controls("Label" & i).Caption
            UserForm1_("CheckBox" & i).Value = False
    End If
Next i 'Indentation revue
Exit For '<-- à supprimer, la fin d'une boucle FOR est marquée par l'instruction NEXT

Niquel c'est saisi;

Par contre j'ai un problème de syntaxe pour remettre la Checkbox a 0, en effet j'aimerais faire comme au dessus avec ("Checkbox" & i) mais ça ne marche pas.

Comment le code peut bien comprendre qu'il s'agit de la checkbox actuellement traitée ?

Rechercher des sujets similaires à "quitter boucle"