RechercheV dans une ComboBox

Bonjour à tous,

Je viens vous voir car je rencontre quelques diffucultés avec une Macro de gestion d'userform que je fais...

Alors voilà, j'ai une feuille de devis sur laquelle j'ai un userform, avec une combobox qui va rechercher un diamètre de pièce dans une feuille nommée "Tube Rond".(cf photo)

Cependant à chaque diamètre de pièce (colonne "désignation" sur la photo) correspond une épaisseur e, et quelques diamètres ont plusieurs épaisseurs disponibles. J'aimerai que lorsque l'utilisateur a choisi le diamètre qu'il veut dans la liste déroulante de la première combobox, il puisse choisir une épaisseur qui corresponde à ce diamètre dans une liste déroulante d'une deuxième combobox.

Par contre, impossible de réussir à le faire, je vois pas du tout comment faire ça...

Je vous joins donc une photo pour illustrer tout ça, et attends votre aide..

En vous remerciant,

Victorien

phototubesronds

Bonjour

Pourquoi joindre un fichier Excel :

Ton image ne nous dit rien sur ton userform et sur la conception de ton fichier (Lignes, colonnes).

A mois d'être démenti, je ne pense pas que quelqu'un s'amuse à recopier les données de ton image pour reconstituer un fichier approximatif.

Sur la charte du Forum

https://forum.excel-pratique.com/annonces/explications-et-regles-a-respecter-t13.html

Point 6 : • Pensez à joindre un fichier pour faciliter la compréhension du problème et augmenter les chances de vous faire aider (taille limite : 300ko, n'hésitez pas à compresser vos fichiers).

Pour joindre un fichier :

http://www.youtube.com/watch?v=EbNYLzTz5wM]Comment Joindre Un Fichier

Cordialement

Bonjour Amadéus,

Voilà en pièce jointe un dossier compressé avec mon fichier, je n'en avais pas fait puisque je pensais que mon problème était résoluble avec une simple réponse texte rapide, sans forcément y passer beaucoup de temps, et comme mon fichier est officiel je dois en faire un nouveau en supprimant les informations à chaque fois. Mais je suis d'accord que c'est bien plus rapide pour vous comme cela, et plus parlant aussi, alors j'ai pris le temps d'en faire un

Merci,

Rectification : mon fichier, même compressé est trop gros... (500ko comprssé, 1MO normal), comment pourrais-je faire ?

Bonjour

Utilise Cjoint.com

Cordialement

Finalement j'ai beaucoup beaucoup allegé le fichier et ça passe en compressé !

Merci à toi

Bonjour,

Private Sub UserForm_Initialize()
 Dim f
 Set f = Sheets("Tubes Ronds")
 ComboBox.Clear
 Set d1 = CreateObject("scripting.dictionary")
 For Each c In f.Range("A8:A" & f.[A65000].End(xlUp).Row)
   If c <> "" Then d1(c.Value) = ""
 Next
 Me.ComboBox.List = d1.keys
End Sub
Private Sub ComboBox_click()
 Dim f
 Set f = Sheets("Tubes Ronds")
 Set champ = f.Range("A8:A" & f.[A65000].End(xlUp).Row)
 Set result = champ.Find(what:=CDbl(Me.ComboBox))
 If Not result Is Nothing Then
   Ligne = result.Row
   Me.ComboBox1.Clear
   i = 0
   Do While (Cells(Ligne, 1) = CDbl(Me.ComboBox) Or Cells(Ligne, 1) = "") _
      And Ligne <= f.[A65000].End(xlUp).Row
      Me.ComboBox1.AddItem f.Cells(Ligne, 2).Value
      Me.ComboBox1.List(i, 1) = f.Cells(Ligne, 3).Value
      Ligne = Ligne + 1
      i = i + 1
   Loop
 End If
End Sub

Private Sub ComboBox1_click()
  Me.TextBoxLongueur = Me.ComboBox1.Column(1)
End Sub

Ceuzin

Bonjour Ceuzin,

Merci beaucoup pour ton code, je viens de l'appliquer pour tester, il y a vraiment du bon mais un petit soucis : la liste d'épaisseur affichée n'affiche pas que celles du bon diamètre, parfois elle affiche celle des autres diamètres en dessous dans le tableau également..

Je te le met en pièce jointe !

Une autre solution + simple

Ceuzin

Ton code fonctionne jusqu'à la sélection du diamètre 40, et après il plante...

Sur le débogage il m'indique un soucis à l’incrémentation de la variable Ligne

voir PJ

Private Sub UserForm_Initialize()
 Dim f
 Set f = Sheets("Tubes Ronds")
 ComboBox.Clear
 i = 0
 Set design = f.Range("A8:A" & f.[a65000].End(xlUp).Row)
 For Each c In design
    If c <> "" Then tmp = c
    Me.ComboBox.AddItem tmp
    Me.ComboBox.List(i, 1) = c.Offset(, 1)
    Me.ComboBox.List(i, 2) = c.Offset(, 3)
    Me.ComboBox.List(i, 3) = c.Offset(, 2)
    Me.ComboBox.List(i, 4) = c.Row
    i = i + 1
 Next
End Sub

Private Sub ComboBox_click()
  Me.ComboBox1 = Me.ComboBox.Column(1)
  Me.TextBoxLongueur = Me.ComboBox.Column(2)
  Me.TextBoxPoidsMetre = Me.ComboBox.Column(3)
End Sub

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormDVCascade11.xls

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormDevis.xls

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormDVCascade11Bis.xls

Ceuzin

Superbe solution alternative ! Cependant comment tu as fais pour faire apparaître l'épaisseur et le diamètre sur la même ligne dans la liste déroulante ?

Car en copiant juste le code que tu as mis, cela n'apparait pas dans mon fichier, (alors que si je reprends tes fichiers cela marche correctement) et je dois reprendre cette solution pour l'adapter à deux autres types de pièces encore !

Et dernière question, quand je clique sur le bouton matières, j'aimerai que l'userform se centre au milieu de l'écran, est-ce que tu sais comment je pourrais faire cela ?

Bonjour,

Il faut regarder les propriétés ColumnCount et ColumnWidth des combobox.

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormDVCascade11.xls

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormDevis.xls

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormDVCascade11Bis.xls

Centrage formulaire

StartupPosition: Manual

UserForm2.Top = (Application.Height - UserForm2.Height) / 2

UserForm2.Left = (Application.Width - UserForm2.Width) / 2

Ceuzin

Bonjour Ceuzin,

La solution donnée dans ton lien n°3 marche à merveille, c'est tout à fait ce qu'il me fallait je te remercie beaucoup pour tout el temps que tu as pris pour moi !

Bonne journée

Rechercher des sujets similaires à "recherchev combobox"