Combobox - je n'en peux plus.

Signaler
Messages postés
24
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
4 avril 2013
-
Messages postés
24
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
4 avril 2013
-
Bonjour à tous,
je vais commencer par instaurer les fondements de ce poste ^^, je suis nul en VBA, je ne cherche pas particulièrement à progresser et je ne comprend rien à ce langage. De manière ponctuelle j'en ai besoin alors SVP évitez les réponses incompréhensibles avec des codes sorties de nulle part.

Je vous inscris le mien et vous présente mon problème merci de m'aider le plus clairement possible.

Microsoft Excel Objet / Feuille:

"Private Sub Combobox1_click()

          ComboBox1.AddItem Sheets("Modélisation").Name
          ComboBox1.AddItem Sheets("Données générales").Name
          ComboBox1.AddItem Sheets("Données de ventes").Name

End Sub"

Voila les problèmes sont simples, lorsque j'ouvre mon document, la combobox ne s'initialise pas d'elle même il faut que je clique sur un bouton go que j'ai créé avant de voir apparaître les nom des différentes feuilles dans la liste déroulante.
Voila le code de ce fameux bouton "Go"

"Private Sub CommandButton1_Click()

If ComboBox1.Text = "" Then
MsgBox ("Choisissez une feuille"), vbInformation, "ABCD"
Else
nom = ComboBox1.Text
Sheets(nom).Select

End If"

Le premier soucis est donc de pouvoir accéder au contenue de la combobox sans cliquer sur ce bouton.
Ensuite, une fois la combo initialiser, si je choisis une feuille sans cliquer sur le bouton "Go", et que je reclique sur la liste déroulante, des doublons apparaissent et ne cesse de se multiplier du temps que je n'appuie pas sur le bouton "Go".

Donc, comment au vue de mon code puis-je annuler les doublons et surtout permettre a la combobox de montrer les possibilitées du menu déroulant dès l'ouverture du fichier.

merci d'avance en espèrant avoir était assez clair.

9 réponses

Messages postés
38
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
25 mars 2014

Bonjour,
Je pense qu'il faut mettre ton code dans l'ouverture de la feuille excel
Pour cela,
Ouvrir ton dossier Excel
Alt+F11 pour passer en VB
Cliquer sur This Workbook(à gauche)
dans la fenetre de code , choisir Workbook
et selectionner la méthode Open
et tu met ton code

J'espère que cela est ce que tu cherches<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>

Viviane
Messages postés
24
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
4 avril 2013

J'ai bien exécuté ta manip, mais je suis toujours obligé de cliquer sur le bouton "Go". La combobox ne s'initialise pas d'elle même.
Merci de ta réponse en tout cas :)
Messages postés
24
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
4 avril 2013

En fait pas sure que sa ne fonctionne pas, à mon avis je tape n'importe quoi la ^^.

"Private Sub Workbook_Open()"

Voici donc le début mais comment j'écris la suite la je suis un peu largué^^. Je met directement mon code précédent, j'écris qq chose de plus devant, derrière....?
Messages postés
22
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
10 juin 2009

C'est normal que ta combo ne ce remplisse pas d'elle meme, car elle est sur l'évenement Combobox1_click().
A mon avis tu devrais mettre sur form_load ou form_initialize  je ne sais plus lequel c'est en vba excel. 
De plus je trouve bisare que ta combo ce remplisse en appuyant sur go plutot qu'en cliquant dessus , car rien dans le code du bouton ne remplis ta combo. 

 
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Salut

Quel est ton pseudo, AgeOfSkull ?
Oh, la réponse est dans ma question !
Et bien ton code, c'est pareil :    Sheets("Modélisation").Name   est équivalent à "Modélisation"  alors épargne toi du boulot.
Ca c'était la blagounette.

Ta ComboBox, où est-elle implantée ? Sur une UserForm ou directement sur ta feuille ?
Le code remplissant la ComboBox avec les noms des feuilles (AddItem) doit se trouver dans une procédure qui s'exécutera au démarrage.
Sur une UserForm : dans UserForm_Initialize
Sur une Feuille : Dans Workbook_Open

