Combobox en cascade

Résolu
lucieaup -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -
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 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
Ce petit exemple pourra peut-être vous aider : https://www.cjoint.com/?3Hmq5Wg28EA

0
lucieaup
 
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 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
Merci, je pense que vous avez la bonne solution dans la suite.
Salutations.
Le Pingou
0
lucieaup
 
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 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
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
lucieaup
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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
foo
 
Bonjour
Donne un model ca serat plus simple pour voir ton probleme

A+
Maurice
0
lucieaup
 
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
foo
 
Bonjour

Je voie une truc comme ca

http://cjoint.com/?3Hnmr0TpE9f

pour enregistrement a toi de verifier

A+

Maurice
0
lucieaup
 
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
foo
 
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
lucieaup
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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
lucieaup
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Merci, pour les explications complementaires.

Courant apres-midi pour un fichier utiiisable

A+
0
lucieaup
 
Merci beaucoup
0
Isatis21 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
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
lucieaup
 
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   Statut Membre Dernière intervention  
 
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
lucieaup
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Un exemple de programmation:

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

regardez et dites ce qu'il faut corriger.

A+
0
lucieaup
 
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
lucieaup
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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
lucieaup
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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
lucieaup
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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