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 ?