Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1419 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA ComboBox... adapter un RowSource

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA ComboBox... adapter un RowSource

n°1870548
damiros
Posté le 07-04-2009 à 14:02:54  profilanswer
 

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.

mood
Publicité
Posté le 07-04-2009 à 14:02:54  profilanswer
 

n°1870792
seniorpapo​u
Posté le 07-04-2009 à 21:06:50  profilanswer
 

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


Message édité par seniorpapou le 07-04-2009 à 21:18:01
n°1870832
otobox
Maison fondée en 2005
Posté le 07-04-2009 à 23:15:06  profilanswer
 

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 :
  1. sub combobox1.aprèsMiseAjour
  2.     pour toutes les lignes du tableau faire :
  3.         si Cellule(ligne, colonne1).Valeur = combobox1.Valeur alors
  4.             combobox2.source=combobox2.source + Cellule(ligne, colonne2).Valeur
  5.         fin si
  6.         ligne suivante
  7.     boucle
  8. fin sub


(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 :
  1. sub combobox1.aprèsMiseAjour
  2.     pour toutes les lignes du tableau faire :
  3.         si Cellule(ligne, colonne1).Valeur = combobox1.Valeur alors
  4.             combobox2.source=combobox2.source + Cellule(ligne, colonne2).Valeur
  5.         sinon si combobox2.source<>""
  6.             sortir de la loop
  7.         fin si
  8.         ligne suivante
  9.     boucle
  10. fin sub


Message édité par otobox le 07-04-2009 à 23:24:03

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°1870861
seniorpapo​u
Posté le 08-04-2009 à 08:40:02  profilanswer
 

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

n°1871267
otobox
Maison fondée en 2005
Posté le 08-04-2009 à 17:55:29  profilanswer
 

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é :)


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA ComboBox... adapter un RowSource

 

Sujets relatifs
Access VBA - enregistrer sous variable valeur d'un champ d'un état[VBA] Boutons de commande qui se déplacent quand j'imprime
Exception d'E/S: The Network Adapter could not establish the connectioCréation d'une macro VBA complexe HELP !!!
compteur VBA CATIAPiloter port parallèle avec Excel VBA
creation menu en VBA ??[VBA EXCEL] Récupérer son propre email Outlook dans une variable
activation catproduct par macros VBAMigration VBA
Plus de sujets relatifs à : VBA ComboBox... adapter un RowSource


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR