IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Filltre multi-critère dans une listView - Excel VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai Avatar de kodyone
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2024
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2024
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Filltre multi-critère dans une listView - Excel VBA
    Bonjour à tous,

    J'ai besoin d'aide pour corriger ma procédure de filtre dans une listview.

    En effet j'ai 8 Comboboxs à partir desquelles je veux lancer ma procédure de filtre c'est à dire:

    Ma Combobox1 Filtrée m'affiche des données dans ma combobox2 et dans la listview selon le filtre ainsi de suite jusqu'au 8ème combobox.

    J'ai fait en ma manière pour obtenir un résultat qui n'ai pas satisfaisant.

    Le premier filtre avec la Combobox1 fonctionne très bien, par contre avec les autres combobox ca ne marche pas car surtout avec la 3ème combobox, rien ne s'affiche dans ma Listview.

    Code du Filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub Filtrer(P As Byte)
    C = Feuil2.Range("B7:P" & Feuil2.Range("B1048576").End(xlUp).Row).Value
        With Registre_Pr.Registre
        .ListItems.Clear
     
    For i = 1 To UBound(C, 1)
        If CStr(C(i, P)) = Registre_Pr.Controls("ComboBox" & P) Then
        .ListItems.Add , , CDate(C(i, 1))
        Lg = .ListItems.Count
     
        .ListItems(Lg).ListSubItems.Add , , Format(C(i, 2), "Mm")
        .ListItems(Lg).ListSubItems.Add , , C(i, 3)
        .ListItems(Lg).ListSubItems.Add , , C(i, 4)
        .ListItems(Lg).ListSubItems.Add , , C(i, 5)
        .ListItems(Lg).ListSubItems.Add , , C(i, 6)
        .ListItems(Lg).ListSubItems.Add , , C(i, 7)
        .ListItems(Lg).ListSubItems.Add , , C(i, 8)
        .ListItems(Lg).ListSubItems.Add , , C(i, 9)
        .ListItems(Lg).ListSubItems.Add , , C(i, 10)
        .ListItems(Lg).ListSubItems.Add , , C(i, 11)
        .ListItems(Lg).ListSubItems.Add , , Format(C(i, 12), "# ### ### CFA")
        .ListItems(Lg).ListSubItems.Add , , Format(C(i, 13), "# ### ### CFA")
        .ListItems(Lg).ListSubItems.Add , , Format(C(i, 14), "# ### ### CFA")
        .ListItems(Lg).ListSubItems.Add , , Format(C(i, 15), "# ### ### CFA")
     
    End If
    Next i
    End With
    End Sub
    Code pour Combobox1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ComboBox2.Clear
    ComboBox3.Clear
    ComboBox4.Clear
    ComboBox5.Clear
    ComboBox6.Clear
    ComboBox7.Clear
    ComboBox8.Clear
     
    Set S = CreateObject("Scripting.Dictionary")
    For Lg = 1 To UBound(C)
    If CStr(C(Lg, 1)) = ComboBox1.Value Then S(C(Lg, 2)) = ""
    Next Lg
    ComboBox2.List = S.keys
    Filtrer (1)
    Code pour Combobox2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ComboBox3.Clear
    ComboBox4.Clear
    ComboBox5.Clear
    ComboBox6.Clear
    ComboBox7.Clear
    ComboBox8.Clear
     
    Set S = CreateObject("Scripting.Dictionary")
    For Lg = 1 To UBound(C)
    If CStr(C(Lg, 2)) = ComboBox2.Value Then S(C(Lg, 4)) = ""
    Next Lg
    ComboBox3.List = S.keys
    Filtrer (2)
    Code pour Combobox3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ComboBox4.Clear
    ComboBox5.Clear
    ComboBox6.Clear
    ComboBox7.Clear
    ComboBox8.Clear
     
    Set S = CreateObject("Scripting.Dictionary")
    For Lg = 1 To UBound(C)
    If CStr(C(Lg, 4)) = ComboBox3.Value Then S(C(Lg, 7)) = ""
    Next Lg
    ComboBox4.List = S.keys
    Filtrer (3)
    C'est le même code utilisé pour les autres comboboxs selon les lignes et colonnes.

    Voici des images d'exécution du code.

    1) La procédure marche très bien avec le filtre de ma première combobox (Voir Image 1)

    Nom : 1.png
