Formule pour faire un boucle avec des combo

Bouzy -  
rafit jad kuldinger Messages postés 9193 Statut Membre -
Bonjour à tous,
Une de fois de plus je viens vers vous pour vous demander de l'aide à propos d'un programme que je suis en train de creer.
j'occupe un poste de gestionnaire de stock dans une boite depuis 8 mois maintenant et en fonction des cas rencontrés depuis j'ai décidé de creer un programme pour passer des commandes et gerer tout ce qui est consommable. Car ces articles ne figurent pas dans le Système d'Information utilisé par la boite.
alors, sur mon userform, on y trouve en entête deux combobox et un bouton, dont l'un sert à selectionner les Fournisseurs et l'autre le demandeur pour l'adresse de livraison. Une fois les deux remplis, quand je valide avec mon bouton mes textbox dédiés aux noms, adresses, ... se remplissent.
Ensuite vient la partie viens la partie du remplissage du corps du bon de commande.
Il est fait de 10 combobox alignés verticalement pour selectionner les articles à commander, 10 textbox pour les quantités, 10 pour les prix unitaires et 10 autres pour les totaux et enfin 10 mini bouton en bout de ligne pour valider chaque ligne.
au debut je suis parti sur une base commune pour mes 10 combo en leur attribuant une seule source de donnée comme dans l'exemple suivant : ComboBox3.RowSource = "BASEdeDONNEE!A2:A1000". Sauf que chaque fournisseur ayant sa propre codification, dès l'instant où l'on ne connait pas la référence par coeur, la liste elle devient longue à parcourir.
alors j'ai décidé d'attribué à chaque fournisseur une feuille portant son nom et dans la laquelle se trouve la liste des articles que l'on commande chez lui.
alors je souhaite faire en sorte qu'à chaque fois que la combobox1 correspond à un fournisseur, que les 10 autres aillent chercher les données dans la feuille correspondante. Et si jamais je change de fournisseur, que la propriété RowSource de ces combo suivent aussi.
alors j'ignore comment aborder le sujet; est ce qu'il faudra faire une boucle ??? j'ai essayé et je n'arrive pas à trouver la formule. c'est pour cette raison que je viens vous solliciter car j'ai à peine 4 mois d'expérience en VBA. Et dans mes livres il n' y a aucune explication sur un tel cas de figure.
En tout cas merci d'avance pour votre aide et j'espère que pourriez m'aider à y voir clair.
Bouzy
A voir également:

4 réponses

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 769
 
Bonjour,

Il ne faut pas affecter à tes 10 combobox leurs éléments avec RowSource au lancement du userform, mais les effacer et re-remplir à chaque fois que tu clic sur ton bouton de commande.

En fait, ton ComboBox1 (fournisseurs), a pour éléments les noms de tes feuilles "fournisseurs"? Si oui, parfait, si non il le faut!

Je suppose dans cet exemple que ta liste de fournisseur est ComboBox1 et que tes articles se trouvent dans tes feuilles fournisseurs en colonne A de A2 à Ax. Tes 10 Combobox d'articles sont : ComboBox3 , ComboBox4, ComboBox5 ... ComboBox12
Le code de ton bouton de commande devient :
Dim Lig As Long, DrLig As Long, Cpt As Byte
'test si le fournisseur est bien rempli pour éviter l'erreur de chargement de la feuille
If ComboBox1 = "" Then
    MsgBox "Choix d'un fournisseur obligatoire"
    Exit Sub
End If
'remplissage des listes :
'à partir de la feuille fournisseur choisi dans liste 1 :
With Sheets(ComboBox1)
    'on détermine le n° de la dernière ligne colonne A
    DrLig = .Range("A" & Rows.Count).End(xlUp).Row
    'Boucle sur les 10 combobox
    For Cpt = 3 To 12
        'on efface les données contenues dans la combobox correspondante
        Me.Controls("ComboBox" & Cpt).Clear
        'boucle sur toutes les lignes de la colonne A feuille "fournisseur"
        For Lig = 2 to DrLig
            'on ajoute les éléments à chacune des listes
            Me.Controls("ComboBox" & Cpt).AddItem .Cells(Lig, 1)
        Next Lig
    Next Cpt
End With

Teste et tiens nous au courant...
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour, bonjour pijaku,
Il ne faut pas affecter à tes 10 combobox leurs éléments avec RowSource au lancement du userform, mais les effacer et re-remplir à chaque fois que tu clic sur ton bouton de commande.
Pas tout à fait vrai :-)
    For Cpt = 3 To 12
        Me.Controls("ComboBox" & Cpt).RowSource = "Feuil1!A2:A" & DrLig
        Me.Controls("ComboBox" & Cpt).ListIndex = 0
    Next Cpt

