Userform tri table Excel multicritere

Bonjour a tous

j ai beau chercher je ne trouve pas j ai créer un userform pour trier ma table listobjet

mon code fonctionne bien mais je n'arrive pas a pouvoir selectionner plusieur couleur via les check box pour un couleur ca fonctionne mais pour deux couleur rien ne s affiche

mon userform :

1

mon code :

FiltrerDonnees()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim i As Integer
    Dim ligneVisible As Boolean

    ' Accéder à la feuille de données
    Set ws = ThisWorkbook.Sheets("Accueil")

    ' Accéder à la liste objet
    Set lo = ws.ListObjects("TExtraction")

    ' Parcourir chaque ligne de la table "TExtraction"
    For i = 1 To lo.ListRows.Count
        ligneVisible = False ' Initialiser la ligne comme invisible

        ' Vérifier si la ligne satisfait aux critères de filtrage

        ' Vérifier l'unité de service (ComboBox1)
        If (ComboBox1.Text = "" Or lo.DataBodyRange(i, 1).value = ComboBox1.Text) And _
            (ComboBox2.Text = "" Or lo.DataBodyRange(i, 2).value = ComboBox2.Text) And _
            (ComboBox3.Text = "" Or lo.DataBodyRange(i, 5).value = ComboBox3.Text) And _
            (ComboBox4.Text = "" Or lo.DataBodyRange(i, 7).value = ComboBox4.Text) And _
            (CheckBox1.value = False Or (CheckBox1.value = True And lo.DataBodyRange(i, 1).Font.Color = RGB(128, 0, 128))) And _
            (CheckBox2.value = False Or (CheckBox2.value = True And lo.DataBodyRange(i, 1).Font.Color = RGB(255, 69, 0))) And _
            (CheckBox3.value = False Or (CheckBox3.value = True And lo.DataBodyRange(i, 1).Font.Color = RGB(255, 140, 0))) And _
            (CheckBox4.value = False Or (CheckBox4.value = True And lo.DataBodyRange(i, 1).Font.Color = RGB(0, 0, 0))) Then
            ligneVisible = True
        End If

        ' Si la ligne est visible, l'afficher
        If ligneVisible Then
            lo.ListRows(i).Range.EntireRow.Hidden = False
        Else
            lo.ListRows(i).Range.EntireRow.Hidden = True
        End If
    Next i

    ' Appeler la procédure pour mettre à jour l'état des filtres
    EtatFiltres
End Sub

Pour clarifier un peu plus ce que je compte obtenir :

Le code affiche des lignes correspondantes selon un ou plusieurs des critères choisis dans l userform que ce soit comme box ou Check box donc il peut afficher simplement les éléments correspondant à une couleur ou plusieurs couleurs où les éléments de plusieurs couleurs liées à une valeur combo box

Là où je bloque si l'utilisateur choisit une ou des valeurs dans les combox et minimum plusieurs couleurs le code doit afficher les lignes correspondant aux éléments comme au box uniquement dans les couleurs couchées

une suggestion de contournement !

Si ton tableau est un tcd, pourquoi ne pas utiliser les segments ?

Cordialement

FINDRH

bonjour,

Je vais limité au maximum les intervention dans la feuille pour les utilisateurs qui devront passer uniquement par userform

Personne pour m'aider ?

Problème résolu

Sub FiltrerDonnees()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim i As Integer
    Dim ligneVisible As Boolean

    ' Accéder à la feuille de données
    Set ws = ThisWorkbook.Sheets("Accueil")

    ' Accéder à la liste objet
    Set lo = ws.ListObjects("TExtraction")

    ' Parcourir chaque ligne de la table "TExtraction"
    For i = 1 To lo.ListRows.Count
        ligneVisible = False ' Initialiser la ligne comme invisible

        ' Vérifier si la ligne satisfait aux critères de filtrage

        ' Vérifier l'unité de service (ComboBox1)
        If (ComboBox1.Text = "" Or lo.DataBodyRange(i, 1).value = ComboBox1.Text) And _
            (ComboBox2.Text = "" Or lo.DataBodyRange(i, 2).value = ComboBox2.Text) And _
            (ComboBox3.Text = "" Or lo.DataBodyRange(i, 5).value = ComboBox3.Text) And _
            (ComboBox4.Text = "" Or lo.DataBodyRange(i, 7).value = ComboBox4.Text) Then

            ' Vérifier les couleurs (CheckBoxes)
            If CheckBox1.value = False And CheckBox2.value = False And CheckBox3.value = False And CheckBox4.value = False Then
                ' Aucune couleur cochée, toutes les lignes sont visibles
                ligneVisible = True
            ElseIf CheckBox1.value = True And lo.DataBodyRange(i, 1).Font.Color = RGB(128, 0, 128) Then
                ' CheckBox1 (violet) cochée et couleur violette
                ligneVisible = True
            ElseIf CheckBox2.value = True And lo.DataBodyRange(i, 1).Font.Color = RGB(255, 69, 0) Then
                ' CheckBox2 (orange) cochée et couleur orange
                ligneVisible = True
            ElseIf CheckBox3.value = True And lo.DataBodyRange(i, 1).Font.Color = RGB(255, 140, 0) Then
                ' CheckBox3 (orange clair) cochée et couleur orange clair
                ligneVisible = True
            ElseIf CheckBox4.value = True And lo.DataBodyRange(i, 1).Font.Color = RGB(0, 0, 0) Then
                ' CheckBox4 (noir) cochée et couleur noire
                ligneVisible = True
            End If
        End If

        ' Si la ligne est visible, l'afficher
        If ligneVisible Then
            lo.ListRows(i).Range.EntireRow.Hidden = False
        Else
            lo.ListRows(i).Range.EntireRow.Hidden = True
        End If
    Next i

    ' Appeler la procédure pour mettre à jour l'état des filtres
    EtatFiltres
End Sub
Rechercher des sujets similaires à "userform tri table multicritere"