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
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
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)
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... )
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)
Combbject.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 Combbject.clear
Next Combo
End Sub
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