Actuellement, tu ne remplis ta ComboBox que lorsque tu cliques dessus, c'est un peu génant et surtout, ça génère des doublons, c'est sûr !
Ca ne t'a pas sauté aux yeux ?
Par contre, il faudra faire une action lorsque l'utilisateur cliquera sur ta Combo : c'est là que la procédure _Click intervient.
Alors dedans, mets simplement ton code
   Sheets(ComboBox1.Text).Select

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
24
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
4 avril 2013

Très sympa de répondre mais perso je n'ai rien compris; comme dis précédemment je suis une quiche dans ce type de chose.
En ce qui concerne ma Combobox elle est, physiquement sur ma feuille, et le code est dans une feuille de Vba. (ni userfurm, ni workbook ou autre, simplement une feuille).

"Sur une UserForm : dans UserForm_Initialize
Sur une Feuille : Dans Workbook_Open"

Je veux bien mais c'est toujours le même problème après je ne sais pas quoi écrire, et à cahque fius que je met qq chose sa me fou des erreurs quand je lance le code.

Je veux une combobox qui présente une liste déroulante de trois propositions toujours que ce soit au lancement du fichier, lorsque l'on sélectionne une ligne puis qu'on se dit qu'on va en sélectionner une autre; je veux annuler les doublons et je ne saius pas comment faire alors épargne moi ce genre de truc "Actuellement, tu ne remplis ta ComboBox que lorsque tu cliques dessus,
c'est un peu génant et surtout, ça génère des doublons, c'est sûr !
Ca ne t'a pas sauté aux yeux ?"
Biensur que si sa m'as sauté aux yeux mais je ne sais pas pourquoi et ce que j'attend c'est des solutions pas qu'on me répéte ce qui me bloque.
Messages postés
38
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
25 mars 2014

Me revoilà. Il faut préciser où se trouve ta CB. Moi je l'ai déssiné du la feuille 1.

Private Sub Workbook_Open()
Worksheets(1).ComboBox1.Clear
Worksheets(1).ComboBox1.AddItem Sheets("Modélisation").Name
Worksheets(1).ComboBox1.AddItem Sheets("Données générales").Name
Worksheets(1).ComboBox1.AddItem Sheets("Données de ventes").Name
End Sub
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Tu veux, tu veux ... il y a quand même un minimum de compréhension et d'auto-apprentissage.
Au fur et à mesure qu'on t'a répondu, tu as vu défiler des mots clés : As-tu au moins regardé l'aide de ces mots ?
En général, il y a des exemples / didacticels : à toi de les essayer, de voir comment ça réagit ET pourquoi.

Viviane44 a eu la gentillesse de te donner du code tout cuit, mais regarde les réponses précédentes (relis les), on te proposait déjà cette même solution, mais fallait lire et il te suffisait de déplacer ton code. C'est quand même pas compliqué !
Alors si tu n'as pas la patience d'apprendre, on ne l'aura pas pour toi !

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
24
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
4 avril 2013

Iop,
j'allais justement répondre à Viviane44 qui comme tu dis à eu cette gentillesse et qui plus est sa fonctionne.
Le coup de l'auto apprentissage c'est super, mais personnellement je n'ai pas le "déclic" de la programmation bien au contraire je nage véritablement dedans.

Les mots clé oui je les ai regardés sa m'as pas du tout aidé, et quand aux explications ben si je dis que je les comprend pas c'est pas pour être casse couille mais c'est que je ne les comprend vraiment pas.
Certaines personnes sont pas doués pour un domaine d'application et moi la programmation informatique je n'y pige queue d'ale. Quand on connait bien quelque chose c'est facile d'avoir l'impression d'être clair mais ce ne l'est pas forcément pour un novice c'est pourquoi je remercie encore Vivian44 pour sa simplicité dans la réponse.

Enfin bon, merci pour les réponses diverses et variées maintenant sa tourne; jack au plaisir de te croiser sur le forum de quelque chose ou tu ne comprends rien pour te parler d'auto-apprentissage.