[RESOLU] Boucle pour afficher sous conditions des combobox

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jordan22

XLDnaute Nouveau
Bonjour,

J'ai créé un userform avec un champ text = Nbre_Article
J'ai aussi créé de nombreuses combobox sur le même userform : Prod1, Prod2 etc...
Elles sont masquées pour l'instant.

J'aimerais que lorsque l'utilisateur entre 6 comme nombre d'articles dans le champ de text, les 6 premieres combobox s'affichent.

J'ai essayé :
Code:
Private Sub Nbre_Article_Change()

Dim k As Range, ctrl As Control
Dim i As Range

i = Nbre_Article

    For k = 5 To i
        For Each ctrl In Me.Controls
            If TypeName(ctrl) = "Prod" Then
                If ctrl.Name = k.Value Then
                    ctrl.Visible = True
                End If
            End If
        Next ctrl
    Next k
End Sub
Dans ce code, je suppose que j'ai laissé affiché 5 combobox à l'affichage du userform mais que si l'utilisateur entre un chiffre supérieur à 5, d'autres s'afficheront.
Mais je rencontre des incompatibilités de type et je ne pense pas que ça marchera de toute façon.
Je ne sais pas comment boucler sur le nom des mes combobox avec comme variable juste le nombre à la fin de leur nom : ProdX
Un grand merci par avance.
 
Dernière édition:
Re : Boucle pour afficher sous conditions des combobox

Bonjour,
Hello Pierrot🙂,

Pour la comparaison sur le nom:

Code:
Private Sub Nbre_Article_Change()
Dim k As Range, ctrl As Control
Dim i As Range
i = Nbre_Article
    For k = 5 To i
        For Each ctrl In Me.Controls
            If LCase(TypeName(ctrl)) = "combobox" Then
                 'replace enlèvera 'Prod' du nom du combo pour ne comparer que les caractères restants
                 ctrl.Visible = Replace(ctrl.Name, "Prod", "") = CStr(k)
            End If
        Next ctrl
    Next k
End Sub

A+
 
Re : Boucle pour afficher sous conditions des combobox

Bonjour

Merci pour vos réponses. Je pense que ça approche.
J'avais une incompatibilité de type sur le k, j'ai mis integer ça a l'air mieux...
Mais j'ai une erreur de variable "objet/ variable de bloc with non définie" sur la variable i alors que c'est justement une simple variable qui reprend la valeur entrée dans la textbox.
Du coup je ne peux même pas tester la suite du code.
Voila ce que ça donne
Code:
Private Sub Nbre_Article_Change()
Dim k As Integer, ctrl As Control
Dim i As Range
i = CInt(Nbre_Article)

    For k = 5 To i
        For Each ctrl In Me.Controls
            If LCase(TypeName(ctrl)) = "combobox" Then
                 'replace enlèvera 'Prod' du nom du combo pour ne comparer que les caractères restants
                 ctrl.Visible = Replace(ctrl.Name, "Prod", "") = CStr(k)
            End If
        Next ctrl
    Next k
End Sub

encore merci
 
Re : Boucle pour afficher sous conditions des combobox

Jordan,

Nous avancerions plus vite, sans tourner autour du pot, avec un fichier exemple.

Mais si cela peut t'aider, il y a une façon qui serait plus simple à utiliser:

Dans le deuxième Boucle mettre i = l' indice du dernier des combobox "Prod"
Code:
Private Sub Nbre_Article_Change()
Dim k As Long, i As Long
Dim ctrl As Control
i = Nbre_Article
k = 5 'Les combox de 1 à 4 ne seront pas testé (toujours visibles)
    For k = 5 To i
         Me.Controls("Prod" & k).Visible = True
    Next
    i = 20 ' mettre ici le dernier indice de combobox "Prod"
    For k = k To i
        Me.Controls("Prod" & k).Visible = False
    Next
End Sub

A+

P.S. dernière tentative pour moi sans fichier.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour