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 :

Filtration de Données via UserForm


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2023
    Messages : 5
    Par défaut Filtration de Données via UserForm
    Bonjour à tous, je me permets de poster ce message car mon programme ne retourne pas ce que j'attends.

    Je m'explique : Je dispose d'un UserForm comprenant 14 CheckBox chacun associé à un Label.
    Je dispose aussi d'un bouton commande "Filtrer". Le but de ce bouton est de filtrer ma feuille excel "Feuil1" en fonction des checkbox qui ont été coché.
    Chaque checkbox correspond à une valeur dans une colonne précise. Ma feuille excel "Feuil1" comporte 32 entetes de A1 à AF1. Le but est de filtrer ma "Feuil1" et d'extraire de cette derniere les lignes ayant soit le checkbox1 soit le checkbox2... soit le checkbox14 soit les lignes qui ont toutes ces checkbox, dans la "Feuil2"

    Malheureusement, lorsque je coche plusieurs checkbox, le programme retourne les lignes n'ayant qu'un critere correspondant juste à un checkbox..
    Je pense que c'est un probleme de "Ou inclusif" mais je ne sais pas quoi modifier dans mon code...

    Je vous remercie par avance et reste à votre disposition pour tout renseignement complémentaire.

    Bien à vous
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut,
    Pour obtenir un filtrage avec une logique "Ou inclusif", il faut utiliser la méthode "AdvancedFilter" avec des critères multiples. Voici comment adapter votre code pour cela :

    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
    30
    31
    32
    33
    34
    35
    Private Sub Command_Button()
        Dim j As Integer
        Dim CheckBoxes() As MSForms.CheckBox
        Dim Critères() As Variant
        Dim PlageDonnées As Range
        Dim PlageRésultats As Range
        Dim FeuilleSource As Worksheet
        Dim FeuilleFiltree As Worksheet
     
        Set FeuilleSource = Sheets("Feuil1")
        Set FeuilleFiltree = Sheets("Feuil2")
        PlageFiltree.Cells.ClearContents
     
        'Création du tableau de critères
        j = 0
        For i = 1 To 14
            If Me.Controls("CheckBox" & i).Value = True Then
                ReDim Preserve CheckBoxes(j)
                Set CheckBoxes(j) = Me.Controls("CheckBox" & i)
                ReDim Preserve Critères(1 To j, 1 To 1)
                Critères(j, 1) = Me.Controls("CheckBox" & i).Caption & "=X"
                j = j + 1
            End If
        Next i
     
        'Filtrage des données avec une logique "Ou inclusif"
        Set PlageDonnées = FeuilleSource.Range("A1:AF" & FeuilleSource.Cells(Rows.Count, 1).End(xlUp).Row)
        Set PlageRésultats = FeuilleFiltree.Range("A1")
        PlageDonnées.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Critères, CopyToRange:=PlageRésultats
     
        'Suppression des filtres
        PlageDonnées.AutoFilter
     
        Unload Me
    End Sub
    J'ai supprimé la boucle "For" qui appliquait les filtres, car la méthode "AdvancedFilter" s'en charge automatiquement avec les critères fournis. J'ai également ajouté les lignes pour définir la plage de données et la plage de destination des résultats pour la méthode "AdvancedFilter". Enfin, j'ai ajouté la ligne pour supprimer les filtres après avoir copié les résultats dans la feuille "Feuil2". Non testé puisque tu n'as fourni qu'un fichier txt, j'espère qu'il n'y aura pas d'erreur.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2023
    Messages : 5
    Par défaut
    Merci beacuoup Franc, c'est super gentil de votre part, je vais essayer ceci de suite.
    Merci encore,
    Bien à vous,
    Ilies

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2023
    Messages : 5
    Par défaut
    Je pense qu'il y a une erreur d'indice au niveau de cette ligne : ReDim Preserve Critères(1 To j, 1 To 1)
    En effet, à la ligne précédente, on initialise j=0, donc je pense que le "1 To j" pose un problème.
    Bien à vous

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Essaie comme ceci:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    Private Sub CommandButton_Click()
        Dim i as Integer
        Dim j As Integer
        Dim CheckBoxes() As MSForms.CheckBox
        Dim Critères() As Variant
        Dim PlageDonnées As Range
        Dim PlageFiltree As Range
        Dim FeuilleSource As Worksheet
        Dim FeuilleFiltree As Worksheet
     
        Set FeuilleSource = Sheets("Feuil1")
        Set FeuilleFiltree = Sheets("Feuil2")
        Set PlageFiltree = FeuilleFiltree.Range("A1")
        PlageFiltree.Cells.ClearContents
     
        'Création du tableau de critères
        j = 0
        For i = 1 To 14
            If Me.Controls("CheckBox" & i).Value = True Then
                j = j + 1
                ReDim Preserve CheckBoxes(1 To j)
                Set CheckBoxes(j) = Me.Controls("CheckBox" & i)
                ReDim Preserve Critères(1 To j, 1 To 2)
                Critères(j, 1) = FeuilleSource.Range("A1:AF1").Cells(1, i).Value
                Critères(j, 2) = "X"
            End If
        Next i
     
        'Filtrage des données avec une logique "Ou inclusif"
        Set PlageDonnées = FeuilleSource.Range("A1:AF" & FeuilleSource.Cells(Rows.Count, 1).End(xlUp).Row)
        PlageDonnées.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Critères, CopyToRange:=PlageFiltree
     
        'Suppression des filtres
        PlageDonnées.AutoFilter
     
        Unload Me
    End Sub

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2023
    Messages : 5
    Par défaut
    Re-
    Encore merci beaucoup pour votre aide.
    Je viens de modifier le code, une erreur d'indice est présente à cette ligne : ReDim Preserve Critères(1 To j, 1 To 2)
    Bien à vous

Discussions similaires

  1. [XL-2010] Validation données via UserForm avec certains Textbox vides
    Par DEMERSE dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/02/2015, 11h28
  2. [XL-2010] Suppression de données via Userform
    Par toniodeb dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/10/2012, 17h05
  3. Modification et suppression dynamique de liste de données via userform
    Par raf75002 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/03/2011, 14h43
  4. Réponses: 2
    Dernier message: 25/02/2010, 14h12
  5. [XL-2003] Modification valeurs base de données via userform
    Par Kimaos dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/05/2009, 05h29

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