Problème boucles Checkbox Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
X
Xmastree14
Jeune membre
Jeune membre
Messages : 23
Inscrit le : 18 juillet 2019
Version d'Excel : 2016
Version de Calc : 2016

Message par Xmastree14 » 4 septembre 2019, 09:13

Hello,

Je me permet de reposter car ma boucle que je pensais enfin fonctionnelle refait des siennes sans que je comprenne pourquoi ::(
Voici le code :
For x = 20 To 45
    If Range("B14").Value <> "" Then
            Exit For
    Else
            Controls("CheckBox" & x).Value = True
            Range("B14").Value = Controls("Label" & x).Caption
            UserForm1("CheckBox" & x).Value = False
    End If
    If Range("B15").Value <> "" Then
            Exit For
    Else
            Controls("CheckBox" & x).Value = True
            Range("B15").Value = Controls("Label" & x).Caption
            UserForm1("CheckBox" & x).Value = False
    End If
    If Range("B16").Value <> "" Then
            Exit For
    Else
            Controls("CheckBox" & x).Value = True
            Range("B16").Value = Controls("Label" & x).Caption
            UserForm1("CheckBox" & x).Value = False
    End If
Next x
Problème, les 3 cellules prennent la valeur de mon Label20 qu'il soit coché ou non.

Merci de votre aide ::)
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'733
Appréciations reçues : 161
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 4 septembre 2019, 09:38

Bonjour Xmastree, bonjour le forum,

Tu boucles de 20 a 45. Si B14 n'est pas vide tu sors de la boucle !... Donc après la première boucle, tu sortiras systématiquement puisque tu attribues une valeur à B14 dès la première boucle. Comme je n'ai aucune idée de ce que tu veux faire je ne peux te proposer un code fonctionnel.

Pas bien compris :
Controls("CheckBox" & x)
et
UserForm1("Checkbox") & x)
J'aurais plutôt écris :
UserForm1.Controls("CheckBox" & x)
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
X
Xmastree14
Jeune membre
Jeune membre
Messages : 23
Inscrit le : 18 juillet 2019
Version d'Excel : 2016
Version de Calc : 2016

Message par Xmastree14 » 4 septembre 2019, 09:44

Salut !

Pourquoi tu dis que j'affecte une valeur à B14 ? ::~
La seule valeur qui est affectée est dans le else ?
Dans mon Userform_Initialization() j'ai ces 3 lignes d'ailleurs :

Range("B14") = ""
Range("B15") = ""
Range("B16") = ""

Donc je pense vraiment pas que je sorte de la boucle direct, d'autant plus que j'aurais rien dans mes cellules B15 / B16 si c'était le cas.

Controls("Checkbox" & x) = True vérifie que la Checkbox de rang x est bien cochée avant de poursuivre la boucle.

Tu as raison pour le Userform1(...), je savais qu'il y avait un problème de syntaxe pas pas comment le résoudre :lole:
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'733
Appréciations reçues : 161
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 4 septembre 2019, 09:52

Re,

Je ne t'ai pas dis que tu sortais direct mais tu sortiras après la première boucle !... Dès que tu auras attribué une valeur à B14, B15 ou B16. Fait tourner ton code pas à pas avec la touche [F8]...
Il est possible que je me trompe (on n'a qu'un bout de code, pas l'ensemble) , mais si tu veux qu'on comprenne et qu'on puisses t'aider efficacement, envoie le fichier et l'explication de ce que tu veux!
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'733
Appréciations reçues : 161
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 4 septembre 2019, 10:00

Re,
Xmastree14 a écrit :
4 septembre 2019, 09:44
Donc je pense vraiment pas que je sorte de la boucle direct, d'autant plus que j'aurais rien dans mes cellules B15 / B16 si c'était le cas.

Je persiste. Fais tourner le code pas à pas...
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
X
Xmastree14
Jeune membre
Jeune membre
Messages : 23
Inscrit le : 18 juillet 2019
Version d'Excel : 2016
Version de Calc : 2016

Message par Xmastree14 » 4 septembre 2019, 10:00

En effet tu as raison je fais une boucle puis je sors du FOR. ( Je connaissais pas le F8 c'est cool ::o )
Du coups mon problème est comme tu as dit que je sors de la boucle aprés la première, alors qu'en soi je veux juste passer au IF suivant ..
Et au niveau du code tu as tout ce qui conçerne mon problème je pense. En gros j'ai Label 20 à Label 45 et Checkbox 20 à Checkbox 45, et j'aimerais que les 3 premières checkbox cochées renvoient la valeur de leur Label respectif ( de i égal ) dans les cellules B14, 15 et 16.
Le premier problème étant cette sortie de boucle prématurée, le deuxième est selon moi que ma ligne
UserForm1.Controls("CheckBox" & x).Value = False
ne fonctionne pas puisque les cellules B15 et B16 affichent toujours la même valeur que B14, ce qui veut dire que la Checkbox ne se décoche pas comme j'ai voulu le faire dans cette ligne ..
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'733
Appréciations reçues : 161
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 4 septembre 2019, 10:13

Re,

je ne comprends vraiment pas ton code. Il semble que tu ne puisses cocher que 3 checkboxes sur 26 et dans ce cas là, il faut utiliser des OptionButtons avec des groupes différent. Mais, encore un fois, si tu ne daignes pas fournir le fichier on ne pourra pas t'aider...
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'733
Appréciations reçues : 161
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 4 septembre 2019, 10:16

Re,

Peut-être comme ça :
Dim X As byte
Dim I As Byte
X = 14
For I = 20 To 45
    If Me.Controls("Checkbox" & I).Value = True Then Cells(X, "B").Value = Me.Controls("Label" & I).Caption: X = X + 1
Next I
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
X
Xmastree14
Jeune membre
Jeune membre
Messages : 23
Inscrit le : 18 juillet 2019
Version d'Excel : 2016
Version de Calc : 2016

Message par Xmastree14 » 4 septembre 2019, 10:21

Bon, quoiqu'il en soit ton code marche :D

Merci à toi!
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message