Remplir combobox avec nom des feuilles

Remplir combobox avec nom des feuilles - VB/VBA/VBS - Programmation

Marsh Posté le 07-03-2006 à 15:14:47    

Me voilà de retour pour vous jouer un mauvais tour!
 
Je veux faire apparaître un UserForm dans lequel je veux une liste déroulante qui contiendra le nom des feuilles de mon classeur...
Alors me voilà lancée, j'ai tenté ca pour remplir le combo (on verra l'affichage du User plus tard lol):
 

Code :
  1. For F=1 to Workbooks("Members" ).worksheets.count
  2.     CmbFeuille.additem sheets(F).name
  3. Next F


 
Je vous permets totalement de rigoler... VBA commence à me gaver alors je ne suis plus capable de faire quoi que ce soit d'intelligent...
Merci pour votre soutien :cry:

Reply

Marsh Posté le 07-03-2006 à 15:14:47   

Reply

Marsh Posté le 07-03-2006 à 16:05:55    

Salut,
 
Tu y es presque !
Essaie ceci :


For Each F In Workbooks("Members" )
    CmbFeuille.additem sheets(F).name
Next F  


En effet, dans ta boucle For F, tu donnes à F une valeur numérique. Avec For Each,
F devient un bref instant une des feuilles du classeur et porte son nom.
 
A+
Horatio
 

Reply

Marsh Posté le 07-03-2006 à 16:20:35    

J'avais déja essayé le for each, et je ne suis jamais arrivée à le faire marcher. J'ai réssayé et la il me donne cette erreur:
"propriété ou méthode non gérée par cet objet"

Reply

Marsh Posté le 07-03-2006 à 16:23:10    

Salut,
 
Je me permet une autre syntaxe plus proche de celle de Madilina , en mettant :
For F=1 to Workbooks("Members" ).sheets.count    CmbFeuille.additem sheets(F).name
Next F  
 
@+

Reply

Marsh Posté le 07-03-2006 à 16:28:26    

Tellement proche que c'est la meme! merci quand meme porcinet :)

Reply

Marsh Posté le 07-03-2006 à 16:55:17    

Lord Nelson était distrait et/ou fatigué en répondant :)
Il fallait lire

Dim F As Worksheet
For Each F In Workbooks("Members" ).Worksheets
    CmbFeuille.additem F.name
Next F  

Et comme moi aussi je suis fatigué, je ne suis pas non plus à l'abri d'avoir glissé une erreur...


Message édité par tegu le 07-03-2006 à 16:58:21
Reply

Marsh Posté le 07-03-2006 à 16:59:50    

L'indice n'appartient pas à la sélection.... J'abandonne pour aujourd'hui je prends mes cours avec moi pour demain...
Bonne soirée à tous et merci de m'avoir aidée... A demain sans doute!

Reply

Marsh Posté le 07-03-2006 à 17:17:32    

Bon il ne trouve pas Members et comme je le craignais, j'ai oublié un détail :)
Il faut écrire Workbooks("Members.xls" ).Worksheets
Ça devrait marcher maintenant.


Message édité par tegu le 07-03-2006 à 17:17:53
Reply

Marsh Posté le 07-03-2006 à 17:18:35    

Oui Tegu, tu as raison !
 
Mais il y avait encore une autre boulette :


Dim F As Worksheet
For Each F In Workbooks("Members.xls" ).Worksheets
    CmbFeuille.AddItem F.Name
Next F


Préciser .xls pour appeler le classeur Members.
 
A+
Horatio
 

Reply

Marsh Posté le 07-03-2006 à 17:24:20    

Moralité :
 
Toujours tester avant de proposer une solution même quand la réponse paraît évidente.
Tester, tester, tester...
A+
Horatio

Reply

Marsh Posté le 07-03-2006 à 17:24:20   

Reply

Marsh Posté le 08-03-2006 à 09:39:57    

Je dirais même plus : tester dans les conditions exactes de l'exemple.
Car j'avais testé, non pas avec Workbooks("Members" ).Worksheets (qui m'aurait explosé à la figure), mais avec ActiveWorkbook.Worksheets
 
Que cela serve de leçon aux débutants ;)


Message édité par tegu le 08-03-2006 à 09:40:41
Reply

Marsh Posté le 08-03-2006 à 10:52:09    

Ah ah je n'ai plus de bug mais ca ne marche pas quand meme (ca serait trop beau !)
je suis ouverte à toute propositions toujours!


Message édité par Madilina le 08-03-2006 à 14:05:37
Reply

Marsh Posté le 09-03-2006 à 12:53:41    

Salut Madilina,
 
Pourquoi  n'utilises-tu pas simplement un code du genre :

Code :
  1. Private Sub ComboBox1_DropButtonClick()
  2. ComboBox1.Clear
  3. For i = 1 To Sheets.Count
  4.     ComboBox1.AddItem ("feuil" & i)
  5. Next i
  6. End Sub


 
J'avais fait ce code il y a quelques temps pour quelqu'un qui voulais mettre dans une combo placée sur une feuille, l'ensemble des feuilles du classeur actif.
 
@+

Reply

Marsh Posté le 09-03-2006 à 13:25:18    

>Madilina: Et en gros tu veux qu'on diagnostique le problème sans connaître les symptômes.
« ...ca ne marche pas... » est une phrase à proscrire lorsqu'on met un message pour avoir de l'aide. On se doute bien que si tu es encore là c'est que ça ne marche pas.
Mais si tu pouvais nous donner un message d'erreur, préciser le contexte par rapport à tous les conseils qu'on t'a déjà donné, ça pourrait servir.
Les exemples qu'on t'a donné fonctionnent. Donne nous des détails, affiche ici le code que tu utilises...
 
>porcinet82: ça serait sympa de lire le topic avant de répondre, tu rabaches ce qu'on a déjà dit sur la forme (une boucle + syntaxe .additem) sauf qu'en plus tu introduis une grosse erreur, à savoir qu'une feuille Excel ne se préfixe pas forcément par « feuil »

Reply

Marsh Posté le 09-03-2006 à 13:42:50    

Ouai c'est sur pour le préfixe, mais si tu lis ce que j'ai mit au dessus, tu verras que c'est code que j'avais deja ecris et que je ne faisait que proposer, et qu'il fallait le modifier.
Donc avec un peu de jugeote, tu modifies la ligne dans la boucle et sa fonctionne :
 

Code :
  1. Private Sub ComboBox1_DropButtonClick()
  2. ComboBox1.Clear
  3. For i = 1 To Sheets.Count
  4.     ComboBox1.AddItem Sheets(i).Name
  5. Next i
  6. End Sub


 
@+

Reply

Marsh Posté le 09-03-2006 à 14:28:08    

Merci mais j'ai trouvé un échappatoire à mon problème, j'ai mis des titres à chaque feuille (comme ça en plus ca améliore la mis en page) et je rempli le combobox avec les données de la range qui correspond à la feuille...
Par contre j'ai pas du bien le faire parce qu'à chaque fois que je lance mon user ca rajoute des noms dans le combo à ceux précédemment ajoutés!
Je pense que ton code porcinet va m'aider pour le ComboBox1.clear :) Je vais essayer tout de suite merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed