1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Production
    Inscrit en
    août 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Production
    Secteur : Industrie

    Informations forums :
    Inscription : août 2017
    Messages : 12
    Points : 5
    Points
    5

    Par défaut Supprimer une ligne entière suivant plusieurs critères

    Bonjour à tous!

    Comme dit dans le titre, je souhaite supprimer une ligne entière suivant plusieurs critères via VBA.

    En fait j'ai fait quelques recherches et j'ai cru trouver une solution qui m'allait bien mais elle ne fonctionne pas:

    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
    Dim nbligne As Long
    nbligne = Range("A1").CurrentRegion.Rows.Count
    For i = nbligne To 1 Step -1
     
    If Cells(i, 3).Value = ListeOperations.Value And Cells(i, 11).Value = CapteurFini1.Value Then
    Selection.EntireRow.Delete
     
    ElseIf CapteurFini2.Value <> "" And Cells(i, 3).Value = ListeOperations.Value And Cells(i, 11).Value = CapteurFini2.Value Then
    Selection.EntireRow.Delete
     
    ElseIf CapteurFini3.Value <> "" And Cells(i, 3).Value = ListeOperations.Value And Cells(i, 11).Value = CapteurFini3.Value Then
    Selection.EntireRow.Delete
     
    ElseIf CapteurFini4.Value <> "" And Cells(i, 3).Value = ListeOperations.Value And Cells(i, 11).Value = CapteurFini4.Value Then
    Selection.EntireRow.Delete
    End If
    Next i
    Ce code me permet, lorsque le code qui suit m'ajoute 1, 2, 3 ou 4 lignes de vérifier théoriquement si une ligne avec certains critères n'existe pas et de la supprimer si c'est le cas.

    Sauf que ce code ne me supprime pas la ligne lorsque je l'exécute. Quelqu'un aurait une idée d'où j'aurais fait une erreur?

    Merci d'avance


    Edit: je viens d'ailleurs de me rendre compte en me relisant que si je mon premier If supprime bien une ligne, les autres ne seront pas traités, il faudra que je revois ça ensuite pour que les 4 cas soient bien traités séquentiellement.

  2. #2
    Rédacteur

    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    7 588
    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 : 7 588
    Points : 17 757
    Points
    17 757
    Billets dans le blog
    6

    Par défaut

    Bonjour,
    je viens d'ailleurs de me rendre compte en me relisant que si je mon premier If supprime bien une ligne, les autres ne seront pas traités, il faudra que je revois ça ensuite pour que les 4 cas soient bien traités séquentiellement.
    Cela me semble normal si l'un des critères est VRAI la ligne est supprimée et il n'y a donc plus de moyen de vérifier les autres critères et cela est parfaitement inutile.

    Une autre option : Supprimer des lignes suivant critères avec la méthode AdvancedFilter
    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
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Production
    Inscrit en
    août 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Production
    Secteur : Industrie

    Informations forums :
    Inscription : août 2017
    Messages : 12
    Points : 5
    Points
    5

    Par défaut

    Merci Philippe, je regarde ça tout de suite!

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Production
    Inscrit en
    août 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Production
    Secteur : Industrie

    Informations forums :
    Inscription : août 2017
    Messages : 12
    Points : 5
    Points
    5

    Par défaut

    N'étant pas un crack en VBA, je dois avouer que je n'ai pas trouvé comment l'utiliser, s'il faut d'abord copier le code de la fonction dans mon userform pour ensuite l'appeler ou non mais je n'ai pas réussi à avoir un résultat :/

  5. #5
    Rédacteur

    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    7 588
    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 : 7 588
    Points : 17 757
    Points
    17 757
    Billets dans le blog
    6

    Par défaut

    Bonjour,
    N'étant pas un crack en VBA, je dois avouer que je n'ai pas trouver comment l'utiliser, s'il faut d'abord copier le code de la fonction dans mon userform pour ensuite l'appeler ou non mais je n'ai pas réussi à avoir un résultat
    Oui, il suffit d'utiliser cette procédure soit directement dans le UserForm soit placé dans un module standard. Il suffit simplement d'appeler cette procédure en lui passant les arguments areaData et FormulaCriteria.
    Tout est commenté dans la procédure et un classeur exemple à télécharger. Un lien renvoie à un tutoriel qui explique ce que c'est que le filtre avancé d'excel

    Que peut on faire de plus ?

    Tu peux aussi lire ce billet Ecrire une formule dans Excel à l'aide d'une procédure VBA pour comprendre comment passer la formule à l'argument FormulaCriteria

    [EDIT]

    Quelques exemples pour supprimer des lignes avec la procédure nommée DeleteRowsByAdvancedFilter, voir Supprimer des lignes suivant critères avec la méthode AdvancedFilter

    Voir la liste de données en image ci-dessous

    Exemple 1 : Supprimer les lignes dont la catégorie (colonne E contient la lettre E)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub TestDeleteRowsByAdvancedFilter()
      Dim rng As Range ' Plage de cellules
      Set rng = ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
      DeleteRowsByAdvancedFilter rng, "=E2=""E"""
      Set rng = Nothing
    End Sub
    Exemple 2 : Supprimer les lignes dont la catégorie (colonne E contient la lettre E ou la lettre D)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub TestDeleteRowsByAdvancedFilter()
      Dim rng As Range ' Plage de cellules
      Set rng = ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
      DeleteRowsByAdvancedFilter rng, "=OR(E2=""E"",E2=""D"")"
      Set rng = Nothing
    End Sub
    Exemple 3 : Supprimer les lignes dont l'année (date en colonne F) est égale à 2008 et dont le salaire (colonne G) est supérieur à 2000)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub TestDeleteRowsByAdvancedFilter()
      Dim rng As Range ' Plage de cellules
      Set rng = ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
      DeleteRowsByAdvancedFilter rng, "=AND(YEAR(F2)=2008,G2>2000)"
      Set rng = Nothing
    End Sub
    Nom : 170915 dvp Suppression de lignes suivant critères.png
Affichages : 14
Taille : 50,9 Ko
    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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Production
    Inscrit en
    août 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Production
    Secteur : Industrie

    Informations forums :
    Inscription : août 2017
    Messages : 12
    Points : 5
    Points
    5

    Par défaut

    Merci Philippe pour cette réponse complète et rapide. Je vais l'étudier avec toute ma compréhension de VBA pour pouvoir résoudre mon problème.
    (je viens de relire ma précédente réponse "trouver" comment l'utiliser n'est vraiment le mot car ce tuto est explicite, c'est plutôt un un problème de compréhension de ma part face à ma maîtrise relative de VBA)

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/06/2016, 18h48
  2. Supprimer une ligne entière avec condition?!
    Par ChicoXavier dans le forum Général Python
    Réponses: 2
    Dernier message: 08/04/2013, 20h53
  3. Supprimer une ligne entière dans un fichier
    Par divad dans le forum Fonctions
    Réponses: 4
    Dernier message: 22/07/2010, 23h42
  4. Réponses: 2
    Dernier message: 10/12/2009, 18h05
  5. Supprimer une ligne ! Feuille a plusieurs onglets
    Par Danae123 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/07/2007, 11h55

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