VB, important

Résolu/Fermé
charly - 2 mars 2011 à 15:21
rv83toulon Messages postés 68 Date d'inscription mercredi 2 mars 2011 Statut Membre Dernière intervention 25 avril 2013 - 3 mars 2011 à 10:31
Bonjour à tous, (désoler pour le titre pas très évocatuer mais je ne savais pas quoi mettre.

Je vous explique mon problème

je dois faire apparaitre des données contenues dans une colone exel dans une combobox, jusque la rien de bien méchant... Mais le document ayant plusieurs page j'ai fait une listbox pour pouvoir choisir une page en particulier, dans toutes les page la colonne qui m'interresse est la colone A donc il faudrait que la combobox s'actualise en fonction de la page séléctionnée.

Par exemple :

je sélectionne la feuille "feuil1", dans la combobox se trouvent alors les données de la colonne A de la feuille "feuil1". Je sélectionne la feuille "ABC", maintenant dans la combobox se trouvent les données de la colonne A de la feuille "ABC"...

De plus étant donnée que les colonnes des différentes feuilles n'ont pas le même nombre de données, il faudrait que la combobox n'affiche que les case ou il y a une donnée.

je sais pas si j'ai été très claire n'hésite pas a me demander plus d'info si besoin

Merci d'avance pour votre aide,

Charly


A voir également:

7 réponses

Krystan Messages postés 36 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 17 mars 2011 10
2 mars 2011 à 16:48
Je ne sais pas si c'est ce que tu veux mais essai ça :
J'ai créé une combobox (Combobox1) sur la Feuil1 qui intégrera les données des colonnes A
J'ai créé une autre Combobox (Combobox2) toujours sur la Feuil1 qui contiendra le nom des différentes feuilles
Et enfin un petit bouton GO (Sur la Feuil1 egalement) afin de lancer le prog

**************************************************************

Private Sub GO_Click()
Dim Feuille, Donnees
Feuille = ComboBox2.Value
'Sélectionner la feuille choisit dans le Combobox2
Worksheets(Feuille).Activate
'Sélection de la cellule A1
Worksheets(Feuille).Range("A1").Select
'Boucle de emplissage de la Combobox1
Do
Donnees = ActiveCell.Value
'Test si la cellule est vide pour quitter la boucle
If Donnees = "" Then
Exit Do
Else
End If
'Remplissage de la Combobox1
Worksheets("Feuil1").Activate
Worksheets("Feuil1").ComboBox1.AddItem Donnees
'Descendre d'une cellule
Worksheets(Feuille).Activate
ActiveCell.Offset(1, 0).Activate
Loop
End Sub

**************************************************************

*Pour mettre les nom de feuille dans la ComboBox2 j'ai utilisé ça :

Private Sub Workbook_Open()
Worksheets("Feuil1").ComboBox2.AddItem "Feuil1"
Worksheets("Feuil1").ComboBox2.AddItem "Feuil2"
Worksheets("Feuil1").ComboBox2.AddItem "Feuil3"
End Sub

En espérant que c'est ce que tu cherchais... (Bon je n'ai pas utilisé de Userform, mais le principe doit pas trop changer)
1
rv83toulon Messages postés 68 Date d'inscription mercredi 2 mars 2011 Statut Membre Dernière intervention 25 avril 2013 15
2 mars 2011 à 17:57
Bonjour,
si je comprend bien tu as une userform dans lequel il y a une listbox avec le nom des feuilles du classeur. En fonction du choix dans la listbox afficher dans un combobox la colonne A de la feuille?

Si c'est le cas voici un exemple avec une listbox qu'on va appeller listbox1 et une combobox qu'on va appeller combobox1:
- a l'initialize du userform on met les noms des feuilles dans la listbox comme ceci :
Private Sub UserForm_Initialize()

'je boucle sur la collection des feuilles du classeur
For Each sh In Worksheets
'j'ajoute le nom de la feuille à la listbox
Me.ListBox1.AddItem sh.Name
Next sh

End Sub


- ensuite pour remplir la combobox il faut utiliser les événements du control listbox. pour l'exemple on va prendre le double_click. Ainsi en faisant un doubleclic sur un item de ta listbox il va remplir le combobox, comme ceci :
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

