Accueil > Forum > > > > * userform avec liste variant suivant choix (VBA excel)
* userform avec liste variant suivant choix (VBA excel)
vendredi 15 avril 2005 à 14:00:49 |
* userform avec liste variant suivant choix (VBA excel)

marsupio
|
Bonjour à tous, (désolé pour ceux qui auraient déjà lu ce poste, mais n'aillant pas eu de réponse, j'insiste un p'tit peu...)
Voilà, j'ai crée une userform sous VBA excel.
Elle est composée de 2 "zones de liste modifiable". La première permet de sélectionner parmis une liste de pays (france, engleterre, espagne,etc...)
Le problème se pose sur la deuxième. En effet j'aimerai qu'elle permettent de choisir parmis une liste de magasins. Cette liste de magasins dépend évidement du pays que l'on a choisi précédement (puisque les noms des magasins dans chaque pays sont différents ). Voilà, je ne sais pas comment attribuer à cette "zone de liste modifiable", des valeurs qui dépendront du choix fait juste avant (pays).
J'ai bien quelques idées qui tiennent plus de la bidouille qu'autre chose, et comme j'ai peur que ça ressemble déjà à une usine à gaz. Je me permet de vous demander s'il n'y a pas une solution toute simple.
Merci à vous
|
|
vendredi 15 avril 2005 à 14:35:50 |
Re : * userform avec liste variant suivant choix (VBA excel)

Malbolok
|
1° - Intercepter le choix d'un pays dans la listbox 1 : 2° - Re-générer le contenu de la listbox 2
Private Sub ListBox1_Change() ListBox2.Clear For i = 1 To 10 ListBox2.AddItem ListBox1.List(ListBox1.ListIndex) & " - " & Str(i) Next i End Sub
|
|
vendredi 15 avril 2005 à 15:21:58 |
Re : * userform avec liste variant suivant choix (VBA excel)

marsupio
|
Merci Malbolok, Mais je suis désolé de poser cette question: Voilà, je suis novice en VB et surtout autodidacte, donc pourrais tu m'expliquer un peu ta ligne de code: pourquoi faire une boucle?? ListBox2.AddItem ListBox1.List(ListBox1.ListIndex) & " - " & Str(i): là j'avoue, c'est un peu du chinois pour moi
En fait voilà, moi j'avais tenté ça (dans ma logique): listbox2.rowsource.value = range("A1:X1").offset(choix_pays)
en ayant un tableau ou la ligne 1, c'est la france, la ligne 2 c'est angleterre, etc, etc, et avec un compstr pour avoir la bonne ligne dans la boucle (choix_pays)
Si je te demande ça, c'est qu'il faut que j'adapte ton code à mon fichier, donc si je le comprend pas, ça va être balaise...
Je te remercie bien 
|
|
vendredi 15 avril 2005 à 16:03:23 |
Re : * userform avec liste variant suivant choix (VBA excel)

nostra78
|
Où se trouve les magasins sur ta feuille excel : tu as un pays et dans la même ligne les magasins que l'on peut trouver ? Si oui, les magasins sont ils dans une même cellule?? c important pour te filer un bout de prog que tu pourras facilement adpater sans lutter à tout comprendre
|
|
vendredi 15 avril 2005 à 16:13:42 |
Re : * userform avec liste variant suivant choix (VBA excel)

Malbolok
|
sorry, voici le détail : en partant d'1 sheet : A B
| 1 Pays -1- |
Pays -1- Ville -1- |
| 2 Pays -1- |
Pays -1- Ville -2- |
| 3 Pays -1- |
Pays -1- Ville -3- |
| 4 Pays -2- |
Pays -2- Ville -1- |
| 5 Pays -2- |
Pays -2- Ville -2- |
| 6 Pays -3- |
Pays -3- Ville -1- |
tu peux alimenter la listbox 1 comme ceci :
1 - supprimer le contenu de la liste 2 - parcourrir toutes les cellules du sheet "sheet1" dans un sélection de cellules (= range) allant de la première cellule ( = cells(1,1) ) jusqu'à la dernière cellule ( = Rows(1).Cells.Count) de la colonne 1 3 - alimenter la listbox1 (en supprimant les doublons)
ListBox1.Clear 'supression du contenu de la liste Pays = "" For Each c In Worksheets("Sheet1").Range(Cells(1, 1), Cells(Worksheets("Sheet1").Rows(1).Cells.Count, 1)) If c <> Pays Then Pays = c ListBox1.AddItem Pays End If Next
4 - intercepter la sélection d'un pays dans la liste 1. n° de l'item sélectionné dans la liste 1 = ListBox1.ListIndex le nom du pays sélectionné = ListBox1.List(ListBox1.ListIndex)
5 - re-générer la liste 2 en fonction du choix de la liste 1.
6- re-parcourrir toutes les cellules de la colonne 1 en recherchant celles dont le contenu correspond au nom du pays sélectionné, ainsi on peut récuperer dans la cellule de la colonne 2 le nom des villes.
Private Sub ListBox1_Change() ListBox2.Clear For Each c In Worksheets("Sheet1").Range(Cells(1, 1), Cells(Worksheets("Sheet1").Rows(1).Cells.Count, 1)) If c = ListBox1.List(ListBox1.ListIndex) Then ListBox2.AddItem c.Cells(c.Cells.Column, Cells.Row + 1) End If Next End Sub 7- recupérer le nom de la ville lors de la sélection dans la liste 2
Private Sub ListBox2_Click() MsgBox ListBox2.List(ListBox2.ListIndex) End Sub
8 - Si le contenu du sheet change, la façon de parcourrir les cellules du sheet reste valable 9 - de même que la récupération des items sélectionnés dans les listes
10- enfin, j'espère avoir été plus clair cette fois et avoir pu d'aider, bonne prog ...
|
|
vendredi 15 avril 2005 à 16:30:17 |
Re : * userform avec liste variant suivant choix (VBA excel)

marsupio
|
Tout d'abord, si tu as des idées à me proposer, qui simplifierait tout ça, je suis ouvert. Sinon, ma première idée consistait à: Ma première liste modifiable (pays) a une private sub qui ouvre un fichier excel (listing.xls), et dans ce fichier il y a plusieurs feuilles (france, espagne, ....). Donc quand on choisi dans la userform france, ça ouvre la feuille france, quand on coche angleterre, etc, etc. logique hein  Ensuite, sur chacune de ces feuilles, il y a en case "B1", qui indique le nombre de magasins qu'il y a dans le pays (comme ça, ça peut me servir de référence pour une boucle avec test du nom du magasin. Genre: dim nbre as integer dim boucle as integer range("B1") = nbre for boucle = 0 to nbre if strcomp(range("D5").offset(boucle), me.motdepasse.text)=0 then
Ensuite de C5 jusqu'à Cxx, il y a les noms des magasins, et de D5 à Dxx, il y a un code. Car en fait le but de la userform et de restreindre l'accès à des fichiers en choisissant le pays, le mag et le mot de passe qui correspond. J'espère avoir répondu à ta question, et je te remercie pour ton aide
|
|
vendredi 15 avril 2005 à 22:00:55 |
Re : * userform avec liste variant suivant choix (VBA excel)

FFkiller
|
Tu peux simplement créer deux colonnes :
La première contient tes Pays et la plage de tes x Pays est nommée "Pays"
Dans la deuxième tes villes son triées par pays et leurs plages sont nommées en fonction
Petit exemple
A1 = France
A2 = Belgique
A3 = Allemagne
A4 = Suisse
....
La plage (A1:A...) est nommée "Pays"
B1 = Marseille
B2 = Paris
B3 = Berlin
....
....
Dans excel tu nommes la plage (B1:B2) "France"
Dans ta première liste, la valeur Rowsource est Pays
Dans VBA : ta première liste (Combobox1) prend en valeur Rowsource "Pays"
Donc ton code de condition est :
Sub Combobox1_quandclick()
If combobox1.value = "France" then combobox2.Rowsource = "France"
If combobox1.value = "Belgique" then combobox2.Rowsource = "Belgique"
.....
End Sub
FFkiller
|
|
mercredi 20 avril 2005 à 18:00:51 |
Re : * userform avec liste variant suivant choix (VBA excel)

marsupio
|
Merci à FFkiller et un GRand merci à MALBOLOK pour avoir pris le temps de rédiger tout ça,
J’ai bien compris le principe de vos codes. Par contre, allez savoir pourquoi (surement pasque je suis polio ), ils ne fonctionnent pas.
Je veux pas vous embêter plus longtemps, mais au cas ou, je vous pose les questions…
Malbolok:
Ton code a l’air très complet (encore un grand merci pour le temps que tu m’as accordé). J’ai bien compris comment tu veux procéder, mais étant novice, j’ai du mal à traduire tes lignes de code (par exemple, tu utilise "c" et "Pays" comme variables, sans les avoir dimensionnés comme par exemple "Dim Pays as string" Ce qui, dans ma conception de VB me semblait indispensable (je rappelle, je suis novice.)
A première vue ta ligne
For each c in worksheets("sheet1").range(cells….count,1))
Reviens à l’usine à gaz que je fais habituellement:
Dim boucle as integer Dim nbre as integer Nbre= range("A1") ‘là je met dans la case A1 bêtement manuellement le nombre de ligne que j’ai… For boucle = 0 to nbre step 1 If…. Next boucle
Bon, si je posais toutes les questions qui me viennent à l’esprit, il faudrait 3 pages… Donc je sais pas ou je fais mal, mais ça fonctionne pas !!!
Ou alors, ayant recopié bêtement, ton code et ne fonctionnant pas, j’ai peut-être mal rempli le tableau. J’ai fait ainsi:
A1: France, B1: Paris
A2: France, B2: Poitiers
A3: France, B3: Nice
A4: Espagne, B3: Madrid
Etc, etc
Ffkiller: La première combobox fonctionne, par contre la deuxième ne "réagit" pas en fonction du choix de la première, j’ai éssayé plusieurs variantes, rien n’y fait….
Enfin bref, je me doute que vous ne pouvez pas plus m’aider, donc la fonction première de ce mail est de vous remercier…
|
|
mercredi 20 avril 2005 à 20:47:37 |
Re : * userform avec liste variant suivant choix (VBA excel)

FFkiller
|
Envoi moi un bout de ton fichier à l'adresse : ffxkiller@waandoo.fr
Je pense avoir la solution à ton problème. Si ca march je mettrais le code ici.
@+
FFkiller
|
|
mercredi 20 avril 2005 à 22:18:18 |
Re : * userform avec liste variant suivant choix (VBA excel)

FFkiller
|
Sub pays()
toto = 5 'a remplacer par ton nombre de colonnes
'comptage de ligne
i = 1
lig = 0
Do While Cells(i, 1).Value <> ""
i = i + 1
lig = lig + 1
Loop
For x = 1 To lig
If Cells(x, 1).Value = "France" Then
france = france + 1
End If
If Cells(x, 1).Value = "Espagne" Then
espagne = espagne + 1
End If
Next x
débfrance = espagne + 1 '+ autre pays si avant
finfrance = débfrance + france - 1 'équilibrage débfrance
débesp = 1 '+ autre pays si avant
finesp = débesp + espagne - 1 'équilibrage débesp
Range(Cells(débfrance, 2), Cells(finfrance, 2)).Name = "France"
Range(Cells(débesp, 2), Cells(finesp, 2)).Name = "Espagne"
'et ainsi de suite pour les autres pays.
'pense à créer des variables pour tes pays et ATTENTION AUX
INTERMLEDIAIRES ex : Estonie entre Espagne et France ==> débfrance =
espagne + estonie+ 1
ex2 : Allemagne ==>débesp = allemagne + 1 '+ autre pays si avant
débfrance = allemagne +
espagne + 1
End Sub
Arrange toi pour trier tes lignes pui fais appelle à ce code.
Crée une colonne avec la liste (sans doublons) de tes pays et nomme la colonne "Pays"
Dans ta combobox1 metlPays dans rowsource et insère le code précèdemment donné (15/04/05).
Et voilà.
Salut
FFkiller
|
|
Cette discussion est classée dans : vba, liste, choix, userform, pays
Répondre à ce message
Sujets en rapport avec ce message
Word et VBA [ par mir ]
j'aimerais savoir comment dans un combobox d'un userform de word , créer une référence de liste qui est dans un classeur excel.Private sub userform_i
arborescence avec des "zones de liste modifiable" VBA excel [ par marsupio ]
Bonjour à tous,Voilà, j'ai crée une userform sous VBA excel.Elle est composée de 2 "zones de liste modifiable". La première permet de sélectionner par
condition sur celle excel en vba [ par thibaultanguy ]
[^^happy10]Bonjours à tous et joyeuses fêtes J'ai developpé une liste de service sur excel avec un userform me permettant d'y porter les congés (CA) e
VBA - SAUVEGARDE USERFORM [ par marou76 ]
Bonjour le forum, Je dispose d'un userform contenant plusieurs TextBox ainsi que des combobox. Je souhaite sauvegardé celui ci dans son état lorsqu
VBA - Sauvegarde Userform [ par marou76 ]
Bonjour le forum, Je dispose d'un userform contenant plusieurs TextBox ainsi que des combobox. Je souhaite sauvegardé celui ci dans son état lorsqu
commande vb sous execel [ par typyrats ]
Bonjour je souhaite ajouter une programmation vb dans un fichier excel. j'ai un fichier recap qui doit me permettre d'afficher des short listes en f
LISTBOX EN VBA [ par cap24 ]
Bonjour, j'ai une liste de noms sur une feuille excel. Via un "userform" je visualise cette liste dans une "listbox". Comment arriver à copier la lign
début sous vba [ par titi899 ]
Bonjour, Voilà, j'ai un programme à faire sous VBA. D'après un listing de fournisseur, je dois créer un programme qui : -d'après le nom du fournisseu
Avoir ligne sélectionnée dans une listbox VBA [ par tafus91 ]
Bonjour à vous, voila mon petit soucis j'ai un userform dans lequel ce trouve une listbox et j'aimerai que lorsque j'ouvre mon userform la 1ère ligne
Choix ds une liste deroulante et tabulation [ par DUX76 ]
Bonjour, Un truc tout bête mais je ne vois pas... J'ai une liste deroulante ds un formulaire si je remplis le champs precedent à la main et que je tab
Livres en rapport
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|