Liste déroulante en cascade

Bonjours à tous,

Je suis un débutant en VBA je souhaiterais réaliser une liste déroulante en cascade (combox).

J'ai deux listes fixes

Si c'est possible je voudrais écrire mes listes sous formes de codes et non pas sur une feuille excel.

1ère liste

A

B

C

D

2ème liste

Si j'ai choisit A alors >>>>choix entre 2, 3 ou 3,5

Si j'ai choisit B alors >>>> 2,90

Si j'ai choisit C alors >>>> 2,55 ou 1

Si j'ai choisit D alors >>>> 4, 2, 1

Tant que le choix n'a pas été fait dans la 1ere liste déroulante on ne pourra pas passer à la 2eme liste déroulante.

J'espère que ma demande est claire.

D'avance merci pour votre aide.

Bonsoir

Voila un classeur excel qui fait ce que tu cherche par contre moi aussi je ne suis pas fortiche en vba donc cet tout ce que je peut te donner (Classeur que je me suis déjà servi et modifier)

Bonne soirée

Cordialement

Merci Phanou c'est sympa.

J'ai pas réussi à comprendre le code il est trop compliqué pour moi

Le fichier correspond bien à ce que je recherche il aurait juste fallu que les deux listes soit sur un USEERFORM.

Amicalement,

Samm

Bonjour à tous,

Ça fait deux jours que j'essaie de modifier le fichier que Phanou a mis en pièce jointe mais je n'y arrive pas.

Je séche là.

Est-ce quelqu'un pourrait venir à mon aide svp.

Bonjour

Expliques un peu mieux ce que tu veux dire par

samm a écrit :

Si c'est possible je voudrais écrire mes listes sous formes de codes et non pas sur une feuille excel.

Tes données sont codées en dur (dans le code) ou alors sont sur une feuille comme Phanou te l'a proposé ?

Merci de venir à mon secours Banzai64

Alors je voudrais que mes données soit codées en dur sous forme de code comme l'exemple ci-dessous

Private Sub UserForm_Initialize()
  Cmbox1.ColumnCount = 1
   Cmbox1.List() = Array("A", "B", "C", "D")

 Cmbox2.ColumnCount = 1
  Cmbox2List() = Array("2,5m", "3m", "2,9m", "2,4", "2,55")
End Sub

je voudrais que ça fasse la même chose que le fichier de Phanou avec deux combox dans un userform et PAS de base de données.

Les données seront codées en dur sous forme de code comme dans l'exemple ci dessus.

J'espere que c'est clair ,si ce n'est pas le cas n'histe pas à me poser des questions.

Samm

Bonjour

A tester

C'est exatement ce que je voulais

Tu m'as sorti d'une bonne galère

Merci Banzai64

Bonjour Sam,

En souhaitant avoir bien compris ta demande...

Il faut tout d'abord un user form, ici uf00 contenant les deux combos Cbo1 et Cbo2, ainsi qu'un module pour recevoir le code.

Le code directement associé au userform: (En cliquant sur le userform, en mode développement)

Private Sub UserForm_initialize()

Call Init ' Appelle la procédure Init située dans le Module1

End Sub

Private Sub Cbo1_Change() ' ... lorsque change la valeur de Cbo1

uf00.cbo2.Value = "" ' Efface la valeur du Cbo2

Call fillCbo3 ' Remplit un tableau en fonction de la sélection de Cbo1

uf00.cbo2.List = vCbo3 ' Attribue à Cbo2 les choix identifiés dans la procédure fillCbo3

End Sub

MODULE1

Sub Init() ' Procédure appelée directement lorsque uf00 est chargé.

'Remplissage du tableau vCbo1

ReDim vCbo1(4)

vCbo1(1) = "A"

vCbo1(2) = "B"

vCbo1(3) = "C"

vCbo1(4) = "D"

'Remplissage du tableau vCbo2

ReDim vCbo2(9, 2)

vCbo2(1, 1) = "A"

vCbo2(1, 2) = "2"

vCbo2(2, 1) = "A"

vCbo2(2, 2) = "3"

vCbo2(3, 1) = "A"

vCbo2(3, 2) = "3.5"

vCbo2(4, 1) = "B"

vCbo2(4, 2) = "2.9"

vCbo2(5, 1) = "C"

vCbo2(5, 2) = "2.55"

vCbo2(6, 1) = "C"

vCbo2(6, 2) = "1.0"

vCbo2(7, 1) = "D"

vCbo2(7, 2) = "4.0"

vCbo2(8, 1) = "D"

vCbo2(8, 2) = "2.0"

vCbo2(9, 1) = "D"

vCbo2(9, 2) = "1.0"

'Attribution des valeurs au premier combo

uf00.cbo1.List = vCbo1

'On peut aussi attribuer les valeurs initiales au combo

uf00.cbo1.Value = "A"

End Sub

Sub fillCbo3() ' Procédure appelée lors du changement de valeur de Cbo1

'Calcul du nombre de valeurs à prévoir dans le menu Cbo2, en fonction du choix effectué dans Cbo1

Dim vL1, vL2, vL3 As Single

vL1 = 1

vL2 = UBound(vCbo2)

vL3 = 0

Do While vL1 <= vL2

If vCbo2(vL1, 1) = uf00.cbo1.Value Then

vL3 = vL3 + 1

End If

vL1 = vL1 + 1

Loop

'Redimensionner vCbo3 en fonction du choix de Cbo1

ReDim vCbo3(vL3)

'Remplissage de vCBO3 en fonction du choix de Cbo1

vL1 = 1

vL3 = 1

Do While vL1 <= vL2

If vCbo2(vL1, 1) = uf00.cbo1.Value Then

vCbo3(vL3) = vCbo2(vL1, 2)

vL3 = vL3 + 1

End If

vL1 = vL1 + 1

Loop

End Sub

bon succès.

Merci lpaquette.consultant.

Amicalement,

Samm

Rechercher des sujets similaires à "liste deroulante cascade"