Liste en cascade sous excel en VBA

Bichonnet

XLDnaute Junior
Bonjour à tous,

Je voudrais faire exactement ce que j'ai trouvé sur un autre site (dont j'ai obtenu le lien sur ce magnifique forum qu'est celui-ci !).

Formation Excel VBA JB (voir pour avoir le fichier excel)

L'idée est donc de faire une un UserForm avec à gauche une liste et à droite des listes qui s'affichent en fonction de ce qu'on a sélectionné dans la première liste.

Sur le site, vous pourrez télécharger le document excel où la macro fonctionne. J ai remis le code ci-dessous. Je n'arrive pas à comprendre le "choix1=DECALLER;..." lorsque je refais ce VBA dans mon propre document excel avec d'autres listes, je ne vois pas comment attribuer sous VBA la fonction DECALLER à "choix1" ?

Pourtant ça a l'air super simple puisqu il n'y a que 4 lignes de codes :-(

Help please !

Merci :)

Listes en cascade

Noms de champ
Choix1 =DECALER($A$1;;;;NBVAL($1:$1))
Choix2 =$A$2:$A$100

Private Sub UserForm_Initialize()
Me.ListBox1.List = Application.Transpose(Range("choix1"))
End Sub

Private Sub ListBox1_Click()
choix = Me.ListBox1.ListIndex
Me.ListBox2.List = [choix2].Offset(, choix).Resize(Application.CountA([choix2].Offset(, choix))).Value
End Sub

ListeCascade
 
G

Guest

Guest
Re : Liste en cascade sous excel en VBA

Bonjour,

Avec ton fichier et tes tentatives personnelles, ce serait plus simple pour t'aider et moins théorique.

De plus il y a des centaines d'exemple de ce genre en vba ou non sur ce forum. Fais une recherche et tu en trouveras.

A+
 

Bichonnet

XLDnaute Junior
Re : Liste en cascade sous excel en VBA

En fait j'y arrive en nommant des listes et en utilisant "Données--> Validation,.." avec la fonction =INDIRECT() pour la deuxième liste mais...comme je suis difficile point de vue visuel, j'aimerais pouvoir faire ça dans un UserForm.

J'aurais donc sur la Feuille1 de Excel, 4 colonnes intitulées (autant reprendre un exemple plus facile) : "Marque", "Renault", "VW", "Citroen".

Dans la colonne "Marque", il y aurait donc Renault, VW et Citroen
Dans la colonne Renault, il y aurait Clio, Twingo, Scenic,....
Dans la colonne VW, il y aurait Golf, Polo, Passat
Dans la colonne Citroen, il y aurait Picasso, C3, C4

En utilisant les formules Excel, nickel j y arrive. En VBA avec un UserForm ???? :p
 

Bichonnet

XLDnaute Junior
Re : Liste en cascade sous excel en VBA

Oui tu as raison, ce sera plus facile

Du coup, c est le document avec mes info "vraies" et pas l exemple avec les voitures.
Le principe reste le même, je voudrais un UserForm qui dans la partie gauche me montre (visible) la première colonne.
Si je choisis par exemple de cliquer sur "technical", ca devrait afficher la colonne "technical",...

(j espère que j ai pas fait de fausse manip et que la pièce jointe y est bien !:D)

Merci pour la rapidité de tes réponses. Pour excel, oui je travaille principalement sur 2010 en PC, je l ai modifié, merci !
 

Pièces jointes

  • Liste cascade.xlsx
    10.3 KB · Affichages: 189
  • Liste cascade.xlsx
    10.3 KB · Affichages: 192
  • Liste cascade.xlsx
    10.3 KB · Affichages: 206

Bichonnet

XLDnaute Junior
Re : Liste en cascade sous excel en VBA

:eek::eek::eek::eek::eek:

:rolleyes: Je passe pour un abruti, j'ai même pas joint le fichier .xlsm avec la macro.

Sur le fichier, j'ai donc dans la case jaune et grise, ce que j'arrive à faire avec les formule de bases.

