VBA ComboBox... adapter un RowSource - VB/VBA/VBS - Programmation
Marsh Posté le 07-04-2009 à 21:06:50
Bonsoir,
si tu peux faire un filtre avancé avec copie dans une autre plage, tu ne prends alors pour combobox2 que la plage où tu as copié le résultat .
Pour avoir le code du filtre avancé tu enregistres une macro.
Tu peux aussi organiser ta feuille2 avec un cas par colonne (si moins de 255 cas garanti)
Cordialement
Marsh Posté le 07-04-2009 à 23:15:06
Tu peux aussi mettre tes valeurs en forme de base de données :
1ere colonne : le n° du cas
2e colonne : la valeur associée
Ensuite, tu parcours cette liste en remplissant ta source de la 2e combo suivant le cas entré dans la 1ere combo :
Code :
|
(excuse moi, je n'ai plus en tête la syntaxe pour faire ça en vba excel, mais l'idée est là)
Edit : si tu prends la peine de trier par ordre de cas après chaque ajout, tu peux rajouter une condition pour quitter la boucle dès le 1er changement de cas après que le cas donné par le combobox1 a été trouvé (combobox2.source différente de vide), pour éviter de parcourir la liste jusqu'au bout et améliorer la vitesse d'exécution :
Code :
|
Marsh Posté le 08-04-2009 à 08:40:02
Bonjour,
la proposition de OtObOx convient parfaitement.
Comme tu débutes:
1) ne pas oublier de remettre à vide ("" ) le rowsource avant de faire la boucle de remplissage
2)Ne pas oublier de mettre le séparateur ";" entre chaque valeur.
3) attention de ne pas dépasser la limitation en nombre de caractères du rowsource ainsi défini.
(certains disent 2048, je crois que c'est 255)
Si tu n'es pas certain de ne pas dépasser 255, il te faudra passer par les plages dans la feuil2.
Cordialement
Marsh Posté le 08-04-2009 à 17:55:29
Oui, s'il y a dépassement de la capacité, il y a toujours moyen de faire une liste temporaire dans une colonne vide en recopiant les valeurs comme j'ai indiqué plus haut, au lieu de les mettre directement dans le rowsource. ensuite ya pu ka mettre la référence de la plage dans le rowsource et le tour est joué
Marsh Posté le 07-04-2009 à 14:02:54
Bonjour à tous,
Je débute en Vba et j’ai quelques petits problèmes avec un comboBox… j’aimerai pouvoir sélectionner des valeurs dans une colonnes, sans que celles-ci se suivent forcément.
Mon comboBox affiche en effet, suivant les cas différentes valeurs. J’ai programmé pour le moment de la façon suivante :
'Cas 1
If ComboBox1.Value = "Cas1" Then
ComboBox2.RowSource = "Feuille2!A1:A5"
End If
Mon problème étant le fait que cette méthode m’oblige a faire pour chacun de mes cas un nouveau tableau où je met les valeurs à la suite dans une colonne. Hors comme je vais avoir plus de 200 cas différents, j’aimerai trouver un autre moyen du type :
'Cas 1, idéal mais qui ne marche pas…
If ComboBox1.Value = "Cas1" Then
ComboBox2.RowSource = "Feuille1!A1;A7:A9;A11"
End If
Cette programmation ne marche pas, du fait des propriété de la fonction RowSource, mais mon petit doigt me dit qu’il existe un moyen, à l’époque où on fait des jeux vidéos en 3D et des navettes spatiales, de trouver une solution à ce problème sans avoir à faire 200 tableaux différents, tâche fastidieuse et qui peut être source de nombreuses erreurs !
Je vous remercie d’avance pour l’attention que vous pourrez porter à ma requête.