[Ruban personalisé] Rafraichissement ComboBox

JNP

XLDnaute Barbatruc
Bonjour :),
Je souhaiterais mettre à jour une ComboBox en temps réel. Je souhaite enrichir la liste à chaque fois que je met une nouvelle entrée. Pour cela, j'ai codé mon xml ainsi :
Code:
[SIZE=2][COLOR=#0000ff]<[/COLOR][/SIZE][SIZE=2][COLOR=#800000]comboBox [/COLOR][/SIZE][SIZE=2][COLOR=#ff0000]id[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]=[/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#0000ff]Combo1[/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#ff0000]label[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]=[/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#0000ff]Choix : [/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#ff0000]getItemCount[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]=[/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#0000ff]NombreItemComboBox[/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#ff0000]getItemLabel[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]=[/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#0000ff]ComboLabel[/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#ff0000]onChange[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]=[/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#0000ff]ChangeCombo1[/COLOR][/SIZE][SIZE=2]"[/SIZE][SIZE=2][COLOR=#0000ff] /> [/COLOR][/SIZE]
Puis j'ai utilisé les macros suivantes :
Code:
Sub NombreItemComboBox(control As IRibbonControl, ByRef returnedVal)
If control.ID = "Combo1" Then returnedVal = Base.Range("a65500").End(xlUp).Row
End Sub
Code:
'Callback for Combo1 getItemLabel
Sub ComboLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
If control.ID = "Combo1" Then returnedVal = Base.Cells(index + 1, 1)
End Sub
Code:
'Callback for Combo1 onChange
Sub ChangeCombo1(control As IRibbonControl, text As String)
Dim I As Integer, Nouveau As Boolean
Nouveau = True
If control.ID = "Combo1" Then
    For I = 1 To Base.Range("a65500").End(xlUp).Row
        If text = Base.Cells(I, 1) Then Nouveau = False
    Next I
    If Nouveau = True Then
        Base.Cells(Base.Range("a65500").End(xlUp).Row + 1, 1) = text
    End If
End If
End Sub
avec une liste dans la première colonne de la feuille Base.
Les Items supplémentaires sont bien rajoutés, mais quand je retourne dans le ComboBox, celui-ci n'a pas évolué :eek:
Quelqu'un aurait-il une idée ?
Merci d'avance :cool:
 

MichelXld

XLDnaute Barbatruc
Re : [Ruban personalisé] Rafraichissement ComboBox

bonsoir


je ne suis pas sur d'avoir bien compris ton soucis.
dans cet exemple, le combobox ajouté dans le ruban personnalisé (groupe OngletPerso) est mis à jour automatiquement lorsque les données de la colonne A sont modifiées dans la Feuil1


Dans le fichier xml:
Code:
<customUI xmlns="" onLoad="RubanCharge"
>
<ribbon startFromScratch="false">
<tabs>
<tab id="OngletPerso" label="OngletPerso" visible="true">
   <group id="Projet01" label="Projet 01">
      <!-- getItemCount="NbItemCombo" va définir le nombre d'items dans la combobox. --> 
      <!-- getItemLabel="ComboLabel" permet d'alimenter la combobox. -->
      <!-- onChange="ChangeCombo1" gère l'évènement 'Change' dans la combobox. -->
      <comboBox id="Combo1" label="Choix : " getItemCount="NbItemCombo" getItemLabel="ComboLabel"
         onChange="ChangeCombo1" />
   </group>
</tab>
</tabs>
</ribbon>
</customUI>




Dans un module standard:

Code:
Option Explicit
 
Public MonRuban As IRibbonUI
 
'Callback for customUI.onLoad
'Est déclenché lors du chargement du ruban personnalisé.
Sub RubanCharge(ribbon As IRibbonUI)
    Set MonRuban = ribbon
End Sub
 
 
'Callback for Combo1 getItemCount
Sub NbItemCombo(control As IRibbonControl, ByRef returnedVal)
    'Définit le nombre d'éléments dans la combobox
    returnedVal = Worksheets("Feuil1").Range("A1").End(xlDown).Row
End Sub
 
 
'Callback for Combo1 getItemLabel
'Index est défini par la valeur saisie dans Sub NbItemCombo (=4)
Sub ComboLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
 
    'Alimente le Combobox à partir des données de la Feuille1
     returnedVal = Worksheets("Feuil1").Cells(index + 1, 1)
End Sub
 
 
'Callback for Combo1 onChange
Sub ChangeCombo1(control As IRibbonControl, text As String)
    'Renvoie l'élément sélectionné dans la combobox
    MsgBox text
End Sub



Dans le module objet de la feuille contenant les données:

Code:
Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then _
        MonRuban.InvalidateControl "Combo1"
End Sub



bonne soirée
MichelXld
 

paoloadv

XLDnaute Nouveau
Bonjour,
je voudrais profiter de cette discussion ancienne pour poser une question subsidiaire...
Comment initialiser la combobox à un item précis de la liste chargée ?
Par exemple si la liste contient les items {"toto","titi","tata"}, comment faire pour que l'item par défaut sélectionné soit par exemple "titi" ?
Je n'ai pas trouvé de solution directe (sinon de passer par un affichage d'un label dont la valeur est celle de la sélection par défaut de la combobox (invisible au début), et au clic sur ce label faire afficher dynamiquement le menu de sélection de la combobox pour un changement d'item qui mettra à jour la valeur du label par défaut. Le menu de combobox est ensuite caché dynamiquement en fin de sélection).
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 942
Membres
103 989
dernier inscrit
jralonso