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 :

Filtrer des données selon un certain critère


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Filtrer des données selon un certain critère
    Bonjour, je me suis inscrit ici car j'ai du mal à trouver une information claire sur la manipulation suivante :

    Filtrer des données en ne conservant qu'une ligne sur deux, ou sur trois, ou sur quatre, etc. (l'utilisateur peut choisir) ;

    Par exemple si j'ai une colonne remplie de données aléatoires, et que je définis le chiffre 4 dans ma macro, je veux pouvoir garder la première ligne, supprimer les 3 suivantes, garder la 4ème, supprimer les 3 suivantes...

    Cela semble simple mais pour un utilisateur novice de VBA cela pose quelques difficultés....

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur

    Bonjour,
    Il y a plusieurs manières d'y arriver.
    Pour ma part, j'utilise la méthode AdvancedFilter de l'objet Range en utilisant le critère calculé qui a l'avantage de permettre une plus grande souplesse pour les développement futurs en modifiant simplement le critère suivant mes besoins.
    Le critère calculé si le filtre devait être effectué manuellement pour une suppression toutes les quatre lignes
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    =MOD(LIGNE(A2)-1;4)=0

    Procédure VBA
    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
    Sub DeleteRowsByAdvancedFilter()
     ' Déclaration des variables
     Const myFormula As String = "=MOD(ROW(A2)-1,4)=0"  ' La formule qui sera insérée dans la zone des critères 
     Dim areaData As Range, areaCriteria As Range
     ' Assignation des variables objets
      Set areaData = ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion ' Zone des données
      With areaData
       Set areaCriteria = areaData.Offset(ColumnOffset:=.Columns.Count+1).Resize(2, 1) ' Zone des critères 2 colonnes à droite de la zone des données
      End With
     ' Placement des critères (Etiquettes de colonne + critère calculé)
     areaCriteria(1) = "_fn_": areaCriteria(2).Formula = myFormula
     ' Filtrer les données
     areaData.AdvancedFilter xlFilterInPlace, areaCriteria
     ' Suppression des lignes filtrées (C'est à dire visibles) sans la première ligne
     With areaData
     .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
     .Worksheet.ShowAllData ' Supprime le filtre
     End With
     areaCriteria.Clear
     Set areaData = Nothing: Set areaCriteria = Nothing
    End Sub


    Tutoriel sur Les filtres avancés ou élaborés dans Excel

    Comme il est toujours dangereux de supprimer des données sans avoir une copie des données, je te conseille de prévoir une feuille à cet effet afin de repartir de celui-ci pour d'autres tests.

    Petite procédure de backup qui se trouve dans le module de la feuille où se trouve les données et qui est lancée depuis un bouton ActiveX présent sur la feuille.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub cmdRun_Click()
     If MsgBox("Voulez-vous repartir du backup ?", vbExclamation + vbYesNo + vbDefaultButton2, "Exercice 1") = vbYes Then
      Me.Cells.Clear ' Suppression des cellules de la feuille
      shtBackUp.Range("A1").CurrentRegion.Copy Me.Range("A1")
     End If
    End Sub


    J'utilise la propriété CodeName de la feuille contenant la copie (shtBackUp) et Me est la feuille où se trouve le code soit la feuille des données.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  3. #3
    Nouveau Candidat au Club
    Merci pour cette réponse élaborée et précise, même si dans l'immédiat, étant novice, tout cela me parait un peu compliqué...mais j'étudierai ça en détail ^^
    Par contre, pour ce qui est du backup, je ne sais pas ce que signifie exactement ce concept, les définitions sont assez vagues sur le net...de quoi s'agit-il sur VBA ? Cela permet-il de ré-intialiser les données telles qu'elles étaient avant l'utilisation de la macro ?

  4. #4
    Rédacteur

    Bonjour,
    Merci pour cette réponse élaborée et précise, même si dans l'immédiat, étant novice, tout cela me parait un peu compliqué...mais j'étudierai ça en détail
    Une discussion très proche de ta demande dont le sujet est Exporter des valeurs à partir d'un tableau de données a reçu comme réponse une solution satisfaisante et peut-être plus simple à comprendre.
    Par contre, pour ce qui est du backup, je ne sais pas ce que signifie exactement ce concept, les définitions sont assez vagues sur le net...de quoi s'agit-il sur VBA ? Cela permet-il de ré-intialiser les données telles qu'elles étaient avant l'utilisation de la macro ?
    Il s'agit tout simplement d'une feuille contenant la copie exacte de la liste de données de départ et qui permet après avoir testé la procédure VBA de repartir éventuellement de la liste de base afin de pouvoir refaire un test dans les mêmes conditions.

    Tu trouveras en fichier joint le classeur contenant la procédure BAck-Up plus la procédure supprimant lles lignes après filtre qui te permettra, je l'espère, de mieux comprendre mon explication.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

###raw>template_hook.ano_emploi###