Chargement de plusieurs ComboBoxs avec une boucle [Résolu]

Signaler
-
 Roburien69 -
Bonjour à tous,

Avant tout, je suis débutant en programmation donc si des choses vous paraissent pas logique...ba c'est normal

N'hésitez pas à me faire des propositions plus performantes.

J'aimerais remplir des comboboxs à l'aide d'une boucle car mon Userform en contient un grand nombre.

Voilà le Code que j'ai fais

For Each Ctrl In TEST_FORMULAIRE.Controls
    If Ctrl.Name Like "Type_*" Then
        U = U + 1
        TypeColonne = 53 + U
            For a = 3 To 15
                Controls("Type_" & U).AddItem Sheets(" DONNEES").Cells(a, TypeColonne)
            Next a
    End If
Next


Mais j'aimerais à la place de:

For a= 3 to 15

avoir un truc du genre:

For a= 3 to "dernière cellule remplie"
ou
For a= 3 to "cellule contenant la valeur= Inconnu"
ce qui reviendrait au même car chacune de mes colonnes de données fini par la valeur "Inconnu"

J'ai essayé un truc du type
Fin = Cells.Find(What:"Inconnu")
For a= 3 to Fin

mais sans succès

Merci à vous

9 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Utilise alors la notation Cells !
Exemple :
Range("C100")
n'est rien d'autre que
cells(100,3)
Voilà tout !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
Ce que tu cherches, finalement, n'est pas ce qu'indique ton titre et tes premières phrases, mais tout simplement :
Comment mettre dans une variable le N° de la dernière cellule remplie d'une colonne ?
C'est çà, ta question ?
Range("C" & Rows.count).end(xlup).row

te retourne le N° de la dernière ligne remplie de la colonne C


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Ouais ===>> 52000 caractères en moins de 0,01 secondes serait une vitesse acceptable ?
Si oui je continue


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Zut (réponse destinée à une autre discussion). Ne pas en tenir compte ici.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Bonsoir Ucfoutu,

Ce que je cherche est bien dans le titre, J'ai bien récupéré le code pour trouver la dernière ligne remplie (il en existe plusieurs qui se ressemble plus ou moins) mais je n'arrive pas à l'intégrer dans la boucle for.

Les essais que j'avais fait ne fonctionnent pas d'où le For a= 3 to 15
peux-tu m'aider à l'intégrer dans le code que j'ai posté stp?

Voilà ce que j'ai fait, mais ça marche pas

Dim Nolign As Byte
Nolign= Range("Type_" & U & Rows.count).end(xlup).row


For Each Ctrl In TEST_FORMULAIRE.Controls
    If Ctrl.Name Like "Type_*" Then
        U = U + 1
        TypeColonne = 53 + U
            For a = 3 to Nolign
                Controls("Type_" & U).AddItem Sheets(" DONNEES").Cells(a, TypeColonne)
            Next a
    End If
Next


Merci à Toi
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Ce que je cherche est bien dans le titre

Non ! Ce qui est dans le titre est le but final à atteindre et non ta vraie difficulté (puisque le reste a été traité par toi-même) : mettre dans une variable toto le N° de la dernière ligne remplie.
Et donc :
savoir remplacer :
For a = 3 To 15

par
for a = 3 to toto

Te reste à réfléchir sur le sens de ton :
Nolign= Range("Type_" & U & Rows.count).end(xlup).row

qui n'aurait de sens que si tu cherches la dernière ligne remplie de la colonne "Type_" & U /u/u
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Effectivement, Type_U désigne le nom de ma combobox et non le nom de ma colonne
ma colonne est dans la variable TypeColonne d'où :

NoLign= Range ( TypeColonne & Rows.count).end(x1up).row

mais j'ai l'erreur 1004 "La methode 'Range' de l'objet '_Global' à échoué"

Je continu donc avec l'aide de la Fonction Range...et je vois qu'il veut une info de type "A1" et moi Je lui donne un numéro de colonne (53+U)
As-tu une idée?
Magnifique!

ça marche, le code devient:

Nolign = Cells(Rows.Count, TypeColonne).End(xlUp).Row

Merci pour ton aide