Mécompréhension "For Each..."

Bonjour à tous,

Dans les cours 9: "Formulaires et contrôles", il y a une ligne de code sur laquelle je bloque depuis un moment:

Private Sub CommandButton1_Click()
    Dim colonne As String, ligne As String

    'Boucle pour chaque contrôle de Frame_colonne
   [color=#FF0000] For Each bouton_colonne In Frame_colonne.Controls[/color]
        'Si la valeur du contrôle = True (donc si coché) ...
        If bouton_colonne.Value Then
           'La variable "colonne" prend comme valeur le texte du bouton
           colonne = bouton_colonne.Caption
        End If
    Next

    'Boucle pour l'autre frame
    [color=#FF0000]For Each bouton_ligne In Frame_ligne.Controls[/color]
        If bouton_ligne.Value Then
            ligne = bouton_ligne.Caption
        End If
    Next

    Range(colonne & ligne) = "Cellule choisie !"
    Unload Me
End Sub

J'essaye d'appliquer le même formalisme:

[color=#FF0000]For Each OptionButton In Frame_Civilite.Controls[/color]

        If OptionButton Then

    Civilite = OptionButton.Value

         End
    Next

Mais ça ne fonctionne pas. Chacun de mes boutons d'option s'appellent "OptionButton1,2 ou 3" et mon frame s'appelle "Frame"...

Est_ce que quelqu'un peut m'expliquer où est mon erreur et comment la résoudre ? Et la cerise sur le gâteau, me dire à quoi sert/correspond ".Controls"

Merci d'avance pour l'aide !

Bonjour

Option.Button ne prend que les valeurs ''True'' ou ''False''

Ta variable Civilité ne pourra donc prendre que l'une de ces valeurs.

Mais si tu veux suivre l'exemple de ta leçon, tu peux toujours écrire :

Civilite = OptionButton1.caption

Dans ce cas, la variable ''Civilité'' prendra comme valeur le texte qui accompagne le bouton dans ton USF

OK ?

Re,

Ca sans problème, mais le "for each" ... Comment fonctionne-il dans le premier code ? Et pourquoi ne fonctionne-t-il pas dans le mien ?

Cordialement

godman02 a écrit :

Comment fonctionne-il dans le premier code ? Et pourquoi ne fonctionne-t-il pas dans le mien ?

Pour ne pas te répondre de bêtises, je voudrais bien vérifier mes réponses avant avec ton fichier.

Si tu veux bien...

Bye !

Le voici, j'ai mis des "ATTENTION" en commentaire devant les deux types de code ... Celui qui fonctionne sans être optimisé et celui qui ne fonctionne pas et que j'ai défini avec les "For each"

Je ne suis pas loin si quelque chose n'est pas claire dans tous le patatra de mon code

Merci encore

106ajoutercontact.zip (17.60 Ko)

Bonjour

J’ai noté plusieurs erreurs dans le code associé au bouton ‘’Ajouter un contact’’

• Ta feuille VBA est déclarée en ‘’Option Explicit’’. Cela veut dire que la déclaration des variables est obligatoire.

Or tu n’a pas déclaré la variable ‘’OptionButton’’, pas plus que la variable ‘’Civilité’’

• Tu donnes à la variable ‘’Civilité’’ la valeur de la variable ‘’OptionButton’’.

Or, cette dernière ne peut prendre que 2 valeurs, ‘’True’’ ou ‘’False’’. Ou rester vide si aucun bouton n’est cliqué. Donc, dans le meilleur des cas, tu auras sur ta feuille de calcul que la valeur ‘’Vrai’’ ou ‘’Faux’’ en colonne A

Pour avoir l’une des 3 options souhaitées il te faut écrire :

Civilite = OptionButton.Caption

Et non pas

Civilite = OptionButton.Value

• Tu ne fais rien de la variable ‘’Civilité’’ qui a recueilli la valeur de la variable ''Civilite''.

Il te faut écrire sa valeur en colonne A :

         …
        Cells(no_nouvelle_ligne, 1) = Civilite
        Cells(no_nouvelle_ligne, 2) = TextBox_Nom.Value
        …

Ci-joint une version rectifiée

Bye !

107ajoutercontact-v1.zip (19.84 Ko)

Merci beaucoup !

Rechercher des sujets similaires à "mecomprehension each"