Combobox en cascade

Résolu/Fermé
lucieaup - 12 août 2013 à 16:38
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 19 août 2013 à 10:38
Bonjour,

Je voudrais alimenter une combobox mais avec seulement les données qui correspondent à ma première combobox. Je m'explique, dans mon fichier, la colonne B représente le nom des agriculteurs et la colonne C leur numéro de contrat. En colonne O, j'ai le calibre de leur production qui peut être "M" ou "L".

J'ai crée un userform ou l'on peut choisir un agriculteur dans la liste déroulante afin de rentrer le poid de sa récolte. Comme un agriculteur peut avoir plusieurs contrats, je voudrais que dans la deuxième combobox s'affiche le numéro de contrat s"il n'y en a qu'un ou la liste des divers contrats (donc source colonne B). Enfin, je voudrais qu'il puisse également choisir le calibre de ses graines (Source colonne O) avant de saisir son poids qui se reporterai donc directement dans la bonne case en colonne W.

Voici ce que j'ai fait :


Private Sub Userform_initialize()

Dim c As Variant
Dim j As Integer
j = 1
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
For Each c In Selection
j = j + 1
Next c

Range("B2").Select

Dim i
For i = 2 To j
If Cells(i, 23) = 0 Or Cells(i, 23) = "" Then
ComboBox1.AddItem Sheets("Fichier général").Cells(i, 2)
ComboBox2.AddItem Sheets("Fichier général").Cells(i, 3)
ComboBox3.AddItem Sheets("Fichier général").Cells(i, 15)
End If
Next i

End Sub


Private Sub Valider_Click()
Dim numlot As Variant
Dim i As Integer

numlot = ComboBox1.Value

i = 1

While Cells(i, 2) <> numlot
i = i + 1
Wend

Cells(i, 21) = TextBox1.Text
Cells(i, 22) = TextBox2.Text
Cells(i, 23) = TextBox3.Text

ComboBox1.Clear
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""

Dim c As Variant
Dim j As Integer
j = 1
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
For Each c In Selection
j = j + 1
Next c

Range("B2").Select

For i = 2 To j
If Cells(i, 23) = 0 Or Cells(i, 23) = "" Then
ComboBox1.AddItem Sheets("Fichier général").Cells(i, 2)
ComboBox2.AddItem Sheets("Fichier général").Cells(i, 3)
ComboBox3.AddItem Sheets("Fichier général").Cells(i, 15)
End If

Next i
End Sub

Je me doute que pour alimenter en cascade, il faut que j'aille dans:
Private Sub ComboBox3_Change()


End Sub
mais je ne sais pas quoi y mettre...

Pouvez-vous m'aider svp?

Merci beaucoup

11 réponses

Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
12 août 2013 à 16:59
Bonjour,
Ce petit exemple pourra peut-être vous aider : https://www.cjoint.com/?3Hmq5Wg28EA

0
Bonjour,

