Microsoft 365 Supprimer de la liste d'une Combo les données déjà présentes dans une colonne d'un TS

NONO14

XLDnaute Impliqué
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
 
Solution
essaie ca

VB:
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")...

NONO14

XLDnaute Impliqué
tu ne cherches vraiment pas beaucoup..
il faut faire le meme test avec le tableau de la feuille CalculHS

If tblHeures.ListRows.Count <> 0 Then
For Each Cell In tblHeures.ListColumns("Code agent").DataBodyRange
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
 

Discussions similaires

Statistiques des forums

Discussions
314 426
Messages
2 109 478
Membres
110 488
dernier inscrit
glossaire