'j'utilise la feuille sélectionnée dans la listbox
With Sheets(Me.ListBox1.Value)
'je met dans un tableau les cellules A1:A et dernière cellule utilisée
tblcombo = .Range("A1:A" & .Range("A" & Rows.Count).End(xlUp).Row)
End With

With Me.ComboBox1
'je vide le combobox
.Clear
'je remplis la combo avec le tbl ci-dessus
.List = tblcombo
End With

End Sub


Dis mois si j'ai bien saisie, et adpate à tes besoins.
A+
1
sa ma l'air exactement sa, je reviens pour vous dire si sa fonctionne par contre je ne comprends pas ce qui est entre () dans "Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)"
0
rv83toulon Messages postés 68 Date d'inscription mercredi 2 mars 2011 Statut Membre Dernière intervention 25 avril 2013 15
3 mars 2011 à 10:28
Bonjour,
cela sert à identifier le double clic. si double clic cancel retourne une valeur vrai et lance la macro. c'est une valeur standard.
0
Je n'ai pas de code, car je ne sais pas comment commençer cette manip' j'ai uniquement dans mon petit debut de programme la userform, les tableaux de données et les ligne de code permettant de mettre les différente feuilles dans une listbox.

Je cherche depuit hier mais je n'ai pas trouver de post ou tuto se rapprochant de ce que je veux faire, c'est pourquoi je pose la question sur ce forum.
0
ce n'est pas exactement sa mais si j'ai tout compris cela peu m'être d'une grande aide.

petites precisions :
- je suis obligé de faire une userform car je ne doit pas modifier les pages de données qui sont faite par un robot de dimensionnement de pièce.
- je ne doit pas avoir a appuyer sur un bouton pour faire ce que je vous demande car ce n'est que la partie "saisie de données" de mon programme les bouton seront réservés pour l'analyse des données

néamoin je vais fortement m'aider de ce que vous avez fait et je vous tiens au courant quand j'ai fini (j'ai bientôt débaucher se sera peu-être demain)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
C'est bon sa marche! ;)
MERCI beaucoup rv83toulon il ma fallut juste faire deux modif minimes car les ligne du style ".clear" ne fonctionnaient pas et ce qu'il y avait entre parenthèses au debut de monctionnait pas non plus donc voici le code fini :

Private Sub ListBox1_Click()

'j'utilise la feuille sélectionnée dans la listbox
With Sheets(UserForm.frm_feuilles.ListBox1.Value)
'je met dans un tableau les cellules A1:A et dernière cellule utilisée
tblcombo = .Range("A5:A" & .Range("A" & Rows.Count).End(xlUp).Row)
End With

With UserForm.frm_debut.ComboBox1
'je vide le combobox
frm_debut.ComboBox1 = Clear
'je remplis la combo avec le tbl ci-dessus
frm_debut.ComboBox1.List = tblcombo
End With

End Sub

voilà maintenant il faut que je fasse des graphe avec les données compris entre ce que j'ai choisis dans les combobox1 et 2 (la 2 affichant les même données que la 1)

mais je vais essayer de m'arracher les cheveux avant de revenir demander votre aide ^^

Encore merci!
0
rv83toulon Messages postés 68 Date d'inscription mercredi 2 mars 2011 Statut Membre Dernière intervention 25 avril 2013 15
3 mars 2011 à 10:31
Heureux d'avoir pu t'aider
0
Skeletyon Messages postés 1552 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 156
2 mars 2011 à 15:28
Bonjour,

Je pense avoir compris ce que vous souhaitez faire mais je ne vois pas ou vous péchez...

Récupérer des données d'excel n'est pas trop compliqué. Pour récupérer les infos sauf les cases vides, il suffit de faire une boucle qui recopie dans la combobox si la valeur de la case est != "", non?
-1
récupérer des données d'exel et effectivement simple mais les récupérer en fonction du feuille qu'on a choisis dans une listbox et déjà plus compliqué (pour moi) (ps : les programmes que j'ai fais jusqu'à maintenant de part mes études n'étaient que des programmes scientifiques qui utilisaient le logiciel VB pour résoudre des équation etc... je n'ai jamais utilisé les macro exel donc faire le lien entre exel et VBA reste un peu compliqué pour moi.)
0
Krystan Messages postés 36 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 17 mars 2011 10
2 mars 2011 à 16:00
Peux-tu mettre ton code actuel afin de voir ce qui fait défaut dans ton code ?
-1