[VBA/Excel] Lister tous les contrôles situés sur une feuille Excel

Résolu
cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006 - 29 juil. 2006 à 17:07
cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006 - 30 juil. 2006 à 00:45
Bonjour à tous,

J'ai une feuille Excel contenant plusieurs Controls dont quelques Progressbars et Buttons. J'aimerais appliquer une même routine à toutes mes ProgressBar en cliquant sur un des boutons.
Pour cela, est-ce que quelqu'un d'entre vous sait alors comment lister tous les contrôles présents sur ma feuille, et puis en sélectionner selon le type. J'ai essayé le code suivant mais sans succès:

For Each pb In Worksheets(1).Controls
   If TypeName(pb) = "ProgressBar" Then MsgBox pb.Name
Next pb
avec pb déclaré comme Object
Il semble que ça bloque à "Worksheets(1).Controls". J'ai également essayé avec Controls tout seul, Worksheet(1).ProgressBars, ProgressBars tout seul,... mais rien à faire, la machine ne veut rien comprendre...

Je pensais éventuellement rassembler toutes les ProgressBars au sein d'un groupe de contrôles, mais en parcourant le forum, j'ai constaté que cela est impossible en VBA...
De plus, je ne souhaite pas utiliser d'Userform pour mon application (À terme, une quinzaine de ProgressBars vont remplir ma feuille Excel, donc il me faut de la place et de la flexibilité, que je n'ai pas ou que j'ai moins avec un Userform)...

J'espère avoir bien posé mon problème.
Je vous remercie d'avance pour vos réponses/conseils.

Nico.

[config: Excel 2003 / XP SP2]
Amateurement vôtre... 

4 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
29 juil. 2006 à 22:13
Salut,

essaie ça :

<small>
Coloration syntaxique automatique </small>
Dim Obj     As OLEObject 

For Each Obj In Worksheets("Nom de la Feuille").OLEObjects 
    If TypeOf Obj.Object Is MSForms.ProgressBar Then 
        ' traitement de ton code ...............................
    End If 
Next Obj 

' je ne te garantie pas que MSForms.ProgressBar fonctionne, 
' peut-être que quelques recherches s'imposent.
' (en tout cas, avec MSForms.TextBox, ça fonctionne !)

<small>
Coloration syntaxique automatique </small>

@++

  Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
3
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
29 juil. 2006 à 18:03
Salut, pour tester le type c'est :
If TypeOf pb Is ProgressBar Then MsgBox pb.Name

Ca marche avec une userform mais avec une worksheet, je ne sais pas si c'est possible.
0
cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006
29 juil. 2006 à 20:36
Salut Dolphin Boy,

merci pour ton conseil. Mais apparemment ca ne marche pas.
Il semble que VBA ne digère toujours pas la commande "Worksheets(1).Controls".

Je vous remercie d'avance pour vos conseils/suggestions.

Ciao,
Nico.
Amateurement vôtre... 
0
cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006
30 juil. 2006 à 00:45
Grand merci à Mortalino !!!

Mortalino : Il faut juste remplacer dans ton bout de code MSForms.ProgressBar par ProgressBar tout seul, et ça marche du tonnerre !!!
Merci aussi à Dolphi Boy pour ses pistes de recherches.

Ciao,
Nico.
Amateurement vôtre... 
0
Rejoignez-nous