Problème sur boucle for... next
Résolu
Nospam54
Messages postés
152
Date d'inscription
Statut
Membre
Dernière intervention
-
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un réel problème avec un bout de code dans lequel il y a plusieurs boucles imbriquées...
Je souhaite que mon Userform propose à l'utilisateur uniquement des boutons d'options qui récupèrent leur libellé dans une matrice.
L'Userform contient 10 OptionButton qui sont par défaut inactifs et doit en activer autant que de libellés dans la matrice.
Mon code compte d'abord le nombre de libellés dans la matrice, puis va tester les contrôles de l'USerform. Au premier OptionButton trouvé, il va y poser le premier libellé
dans son Caption et l'activer. Puis il passe au second libellé et au second OptionButton... et ainsi de suite.
Écrit comme cela ça semble simple, non ? Ben pas pour moi !
Au mieux je parviens à remplir les Caption, mais avec le dernier libellé de la matrice. Au pire, la macro tourne en boucle...
J'ai essayé de décomposer les actions sur papier... J'ai bougé For/Next ou For Each... rien à faire !
Ça fait un bon moment que moi aussi je tourne en boucle !
Je me doute qu'il s'agit d'un mauvais positionnement dans mon code, ou bien qu'il manque un For Exit quelque part...
Quelqu'un ou quelqu'une pourrait-il regarde cela et me donner une piste ?
Ci-dessous mon code. Et, si nécessaire, je peux éventuellement faire passer mon fichier test...
Merci d'avance !
J'ai un réel problème avec un bout de code dans lequel il y a plusieurs boucles imbriquées...
Je souhaite que mon Userform propose à l'utilisateur uniquement des boutons d'options qui récupèrent leur libellé dans une matrice.
L'Userform contient 10 OptionButton qui sont par défaut inactifs et doit en activer autant que de libellés dans la matrice.
Mon code compte d'abord le nombre de libellés dans la matrice, puis va tester les contrôles de l'USerform. Au premier OptionButton trouvé, il va y poser le premier libellé
dans son Caption et l'activer. Puis il passe au second libellé et au second OptionButton... et ainsi de suite.
Écrit comme cela ça semble simple, non ? Ben pas pour moi !
Au mieux je parviens à remplir les Caption, mais avec le dernier libellé de la matrice. Au pire, la macro tourne en boucle...
J'ai essayé de décomposer les actions sur papier... J'ai bougé For/Next ou For Each... rien à faire !
Ça fait un bon moment que moi aussi je tourne en boucle !
Je me doute qu'il s'agit d'un mauvais positionnement dans mon code, ou bien qu'il manque un For Exit quelque part...
Quelqu'un ou quelqu'une pourrait-il regarde cela et me donner une piste ?
Ci-dessous mon code. Et, si nécessaire, je peux éventuellement faire passer mon fichier test...
Merci d'avance !
Sub Init_SelFact()
'
Dim Feuille As Worksheet
Dim Matr As Range
Dim Cpt As Long
Dim i As Integer
Dim Ob As Control
Dim c As String
Dim NoCol As Integer
Dim NoLig As Long
'
Set Feuille = Sheets("Param") ' Set de la feuille de travail
Set Matr = Sheets("Param").Range("Matr_ET") ' Set de la matrice contenant les données
Cpt = Application.CountA(Matr) / 2 ' Détermine le nombre d'itérations (égal au nombre de données dans la matrice, celle-ci ayant 2 colonnes il faut diviser par 2)
NoCol = 10 ' Numéro de la colonne sur laquelle récupérer les libellés, soit la deuxième colonne de la matrice
'
Load Sél_Fact ' Charge l'Userform ''Sel_Fact'' en mémoire
'
' Initialisation des boutons options
'
For i = 1 To Cpt
'
For NoLig = 2 To Cpt + 1
MsgBox Feuille.Cells(NoLig, NoCol) ' Un test pour savoir quel est le libellé récupéré...
'
For Each Ob In Sél_Fact.Controls ' Balayage des contrôles de l'Userform
If TypeOf Ob Is MSForms.OptionButton Then ' Si le contrôle actif est du type ''OptionButton''...
c = Mid(Ob.Name, 1, 6) ' Récupère les 6 premiers caractères du name du contrôle
With Sél_Fact(c & "0" & i) ' Incrémente le name du contrôle avec la valeur de i
.Caption = Feuille.Cells(NoLig, NoCol) ' Pose dans le catpion du contrôle actif le libellé en cours dans la matrice
.Enabled = True ' Rend le contrôle actif
End With
End If
Next
'
Next
'
Next
'
Sél_Fact.Show ' Active l'USerform
'
End Sub
A voir également:
- Problème sur boucle for... next
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Idm for mac - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
1 réponse
Bonjour,
je peux éventuellement faire passer mon fichier test... Ah que oui
Pour transmettre un fichier,
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
je peux éventuellement faire passer mon fichier test... Ah que oui
Pour transmettre un fichier,
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
Voilà qui est fait ! Merci...
https://www.cjoint.com/c/FAhlI0THdXb
Vu de ma fenetre, y a quand meme plus simple. Une listbox avec bouton d'options et le remplissage fait avec un code dans l'UF
Quel est le rapport entre le texte des boutons d'option et le message exemple:
le mois selectionne est : bouton option n°2 ???????????????????????
J'imagine bien qu'il y a(vait) plus simple. Suis pas un spécialiste du VBA, je fais donc selon mes compétences...
Pour ta question, c'est un reste d'un test que j'ai utilisé précédemment. Ça n'a pas d'intérêt en fait.
Je vous fait un exemple ou pas ?????
Et encore merci !