J'ai essayé de faire avec votre fichier mais comme je n'ai pas du tout alimenté ma combobox comme vous (je ne suis pas une pro VBA je tatône et j'ai surement pas pris la voie la plus rapide....) je n'arrive pas à l'appliquer à mon modèle...
Désolée
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
13 août 2013 à 18:08
Bonjour,
Merci, je pense que vous avez la bonne solution dans la suite.
Salutations.
Le Pingou
0
Bonjour,

Je suis désolée mais je ne comprends pas votre commentaire... J'ai la bonne solution ou?
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
14 août 2013 à 10:43
Bonjour,
J'ai la bonne solution ou? ..... dans la suite..soit la proposition de foo.
Si c'est le cas mettre le statut poste sur [Résolu]
Salutations.
Le Pingou
0
Re,
La solution proposée par Fo bien que fonctionelle ne correspond pas à ma demande. La list view ne peut pas s'utiliser dna s ce cas puisque je peux avoir jusqu'à 1 000 agriculteurs, pas pratique pour retrouver le bon. De plus, la combobox ne se remplie pas avec le numéro de contrat, s'il y en qu'un ou la liste s'il y en a deux et les poids saisis ne vont pas se recopier dans la ligne sur le tableau.
Peut être que ce n'est pas possible....
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
12 août 2013 à 17:02
Bonjour,

resumons les choses:

une combobox nom agriculteur
une combobox numero(s) de contrat (un ou plusieurs) fonction du nom agriculteur choisi
une combobox calibre (M ou L)
une textebox pour saisie poids

il y a bien un nom a cote de chaque contrat ou pas ???

A+
0
Bonjour
Donne un model ca serat plus simple pour voir ton probleme

A+
Maurice
0
Bonjour,

Voici en pièce jointe mon fichier simplifié ou j'ai laissé que ce qui concerne ma question.
Ma combobox numéro de contrat n'est pas renseignée et celle qui concerne le calibre ne s'alimente pas correctement....

http://cjoint.com/?CHnjoTKvWDT

Merci à tous pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour

Je voie une truc comme ca

http://cjoint.com/?3Hnmr0TpE9f

pour enregistrement a toi de verifier

A+

Maurice
0
Bonjour,

Merci pour le fichier mais du coup ca ne prend pas exactement sa source dans mon fichier puisque si jamais je n'ai pas deux calibres, il me propose quand même les deux et ajoute la ligne en dessous.

En fait mon explication n'était peut être pas trés clare, je ne veux pas qu'il rajoute de ligne mais qu'il copie les valeurs de poids pour chaque agriculteur dans la bonne case de la colonne poids ( En face du bon numéro de contrat et donc du bon calibre)

Mais merci d'avoir passé du temps sur mon problème...
0
Re
Modicication d'une ligne
avec une Listview jesper de ca marche avec ton excel
regarde si ca te va

http://cjoint.com/?3HnpcMa2ONn

A+

Maurice
0
Merci pour le fichier, le coup de la list view c'est vraiment pas mal. Par contre je ne peux plus faire le choix du numéro de contrat ni celui du calibre. du coup, cela risque d'entrainer des erreurs dans la saisie par les sous traitants en ne saisissant pas le bon poids au bon endroit....
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 14/08/2013 à 11:22
Bonjour lucieaup,

question:

Vous en dites quelques mot dans votre dernier message, une ou deux lignes pour le meme "nom": normal ou pas et pourquoi le meme n° de contrat ???

Comment ces lignes sont-elles saisies??

Je vous fais un fichier avec ce dont vous avez besoin.

A+
0
Bonjour,
Merci pour votre aide. je vais essayer d'expliquer clairement.
En colonne B j'ai le nom de mes agriculteurs qui est saisi, en colonne C j'ai leur numéro de contrat. Il se peut qu'un agriculteur ait plusieurs contrats. Durant le process, avec un numéro de contrat, on peut être amené à faire plusieurs calibres nommés M ou L et saisis dans la colonne O. J'ai déjà fait une macro qui ajoute une ligne en cas de deux calibres, le nomme et recopie le nom de l'agri, et son numéro de contrat.
Ce que je voudrais aujourd'hui, c'est que lorsque l'utilisateur va vouloir saisir son poid final, il appuie sur un bouton, un formulaire apparait avec deux première combobox, il peut saisir le nom de l'agri dans la première combo dans ce cas, la deuxième s'alimente avec le ou les numéros de contrat correspondant ou le numéro de contrat directement dans la deuxième et la remière s'alimente avec le nom de l'agri. En dessous, il y a une troisième combobox qui apparait avec le choix du calibre s'il y en a deux ou le calibre unique qui s'affiche. Une text box se remplie alors automatiquement avec le numéro de série (colonne Z) puis l'utilisateur saisi le poids. Ce poids doit se recopier colonne W sur la bonne ligne c'est a dire définie par l'agriculteur, le numéro de contrat et le calibre.

Une partie du code est déjà crée pour alimenter la première combobox et le formulaire aussi pour mieux comprendre. Tout est dans le fichier ci joint.

http://cjoint.com/?CHnjoTKvWDT

Encore une fois, merci beaucoup
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 14/08/2013 à 12:16
Re,

Merci, pour les explications complementaires.

Courant apres-midi pour un fichier utiiisable

A+
0
Merci beaucoup
0
Isatis21 Messages postés 12 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 14 août 2013
Modifié par Isatis21 le 14/08/2013 à 14:07
Bonjour,

Moi ce que je ferai c'est que je chargerai la deuxième combobox sur l'événement change de la première...

donc dans le combox1_change() je mettrais :

dim nbLignes as integer
dim i as integer

'on pense à remettre à zéro la combobox2 pour pas cumuler les données
ComboBox2.Clear

'Je récupère le nombre de lignes utilisées dans la feuille visée
nbLigne = feuil1.UsedRange.Rows.Count 
'ou
nbLigne = thisWorkBook.Sheets("NomFeuille").UsedRange.Rows.Count

'On balaye toutes les lignes utilisées
for i = 1 to nbLignes
    'Si le nom de la ligne en cour est le même que celui sélectionné dans la combobox1 alors on ajoute le numéro de contrat à la combobox2
    if feuil1.Cells(i,2).Value = ComboBox1.Value then
         ComboBox2.AddItems feuil1.Cells(i,3).Value
    end if
next 


Je suis pas sur à 100% de mon code car je l'ai fait de tête et je n'ai pas toutes les méthodes vba en tête ^^

J'espère avoir aidé :)

Cordialement

PS: j'ai répondu qu'à la première des question ^^

La vie ne vaut rien mais rien ne vaut la vie
0
Bonjour,
Merci de votre réponse mais je ne comprends pas bien. Si j'ai deux numéros de contrat qui correspondent à un agri, comment dans ma deuxième combobox il va choisir lequel mettre? Ca sera deux choix et je dois choisir le bon? Du coup, je fais pareil pour ma troisième combobox? En balayant les deux permières? Et ca va me permettre de choisir la ligne ou il doit copier la valeur rentrée dans la text box?
Désolée pour toutes ces questions, mais j'aimerai arriver à comprendre et pas recopier bêtement pour pouvoir le refaire dans d'autres situations et être autonome.... Qui sait peut être qu'un jour je résoudrais des points sur ces forums pour d'autres personnes...
0
Isatis21 Messages postés 12 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 14 août 2013
14 août 2013 à 14:24
Désolé j'avais mal compris votre besoin ^^

A votre place j'utiliserais plutôt deux listbox. Une avec les contrats de l'agriculteur l'autre pour stocker les contrats que vous désirez prendre en compte.

Ensuite lorsque vous validez vous balayez la listbox des contrats sélectionnés et vous copiez les valeurs aux lignes correspondantes.

Si j'ai mal compris (encore :p) n'hésitez pas à me le dire :)
0
Le problème des listbox c'est que sur a peu prés 1 000 agris je ne sais pas si les gens auront la patience de chercher dans la liste... Alors qu'avec la combobox en tapant les premières lettres ca marche...
Sinon c'est quoi la difference entre les deux?
0
Isatis21 Messages postés 12 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 14 août 2013
14 août 2013 à 14:36
Je suis pas sur mais il me semble que dans les listbox il est aussi possible de se positionner en tapant une lettre (à vérifier).

