Boucles For each

Bonjour à tous,

je suis en train de développer un projet de cahier de sortie pour un club nautique, et j'ai un problème avec les boucles For each.

J'ai créé un Userform avec des boutons d'option dans un Frame appelé CondMet. J'ai voulu refaire l'exemple de cette page https://www.excel-pratique.com/fr/vba/controles.php en l'adaptant à mon cas, mais quand j'éxécute la macro, j'ai un message d'erreur "Erreur d'execution 438 Propriété ou méthode non gérée par cet objet". Le but est de d'affecter une valeur à une variable en fonction de la case cochée.

Voici le code que j'ai écrit:

Private Sub OKact_Click()

For Each Ctrl In CondMet.Controls

If Ctrl.Object.Value = True Then 'si la valeur du contrôle= True (cochée)

CondmetStatut.Value = OptionButton_CondMet.Caption

End If

Next

Egalement, le fichier du projet.

Merci par avance pour votre aide

Edit: j'ai oublié de préciser que c'est pour le deuxième userform.

Bonsoir,

le soucis est que la boucle for each boucle tous les contrôles du USF, hors certains sont des "Label" donc pas de propriété "Value"...

Il faut boucler sur les contrôles, et à chaque contrôle il faut tester si c'est un OptionButton, puis si c'est le cas vérifier sa valeur

@ bientôt

LouReeD

Ci joint une petite idée...

ce n'est pas forcément "pro", mais le principe est le suivant :

dès que l'on click sur un optionbutton, tous les autres sont "False", et celui sur lequel on vient de cliquer passe une variable "public" à la valeurs du bouton en disant 5 ensoleillé et 0 orageu.

Ensuite grâce au tableau public Les_conditions, on peut ressortir le type de temps sélectionné.

@ bientôt

Loureed

Bonjour,

Pour le principe.

Cdlt.

Private Sub OKact_Click()
Dim Ctrl As Control
    'Boucle pour boutons d'options "conditions météo"- ne fonctionne pas
    For Each Ctrl In CondMet.Controls
        If TypeOf Ctrl Is MSForms.OptionButton Then
            If Ctrl.Object.Value = True Then
                CondmetStatut = Right(Ctrl.Object.Caption, 1)
                MsgBox CondmetStatut
                Exit For
            End If
        End If
    Next
End Sub

Forcément plus propre

Ce doit être le costume...

@ bientôt

LouReeD

bonsoir

à moins que ce soit la cravate...

ceci dit, une question, plusieurs réponses, et puis plus rien....

Sujet clos ? Résolu ?

@ bientôt

LouReeD

Bonsoir,

sujet non encore clos, je me suis absenté ces derniers jours, et n'avais pas de connexion fiable. Je n'ai donc pas pu encore tester vos solutions, j’espère pouvoir voir ça demain.

Merci déjà pour vos réponses.

Ouf ! Rassuré je suis !

@ bientôt

LouReeD

Bonsoir le fil, bonsoir le forum,

Étrange de déclarer la variable CondmetStatut dans le Composent Feuil1(acceuil) ! Ou alors la déclarer publique... Non ?

Sinon, plutôt que d'attribuer une valeur à la propriété [Caption] des OptionButtons, j'aurais attribué la même valeur mais à sa propriété [Tag]. Ça donnerait un code de ce type :

Private Sub OKact_Click()
Dim CRTL As Control
Dim CondmetStatut As String 'ou : As Byte

For Each CTRL In CondMet.Controls
    If CTRL.Tag <> "" Then
        If CTRL.Value = True Then CondmetStatut = CTRL.Tag 'ou : = CByte(CTRL.Tag)
    End If
Next CTRL
End Sub

Bonjour,

je viens de tester cette dernière solution: elle fonctionne, pile ce que je voulais faire. Problème résolu donc.

Si je déclare mes variables dans la feuil1, c'est que j'en aurai besoin dans d'autres codes dans la suite du projet. Pour la suite, je pense faire un code d'initialisation dès l'ouverture du classeur où je déclarerai toutes mes variables, qu'en pensez vous?

Merci à tous pour vos réponses qui m'aident à progresser, j'aurai probablement d'autres question sur ce projet.

Bonjour,, question suivante:

Dans le Userform suivant, je sélectionne les membres ayant participé à l'activité (userform3).

Je sélectionne les membres concernés, puis les transfert dans la listbox des présents, jusque la, OK.

Maintenant, je voudrais que le contenu de cette listbox soit transférée dans une variable tableau et c'est la que je bloque. J'ai essayé plusieurs codes à partir de ce que j'avais compris de différents exemples trouvés sur internet, mais je n'y arrive pas.

Dim nbitem As Integer           'dimensionnement variable nb d'item listbox2
nbitem = ListBox2.ListCount     'nb item= nombre de présents dans la liste

Dim tab1()                      'dimensionnement variable tableau

For i = 0 To nbitem
tab(0,i)=ListBox2.List(i)
Next

message d'erreur affiché: erreur de compilation, Attendu: Numéro de ligne ou étiquette ou instruction ou fin d'instruction.

merci d'avance pour votre aide.

Bonjour,

première erreur constatée : vous dimensionnez Dim tab1()

et dans la suite du code vous faites appel à tab() et tab1() n'est pas égal à tab() !!!

Dim tab1()

c'est bon, vous ne connaissez pas la taille de votre tableau donc on ne le dimensionne pas

si vous connaissez sa dimension (par exemple 10 variables) alors :

Dim tab1(9)

en effet le premier index d'un tableau est le "0" donc pour 10 "cases" 10 index on a bien :

0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 !

Ceci peut être modifier avec l'instruction :

Base 1

en début de code qui indique à VBA que le premier index des tableaux est "1" ce qui a pour conséquence pour un tableau de taille connu de dix variables de le déclaré par

Dim tab1(10)

Donc dans votre code tab1() est bon

avant vous avez :

Dim nbitem As Integer

nbitem = ListBox2.ListCount

nbitem correspondra à la taille de votre tableau donc l'idéal serait d'écrire ceci :

Dim nbitem As Integer 
nbitem = ListBox2.ListCount 
Dim tab1(nbitem)

For i = 0 to nbitem-1
    tab1(i)=ListBox2.List(i)' ici il n'y a que i et non pas (0,i) car votre tableau n'a qu'une dimension !
Next i

aller bon courage vous êtes sur la bonne voie

j'ai coutume de dire :

c'est en forgeant qu'on devient forgeron et

c'est en sciant que Léonard de Vinci

(d'autres rajoutent quelque fois)

c'est en déconnant que l'on devient c..

@ bientôt

LouReeD

Ah oui, des erreurs toutes bêtes. Merci pour les corrections.

Je vais continuer à déconner, ça me vas

Bonsoir,

Voici la question suivante.

Maintenant que j'ai ma liste des personnes présentes, il faut que je leur affecte un matériel utilisé. Par exemple, Dupont a utilisé le bateau 1, Durand le 2 ainsi que Trucmuch. J'ai dans l'idée que le plus simple serait d'utiliser ma variable tableau en rajoutant une dimension en mettant le matériel en face de chaque nom. Par contre, la où je n'ai pas d'idée, c'est comment le présenter dans mon formulaire, il faut que j'ai ma liste des présents (ça OK) et qu'en face je puisse choisir pour chacun d'eux le matériel utilisé via une liste. Comment feriez vous?

Rechercher des sujets similaires à "boucles each"