Remplir un combo à partir d'un combo

Oui c'est bon cette fois ci,

Merci à toi, à bientôt

Bonne continuation

Bonjour,

Ton fichier marche bien, et c'est la logique de combo que je dois avoir, j'ai donc pris le code, et essayer de l'adapter avec mon fichier de travail.

Je retrouve la bonne logique, mes combos se chargent bien, mais ça plante.

En effet, il faut savoir que dans mon fichier travail les colonnes utilisé ne sont pas de C à F, mais de D à G, et les colonnes A à C sont rempli par d'autres valeurs que j'utilise pas dans mon combo.

J'ai donc changé les indice de colonne de cellule qui étaient à 3, par 4, et ceux de 4 par 5.

Je n'ai pas touché aux indice de colonne 1 et 2 qui représente aucune valeur dans ton fichier, car les colonnes sont vides, mais moi mes colonnes sont rempli (par des "textes" ).

ça fonctionne comme je l'ai dit, mais ça plante quand je selectionne une valeur du combo3, ou quand je rechange de selection pour le combo principal.

L'erreur que ça me dit c'est que l'indice n'appartient pas à la selection.

J'ai refais une nouvelle version et cette fois j'ai rempli les 3 premières colonnes par des textes, et j'ai adapté ton code à ce que je pense, mais bon je ne comprend pas les indices de colonne 1 et 2 du code...

Je te réécrit également le code que j'ai adapté pour cette nouvelle version :

Dim f, BD()

Private Sub ComboBox3_Change()
Me.ComboBox4.Clear

  Set d = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(BD)
  If BD(i, 4) = CDbl(Me.ComboBox3) And BD(i, 5) <> "" Then d(BD(i, 5)) = ""
  Next i
  Me.ComboBox4.List = d.keys
  End Sub

Private Sub ComboBoxPrinci_Change()

  Me.ComboBox2.Clear
  Me.ComboBox3.Clear

  Set d = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(BD)
    If BD(i, 1) = CDbl(Me.ComboBoxPrinci) And BD(i, 2) <> "" Then d(BD(i, 2)) = ""
  Next i
  Me.ComboBox2.List = d.keys

  Set d = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(BD)
    If BD(i, 1) = CDbl(Me.ComboBoxPrinci) And BD(i, 4) <> "" Then d(BD(i, 4)) = ""
  Next i
  Me.ComboBox3.List = d.keys
End Sub

Private Sub UserForm_Initialize()
  Set f = Feuil1
  BD = f.Range("D4:G" & f.[D65000].End(xlUp).Row).Value
  Set d = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(BD)
    d(BD(i, 1)) = ""
  Next i
  Me.ComboBoxPrinci.List = d.keys
End Sub

Merci

Ok, la différence entre ton fichier d'avant et celui là c'est qu'il y avais une colonne en plus entre la colonne du ComboPrinci et la colonne pour le Combo2, dans mon code il y avais donc 5 colonnes.

Maintenant il n'y en à plus que 4, j'ai simplement réajuster les valeurs pour les colonnes 4 et 5 qui sont devenue 3 et 4

Dim f, BD()

Private Sub ComboBox3_Change()
Me.ComboBox4.Clear

  Set d = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(BD)
  If BD(i, 3) = CDbl(Me.ComboBox3) And BD(i, 4) <> "" Then d(BD(i, 4)) = ""
  Next i
  Me.ComboBox4.List = d.keys
  End Sub

Private Sub ComboBoxPrinci_Change()

  Me.ComboBox2.Clear
  Me.ComboBox3.Clear

  Set d = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(BD)
    If BD(i, 1) = CDbl(Me.ComboBoxPrinci) And BD(i, 2) <> "" Then d(BD(i, 2)) = ""
  Next i
  Me.ComboBox2.List = d.keys

  Set d = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(BD)
    If BD(i, 1) = CDbl(Me.ComboBoxPrinci) And BD(i, 3) <> "" Then d(BD(i, 3)) = ""
  Next i
  Me.ComboBox3.List = d.keys
End Sub

