Bonjour le forum,
J'alimente une comboActiveX (Cmb_Code) qui se trouve dans la feuille "CalculHS" avec les données d'un TS (t_Noms) qui se trouve dans la feuille "Liste_agents".
Ma Combo s'alimente à l'activation de la feuille "CalculHS". Je souhaiterai que les codes déjà présent dans la colonne "Code agent" du TS "t-Heures" de la feuille "CalculHS" soient supprimés de la liste.
Voici mon début de code mais je n'arrive pas à insérer cette information. Pouvez-vous m'aider s'il vous plaît ?
Merci par avance
VB:
Sub AlimenterComboBox()
Dim WsCalculHS As Worksheet
Dim WsListe As Worksheet
Dim Tbl As ListObject
Dim Cell As Range
Dim Cbx As ComboBox
' Définir les feuilles de calcul
Set WsCalculHS = ThisWorkbook.Sheets("CalculHS") ' Feuille de calcul contenant la ComboBox
Set WsListe = ThisWorkbook.Sheets("Liste_agents") ' Feuille de calcul contenant le tableau structuré
' Définir le tableau structuré
Set Tbl = WsListe.ListObjects("t_Noms") ' Nom du tableau structuré
' Définir la ComboBox en utilisant OLEObjects
Set Cbx = WsCalculHS.OLEObjects("Cmb_Code").Object
' Vider la ComboBox avant de la remplir
Cbx.Clear
Cbx.AddItem ""
' Parcourir chaque cellule de la colonne "Code agent" du tableau structuré et ajouter les valeurs à la ComboBox
For Each Cell In Tbl.ListColumns("Code agent").DataBodyRange
Cbx.AddItem Cell.Value
Next Cell
End Sub
Private Sub Cmb_Code_Change()
Static isBusy As Boolean
If isBusy Then Exit Sub
isBusy = True
Dim WsCalculHS As Worksheet
Dim WsListe As Worksheet
Dim TblNoms As ListObject
Dim tblHeures As ListObject
Dim codeAgent As String
Dim Cell As Range
Dim NewRow As ListRow
Dim i As Integer
' Définir les feuilles de calcul
Set WsCalculHS = Sheets("CalculHS") ' Feuille de calcul contenant la ComboBox et le tableau structuré t_Heures
Set WsListe = Sheets("Liste_agents") ' Feuille de calcul contenant le tableau structuré t_Noms
' Définir les tableaux structurés
Set TblNoms = WsListe.ListObjects("t_Noms")
Set tblHeures = WsCalculHS.ListObjects("t_Heures")...
J'ai réussi à corriger l'erreur voici le code et ça fonctionne :
VB:
' Supprimer les codes présents dans la colonne "Code agent" de la ComboBox
If Not tblHeures.DataBodyRange Is Nothing Then
For Each Cell In tblHeures.ListColumns("Code agent").DataBodyRange
Me.Cmb_Code = Cell 'on place la valeur dans le combo
If Me.Cmb_Code.ListIndex <> -1 Then 'si ca correspond à un listindex ==> ca veut dire que le code est listé dans le combo
Me.Cmb_Code.RemoveItem Me.Cmb_Code.ListIndex 'on supprime l'élement du combo
End If
Next Cell
End If
Non, ce n'est pas tout à fait ce que je suggérais, mais c'est une solution que je trouve très jolie.
Pour quelqu'un qui n'avait pas compris ma suggestion, tu t'es pas mal débrouillé.
Non, ce n'est pas tout à fait ce que je suggérais, mais c'est une solution que je trouve très jolie.
Pour quelqu'un qui n'avait pas compris ma suggestion, tu t'es pas mal débrouillé.