Dans le VBA, j'ai tenté de réutiliser le code trouvé sur le forum..mais même le UserForm n'apparait pas (je me suis mis à VBA la semaine passée, j'ai déjà réussi quelques manip fastidieuses en compilant différents codes mais là...je comprends pas le "choix1",...

Merci pour ta patience !
 

Pièces jointes

  • Liste cascade.xlsm
    19.7 KB · Affichages: 145
  • Liste cascade.xlsm
    19.7 KB · Affichages: 163
  • Liste cascade.xlsm
    19.7 KB · Affichages: 155
G

Guest

Guest
Re : Liste en cascade sous excel en VBA

Bonjour,

Dans le fichier:

Insertion d'un tableau au sens excel (onglet insertion/tableau) avec ligne de totaux qui retourne le nombre d'items de chaque colonne. Ce tableau je l'ai nommé mes liste dans l'onglet 'Outils de tableau/Création'

Dans ces tableaux pour ajouter une ligne en bas il suffit de ce mettre sur la dernière cellule des données et d'appuyer sur TAB

La colonne 1 est devenue obsolète. l'entête du tableau servira de liste

Dans le userform il ne reste plus qu'à utiliser la syntaxe des tableaux et les références structurées pour remplir la liste

Voir les Wiki de michel xld sur la syntaxe des tableaux et références structurées dans la faq. Ainsi que l'aide excel.

Pour avoir leur traduction en VBA, il suffit de créer une formule en sélectionnant des élements dans le tableau
puis sous vbe dans la fenêtre exécution (CTRL+G ou affichage 'fenêtre exécution) taper:
?ActiveCell.Formula et valider

A+
 
Dernière modification par un modérateur:

Bichonnet

XLDnaute Junior
Re : Liste en cascade sous excel en VBA

Merci Hasco !

Je me replonge dans ce fichier mardi au boulot (@ home je suis sur mac).
Mais ta technique a l'air pour le moins prometteuse, je n'avais pas pensé l'aborder sous cet angle, je pensais qu'il fallait "juste" attribuer une ligne de code...Heureusement qu'on trouve des forums pour nous aiguiller !

Je te souhaite un bon week end !!

@+
 

Bichonnet

XLDnaute Junior
Re : Liste en cascade sous excel en VBA

Si les neurones pouvaient se copier comme un cd, je copierais le tien pour pouvoir parler le VBA et l'écrire !

Si je veux que ce userform s'affiche en mode non-modal (donc que je puisse continuer à remplir le doc excel en voyant le userform).

Je mets le code dans "this workbook - open" :

Private Sub Workbook_Open()
UserForm1.Show 0
End Sub

Cela fonctionne, mon userform se met dès que j'ouvre mon doc excel.
La question qui tue : je cherche à ne pas afficher la croix blanche sur fond rouge de mon userform.
J'ai cherché sur le et les forum (oui je n'aime pas demander de l'aide sans avoir trifouiller par moi même mais il faut savoir avouer mon incompétence...sans pour autant que j'abuse de tes connaissances).
J'ai trouvé le code suivant :

A mettre dans un module général:
Option Explicit

Declare Function GetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long

Declare Function SetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Transfer(6) As String

Sub OteCroix(UF As UserForm)
Dim hwnd As Long
'Enlève la croix rouge de l'UF
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") _
& "Frame", UF.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
End Sub


A mettre dans le userform

Private Sub UserForm_Initialize()
OteCroix Me
'.... code
End sub


Et bien il me met un bug dans la première partie pour la ligne :
Declare Function GetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long

:(
 

Bichonnet

XLDnaute Junior
Re : Liste en cascade sous excel en VBA

Oublie ma dernière question qui tue. Cela fonctionne avec

Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

A mettre dans les déclarations du UserForm

Et puis
Private Sub UserForm_Initialize()
'Transposer l'entête pour en récupére les valeurs
Me.ListBox1.List = Application.Transpose(Range("MesListes[#Headers]"))
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub



Par contre n'oublie pas que je te remercie infiniment pour ton aide !!

Merci !!!!
 
G

Guest

Guest
Re : Liste en cascade sous excel en VBA

Bonjour,

Se serait bien de commer tout tes posts par bonjour. cf la charte du forum. De plus pour publier des codes utilise l'éditeur avancé et le bouton '#' de sa barre d'outils.

A+
 

Bichonnet

XLDnaute Junior
Re : Liste en cascade sous excel en VBA

Tu as raison...ce n'était pas très poli, j avais commencé à répondre samedi, et puis j ai fait le pareusseux, copier coller et on en oublie les lois du civisme !

Bonjour Hasco ! :)

J ai pu constater que tu t'étais déjà penché sur plusieurs questions du type de celle qui va suivre, mais je n'ai pas trouvé le code qui fait ce que je voudrais...

Grâce à toi, j ai ce magnifique userform qui reprend mon tableau (j'aurai même appris à faire le tableau du coup, ce que j'ignorais !).
Avant de mettre le post en [résolu], il y a deux détails qui me chipotent :

1) Est-il possible de figer le userform pour qu'il reste toujours près d'une cellule, par exemple dans mon cas H4 (et donc si je faire descendre ma fenêtre, le formulaire reste toujours au même endroit sur la feuille) ?

2) Supprimer la barre grise "UserForm1" pour ne laisser que la zone que j'ai mis en bleu ?

3)...et c'est là le plus crucial, tu constateras que j'ai rajouter un bouton "SEND" qui ouvre Outlook, fais une sauvegarde du document pour le mettre en pièce jointe,....
Mon problème est que ce que j'ai sélectionné dans mon UserForm ne s'enregistre pas. Je me dis qu'il devrait y avoir deux possibilités pour régler ce problème :
a) cliquer sur le bouton valider et faire copier mes choix dans les cellules A13 et B13
b) sauver le choix sur le userform

Je préfèrerais la solution a, ce qui me permettrait de reprendre la sélection dans le corps de mon mail (ça je pourrais faire si les choix sont bien copiés dans les cellules A13 et B13...


Je te mets le fichier excel en pièce jointe...

Oublions ma malpolitesse d'avant et l'impression que j'ai d'être passé pour le "roi de la facilité" à demander qu'on fasse le travail à ma place, ce n'était pas du tout mon intention !

Merci :eek:
 

Pièces jointes

  • userform liste cascade essai.xlsm
    30.4 KB · Affichages: 97
  • userform liste cascade essai.xlsm
    30.4 KB · Affichages: 85
  • userform liste cascade essai.xlsm
    30.4 KB · Affichages: 88

Bichonnet

XLDnaute Junior
Re : Liste en cascade sous excel en VBA

Re,

Fichier correct en pièce jointe, l'autre j'avais changé les listbox et cela ne fonctionnait plus (logique, la ListBox2 n existait plus, je l avais supprimée par mégarde)



:rolleyes:
 

Pièces jointes

  • userform liste cascade essai.xlsm
    31 KB · Affichages: 179
  • userform liste cascade essai.xlsm
    31 KB · Affichages: 192
  • userform liste cascade essai.xlsm
    31 KB · Affichages: 195

Discussions similaires

Réponses
4
Affichages
213

Statistiques des forums

Discussions
312 272
Messages
2 086 689
Membres
103 372
dernier inscrit
BibiCh