A+
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 769
 
Bonjour Lermitte222,
Fectivement, je me suis mal exprimé. Ma volonté est de ne pas rempir les combo au lancement de l'userform, mais au clic sur le bouton.
De plus, je n'aime pas trop, mais ça chacun ces méthodes, me servir de la propriété RowSource pour le remplissage. Même si, il est vrai, cette propriété est faite pour ça, je préfères systématiquement boucler sur les lignes de la feuilles pour remplir mes combobox, ça permet de pouvoir faire des tests If End If...
Mais pour le cas actuel, tu as raison à 100%.
Merci pour la remarque et A+
0
Bouzy
 
bonsoir à tous
tout d'abord je tiens à vous remercier pour votre aide,
je viens vous faire un premier compte rendu de la situation.
dans un premier j'ai copié l'instruction de que pijaku m'avais conseillé en partant de la déclaration de mes variable jusqu'au bout. ensuite j'ai essayé de l'adapter à mes données , mais à chaque fois ça bug. alors j'ai discocié le tout de manière à intégrer un élément selon le but recherché et pour l'instant la seule formule qui marche c'est la boucle sur les combobox. Mais cette boucle reste toujours indépendante de la valeur de la combobox1.
à la base, je souhaitais faire ne sorte qu'à chaque fois que je selectionne un fournisseur avec ma combobox1, que la propriété Rowsource de la boucle de mes combobox3 à 12 aille chercher les données dans la feuille qui porte le nom de la valeur de la combobox1 (donc le Fournisseur)
mais dans notre cas de figure la source elle est figée sur une feuille, ette ne varie pas selon les fournisseurs.
une fois de plus merci et à plus
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Essaye en modifiant..
With Sheets(ComboBox1.text)
Mais attention, le nom des feuilles doivent êtres exactement les mêmes dans les onglets et dans le Combo.
Ensuite, tu ne donne pas les colonnes où il faut aller chercher les données pour remplir les autres combo.
Edit: Ont pourrait très bien remplir tes combo sans tout séparer en feuille, chaque fois que tu ajoute un fournisseur tu dois créer une nouvelle feuille.
Mais puisque c'est fait..
Comment tu rempli le combo avec les noms des fournisseurs ?
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 769
 
Bonjour,
@Lermitte222 : Fectivement la macro fonctionne mieux avec ComboBox1.Value

@Bouzy :
Mais cette boucle reste toujours indépendante de la valeur de la combobox1.
à la base, je souhaitais faire ne sorte qu'à chaque fois que je selectionne un fournisseur avec ma combobox1, que la propriété Rowsource de la boucle de mes combobox3 à 12 aille chercher les données dans la feuille qui porte le nom de la valeur de la combobox1 (donc le Fournisseur)
mais dans notre cas de figure la source elle est figée sur une feuille, ette ne varie pas selon les fournisseurs.

Et pourtant elle tourne!
0
rafit jad kuldinger Messages postés 9193 Statut Membre 1 152
 
et si tu fesais plus simple ?

1- tua letat de tes stock.
tu fait uen routine qui dt que a parit d un seil minimum
une commande est automatiquement envoyer ...

article1 100 pièce alors article1 commande a x. 10 000 pieces.

c est bien un truc dans le genre que tu veux faire ?

-2
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
tu arrive à te relire ?
Et LIRE LA QUESTION avant de répondre
0
rafit jad kuldinger Messages postés 9193 Statut Membre 1 152
 
"de creer un programme pour passer des commandes et gerer tout ce qui est consommable."

cela me semble suffisant pour que ma réponse soi pertinente...

.
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Tu montre au moins que tu sais écrire, alors pourquoi un poste dans le genre de ton précédant ?
Et la phrase que tu montre fait partie de l'exposer, La question est..
alors je souhaite faire en sorte qu'à chaque fois que la combobox1 correspond à un fournisseur, que les 10 autres aillent chercher les données dans la feuille correspondante. Et si jamais je change de fournisseur, que la propriété RowSource de ces combo suivent aussi.
0
rafit jad kuldinger Messages postés 9193 Statut Membre 1 152
 
il bessoin de :
1- vérifier ses quantifié , donc une routine pour ca
2- passez des commande quand les quantité sont au minimum , donc une routine pour cela
3- vérifier que la routine 2 ne passe pas plusieurs commande a un meme fournisseur pour plusieurs article et les regroupe en un seul bon de comande.


enfin, une page de saise de toutes les info necesaire pour cree une basse de donner que les routine utiliseront.

article, code barre,quantité,seuil minimum, fournisseur > adresse, numéro de tel etc..
ca c est le minimum.




et tous le reste suivra ...
0