begin process at 2012 02 14 05:53:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

J'AI BESOIN D'AIDE !!!! :)

 > 

* userform avec liste variant suivant choix (VBA excel)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

* 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

Membre Club
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

Membre Club
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

Membre Club
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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,042 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales