Userform tri table Excel multicritere
Bonjour a tous
j ai beau chercher je ne trouve pas
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 :
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