Sinon la différence c'est que les listbox ont été conçu pour faire une sélection multiple.Les combobox en cascade ça me parait etre plus du bidouillage ^^
0
Isatis21 Messages postés 12 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 14 août 2013
14 août 2013 à 14:37
Sinon vous pouvez également ajouter à votre userform un textbox de recherche afin de garder que les agriculteurs commançant par le texte saisi :)
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 août 2013 à 15:54
Re,

Un exemple de programmation:

https://www.cjoint.com/c/CHop1lhCTzU

regardez et dites ce qu'il faut corriger.

A+
0
Ouhaou!!!! C'est génial! Exactement ce que je voulais! DIre que je suis en train de galérer avec les list box depuis une heure...
Cependant je n'ai pas tout compris au code, je dois remplacer tout le mien par celui la? J'ai plusieurs formulaires que je dois gérer avec ce problème (plusieurs stades de la production) et j'aimerai pouvoir le réutiliser seule.... De plus j'aimerai enlever les doublons sur la combobox, contrats aussi. Je suis en train de regarder comment vous vez fait pour le refaire..

C'est franchement super en plus vous avez réussi à mettre de la couleur et un logo au fond c'est franchement mieux que leurs couleurs unies non attrayantes, c'est possible de m'expliquer comment on fait?

