Comment effacer le contenu de plusieurs combobox d'un seul coup

O

olivier

Guest
Bonjour,

Voilà j'ai une quinzaine de combobox qui doivent être initialisées.
Pour cela j'utilise l'instruction clear.
Mon problème actuel est que pour vider les combobox je dois faire ca :
'Clear All ComboBox used for Protocol
Sheets(Patient_Plan).ComboBox21.Clear
Sheets(Patient_Plan).ComboBox22.Clear
Sheets(Patient_Plan).ComboBox23.Clear
Sheets(Patient_Plan).ComboBox24.Clear
Sheets(Patient_Plan).ComboBox25.Clear
Sheets(Patient_Plan).ComboBox26.Clear
Sheets(Patient_Plan).ComboBox27.Clear
Sheets(Patient_Plan).ComboBox28.Clear
Sheets(Patient_Plan).ComboBox29.Clear
Sheets(Patient_Plan).ComboBox30.Clear

N'y a t'il pas mieux ? Du style For i = 1 to 10 Combobox(i).Clear

Merci d'avance
Olivier
 
@

@+Thierry

Guest
Salut Olivier

sans tester (je n'ai pas envie de créer 30 combobox, de les remplir et de les vider)...

NumCB = 1
For i = 1 to 30
Sheets(Patient_Plan).ComboBox & NumCB.Clear
NumCB = NumCB + 1
next i

Ce devrait être quelque chose comme çà...
Bon App
@+Thierry
 
T

Ti

Guest
tu peux y arriver avec un objet oleobjects, ensuite tu testes le type d'objets renvoyé, si c'est un combo tu le réinitialises. Je ne peux pas joindre d'exemple tout de suite, s'il n'en vient pas dans la journée, j'en mettrai un
 
@

@+Thierry

Guest
Bon moi j'ai essayé sur un Userform = Pas de Problème

Sub Test()
numcb = 1
For i = 1 To 10
Combo = "ComboBox" & numcb
UserForm1(Combo).AddItem "Toto"
numcb = numcb + 1
Next i
End Sub

Sub Test2()
numcb = 1
For i = 1 To 10
Combo = "ComboBox" & numcb
UserForm1(Combo).Clear
numcb = numcb + 1
Next i
End Sub

Par contre là où çà devient difficile c'est quand les ComboBoxs sont sur une feuille...
...
( à suivre )
@+Thierry
 
@

@+Thierry

Guest
C'est pas évident...

Trouvé dans l'aide :
For Each s In Worksheets(1).Shapes
If s.Type = msoOLEControlObject Then s.Left = 10
Next
çà marche toute les combobox sont bien alignées...

Mais pas question d'essayer Additem ou clear...

çà aussi :
Sub TestFeuille()
numcb = 1
For i = 1 To 10
combo = "ComboBox" & numcb
ActiveSheet.OLEObjects(combo).Object.Value = "titi"
numcb = numcb + 1
Next i
End Sub

On a bien "titi" dans toutes les ComboBox... Mais toujours pas supporté avec Additem ou Clear...
...
(à suivre)
 
@

@+Thierry

Guest
En fait je crois qu'il faudrait arriver à préciser quel type de "msoOLEControlObject" est une combobox pour que la méthode additem ou clear soit supporté...

Mais évidemment il n'y a pas d'aide sur msoOLEControlObject (sauf que le débugeur me retour "= 12" ??? (il n'y a que 10 combobox en tout dans la sheet... et pas d'autre control... )

Vé voir sur les archives du MPFE...
 
T

Ti

Guest
pas de panique, ça arrive :

Voici 2 fonctions : la première te permet de sélectionner les combos à réinitialiser éventuellement, la deuxième initialise tout

Option Explicit
'Ti
Sub ComboClear1()
Dim Combo As OLEObject
Dim boucle As Byte
'ça marche si tu as x combos nommés Combobox1, Combobox2...
For boucle = 1 To 3
Set Combo = [Feuil1].OLEObjects("combobox" & boucle)
Combo_Object.clear
Next boucle
End Sub

Sub ComboClear2()
Dim Combo As OLEObject
'tu ne veux pas t'occuper du nom des combos, et tu as d'autres
'objets que des combo dans ta feuille, utilise cette procédure
For Each Combo In [Feuil1].OLEObjects
If Combo.ProgId = "Forms.ComboBox.1" Then Combo_Object.clear
Next Combo
End Sub
 
T

Ti

Guest
Thierry, à titre d'info, pour utiliser les propriétés d'un Oleobject, il est nécessaire de préciser la propriété .Object de cet OleObject (c'est clair ? :))
c'est pas évident au début, on l'oublie tout le temps cet .Object
 

Statistiques des forums

Discussions
314 655
Messages
2 111 604
Membres
111 217
dernier inscrit
aladinkabeya2