Affichages : 132
Taille : 50,5 Ko

    2) Avec la deuxième combobox le filtre initialise tous les données du mois pourtant je voulais que ce soit uniquement les données de la date de la première combobox au mois du filtre 2 (Voir Image 2)

    Nom : 2.png
Affichages : 123
Taille : 76,0 Ko

    3) Avec la Combobox 3 rien ne s'affiche du tout pourtant dans l'image 1 vous voyez bien qu'il y'a bien des données (d'impression) (Voir Image 3)

    Nom : 3.png
Affichages : 127
Taille : 16,4 Ko

    Merci de me guider et merci pour votre bonne collaboration

  2. #2
    Membre habitué
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 174
    Points : 195
    Points
    195
    Par défaut Filtre élaboré ?
    Bonjour,

    Pour ma part, je n'aurais pas lié la liste à la base complète.
    Et, plutôt qu'utilisé du code pour appliquer les filtres, j'aurais utilisé une zone de filtre élaboré et j'aurais mis les critères directement sur la feuille Excel.

    ==> AdvancedFilter de l'objet Range

    Espérant que cet indice t'aidera.

    A+

  3. #3
    Membre à l'essai Avatar de kodyone
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2024
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2024
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Lilou51 Voir le message
    Bonjour,

    Pour ma part, je n'aurais pas lié la liste à la base complète.
    Et, plutôt qu'utilisé du code pour appliquer les filtres, j'aurais utilisé une zone de filtre élaboré et j'aurais mis les critères directement sur la feuille Excel.

    ==> AdvancedFilter de l'objet Range

    Espérant que cet indice t'aidera.

    A+
    Ok bien reçu. Merci beaucoup pour votre contribution. Je ne maîtrise pas trop AdvanceFilter dans la procédure que je propose ici. C'est une ListView ce n'est pas une feuille Excel.
    Merci qu'en même pour la proposition

  4. #4
    Membre habitué
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 174
    Points : 195
    Points
    195
    Par défaut
    Pour les filtres élaborés, c'est assez simple.

    Vous avez un super tuto ici : https://philippetulliez.developpez.c...dvancedfilter/

    Une fois lu en "Excel", la fonction d'enregistrement de macro vous permettra de l'avoir en VBA.

    Vous pourrez ensuite définir votre zone de liste directement sur les éléments restitués par la zone filtrée (non pas sur la zone B7 : P xx, mais sur la "BDD" avec application des filtres), et rafraichir la zone de liste.

    Enfin, ce serait mon choix... plutôt que de coder pour ce que Excel fait très bien.

    Ainsi, il n'y a qu'une procédure, dès que changement sur un combobox => on appelle sur la procédure applicable à tous les combo.

    La dite procédure dira
    => de compléter chacun des arguments pour chacun des filtres
    => + lancement du filtre avancé selon ces arguments
    => + mise à jour de la liste sur le USF.

  5. #5
    Membre éclairé Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 419
    Points : 659
    Points
    659
    Par défaut
    Citation Envoyé par Lilou51 Voir le message
    plutôt que de coder pour ce que Excel fait très bien.
    chouette un AMIS :-)
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

Discussions similaires

  1. [XL-2016] Formule pour compter l'occurence d'un mot dans une phrase. Excel VBA
    Par G.duc dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/03/2018, 14h16
  2. [VBA-PP]Ecrire dans une feuille Excel
    Par alpking dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 27/04/2006, 18h18
  3. [VBA-PP]fonction qui écrit un chiffre dans une cellule excel
    Par alpking dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/04/2006, 19h34
  4. [VBA]Passer une variable dans une formule Excel
    Par David1974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2006, 16h52
  5. [VBA]Userform mobile dans une feuille excel
    Par fikren dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/10/2005, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo