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 :

Filtrer des données selon un certain critère


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut 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
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 943
    Points : 28 942
    Points
    28 942
    Billets dans le blog
    53
    Par défaut
    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
    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.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    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
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 943
    Points : 28 942
    Points
    28 942
    Billets dans le blog
    53
    Par défaut
    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.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [AC-2003] Aggréger des données selon plusieurs critères
    Par Mas_Carpone dans le forum Access
    Réponses: 4
    Dernier message: 30/04/2010, 17h14
  2. [9][logiciel]Restriction des données selon une période
    Par hondavtec77 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 14/09/2007, 11h42
  3. Filtrer des données
    Par nes100 dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/05/2006, 14h53
  4. Convertir des données selon un charset defini
    Par localhost dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2006, 12h16
  5. Réponses: 44
    Dernier message: 19/10/2005, 10h54

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