Private Sub UserForm_Initialize()
  Set f = Feuil1
  BD = f.Range("D4:G" & f.[D65000].End(xlUp).Row).Value
  Set d = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(BD)
    d(BD(i, 1)) = ""
  Next i
  Me.ComboBoxPrinci.List = d.keys
End Sub

Re,

J'ai recopié ton code dans le fichier que je t'ai envoyé, ça plante toujours à cette ligne :

If BD(i, 3) = CDbl(Me.ComboBox3) And BD(i, 4) <> "" Then

( erreur 13 incompatibilité de type )

Peut être ça se passe lorsque je selectionne à la fois une valeur pour le combo2, et une valeur pour le combo3.

En effet, il ne sont pas sur la même ligne, et dans mon vrai programme, je ne dois pas choisir les 2, on doit choisir soit le combo2, et donc empecher la selection du combo3, soit on change d'avis, on selectionne 3 finalement, donc on bloque combo2 et on invite à selectionner la valeur associé au combo3 qui est le combo4.

Sinon je ne comprend pas ce code, si tu pourrais commenter le principe, que je puisse réfléchir et chercher des solution de mon coté aussi.

Je ne comprend pas, moi j'ai aucuns soucis, aucuns messages d'erreur quoi que je fasse... Attention si les valeurs ne sont plus numérique c'est normal que ça plante !

Que que ça marche chez moi, clic sur l'image elle est animée !

Le problème arrive à chaque fois ou dans un cas particularité ? Donne moi une combinaison que toi tu fais quand ça plante

preuve

Bonjour

bon une petit dernière avec une Lisbox

A+

Maurice

Je ne comprend pas, moi j'ai aucuns soucis, aucuns messages d'erreur quoi que je fasse... Attention si les valeurs ne sont plus numérique c'est normal que ça plante !

Que que ça marche chez moi, clic sur l'image elle est animée !

Le problème arrive à chaque fois ou dans un cas particularité ? Donne moi une combinaison que toi tu fais quand ça plante

Quand tu rechange la valeur du comboprincipal.

Si ça te prend pas trop de temps tu pourrais expliquer ce code, je ne le comprend pas vraiment, j'applique bêtement

Ah oui ok je comprend, c'est normal !

Quand tu change la valeur du comboPrinci, pendant une micro seconde elle se retrouve vide, ce qui fait que les ComboBox sont effacés, le code cherche donc à trouver des valeurs "vide" donc normale que ça plante...

Bref je te remet le fichier avec le code documenté

Pour pallier à ça j'ai rajouter la ligne de code si dessous au début de Private Sub ComboBox3_Change()

If Me.ComboBox3 = "" Then Exit Sub

Bonjour !

Je continue les améliorations, comme je disais je dois soit sélectionné des valeurs du combo2 soit du couple combo3 et 4, et donc j'ai pensé à désactiver le couple combo3 et 4 lorsque je choisit une valeur sur le combo2, et désactiver le 2 lorsque une valeur est sélectionné dans le combo3 ou 4.

Je joint le fichier où j'ajoute ce nouveau code, mais impression qu'il n'est pas totalement compatible avec le precedent.

J'ai une erreur cette fois lorsque j'efface manuellement la valeur sur le combo3 et lorsqu'il y a une valeur sur le combo4 ( erreur compatiblité de type ), j'ai une erreur à la ligne :

If BD(i, 1) = CDbl(Me.ComboBoxPrinci) And BD(i, 3) = CDbl(Me.ComboBox3) And BD(i, 4) <> "" Then

c'est sur la procédure combobox3_change

PS : J'ai aussi d'autre amélioration à prévoir comme la désactivation de la saisie, et permettre uniquement des valeur sélectionné dans les liste des combos, ou encore dans la liste avoir un un élément vide pour finalement ne rien sélectionné au lieu d'effacer la valeur manuellement ( vu que la saisie est active )

Merci

Bonjour

Essaye ça :

Salut,

J'ai oublié de joindre mon fichier où j'ai mis ce code, mais tu m'a proposé une bonne alternative, ça évite les bugs

Merci à toi

Pas de soucis j'avais compris quel était le soucis

Rechercher des sujets similaires à "remplir combo partir"