Franchement merci beaucoup, merci pour le temps passé, merci pour l'explication, merci pour le fichier, bref merci pour tout!!
0
J'ai testé le fichier dans l'original en copiant le code dans mon userform à la place de l'ancien mais quand je lance la macro, un message d'erreur apparait "invalid ReDim" et dans le code il surligne en jaune "ReDim Table_ML (Nb_Nom)". Je comprend qu'il n'arrive pas à initialiser la table M et L mais je ne comprends pas comment le corriger... Désolée de vous faire perdre plein de temps....
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 août 2013 à 16:45
Re,

Dans le VBA de Module1, il y a des declarations de variables dont Table_ML, il faut donc recopier aussi cette partie de code. Il y a un petit bug dans le tri des noms, Luc est en premier, pas normal. Je suis entrain de regarder pourquoi.

Pour l'image dans l'Userforme, facile:

propiete de l'UF, Picture, vous choisissez un fichier image ou icone ou gif et ensuite picturesizemode: fmpicturesizemodestrech

A+
0
Re,

Effectivement erreur un peu bête de ma part. Maintenant ca marche. Par contre, il y a deux ou trois petits points qui ne fonctionnent pas.

Quand je choisis un agri, j'ai bien le choix uniquement entre ses contrats s'il en a plusieurs ou le seul qu'il a mais j'ai deux fois le numéro de contrat quand il a deux calibres.
En fait je crois que le choix de la combobox 2 définit la valeur qui sera dans ma combobox 3. Je m'explique, pour l'agriculteur Lucie, j'ai deux contrats, le 1 et le 2. le 1 à un calibre M et un L et le 2 a seulement un calibre M. La combobox 2 me donne le choix entre 1,1 et 2 ( soit deux fois le contrat 1 alors que je voudrais qu'il n'apparaisse qu'une fois). Ensuite dans ma combobox 3, j'ai M et L qui apparaissent mais tout le temps même si je n'ai qu'un seul calibre (contrat 2) et surtout même si je change entre M et L il me recopie la valeur sur la même ligne car il associe le premier 1 de la combobox 2 à la ligne M et le deuxième 1 de la combobox 2 à la ligne L.

Moi je voudrais que la combobox 3 prenne sa source dans ce qu'il y a vraiment en face de l'agriculteur lucie et du numéro de contrat 1. Ainsi pour rentrer les deux calibres, je n'aurai qu'a changer la combobox 3 pour passer d'un poids à un autre.

Est ce que je dis est compréhensible ou pas?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 14/08/2013 à 17:14
Re,

Est ce que je dis est compréhensible ou pas? Pas!!!

Une text box se remplie alors automatiquement avec le numéro de série (colonne Z)
dans votre message precedent, quezaco ???



Actuellement, s'affiche en combobox3 et les texteboxs les infos de la ligne du contrat choisi.

Pour Lucie, deux contrats 1, si vous choisissez le premier vous avez les infos de la ligne du premier. Pour le deuxieme, idem et vous pouvez modifier combobox3 et les texteboxs, si vous validez cela enregistre sur la ligne du choix de contrat.

A+
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
15 août 2013 à 11:05
Bonjour,

Tri nom OK (luc est enfin a sa place) et modif avec suppression combobox3, affichage calibre avec numero de contrat.

https://www.cjoint.com/c/CHpldJGc8IF

A+
0
Bonjour,
Désolée pour le retard. Merci beaucoup c'est vraiment génial, je ne m'en sortais pas toute seule! Merci beaucoup, vraiment!
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
19 août 2013 à 10:38
Bonjour,

je ne m'en sortais pas toute seule Si, puisque vous avez demandez de l'aide. Vous vous etes adaptee a la situation, personne ne connait tout tout de suite, alors ....

Bonne continuation
0