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 :

Supprimer les rangées quand une cellule contient "X"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 22
    Par défaut Supprimer les rangées quand une cellule contient "X"
    Bonjour,

    Je vous écris car j'ai besoin d'aide à propos d'un code vba que je tente d'élaborer. Celui-ci est très simple, il vise à parcourir deux colonnes distinctes et supprimer la ligne entière quand une cellule contient la valeur "X".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim i As Integer
    Dim LastRow As Long
        LastRow = 8000
        For i = 1 To LastRow
            If Cells(i, 82).Value = "X" Then
                Cells(i, 82).EntireRow.Delete
            ElseIf Cells(i, 97).Value = "X" Then
                Cells(i, 97).EntireRow.Delete
            End If
        Next i
    Bizarrement, le code semble fonctionner en deux temps. Je dois l'exécuter deux fois pour qu'il supprime correctement toutes les lignes où un "X" apparaît.

    Sauriez-vous m'indiquer l'erreur?

    Merci d'avance!

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Quand on veut insérer ou supprimer des lignes, il faut aller de la dernière à la première et non l'inverse, sinon on loupe des lignes.
    Essaye de réfléchir un peu à l’algorithmique et tu comprendras sans doute pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim i As Integer
        For i = Cells(Rows.Count, 82).End(xlUp).Row To 1 Step -1
            If Cells(i, 82).Value = "X" Or Cells(i, 97).Value = "X" Then Rows(i).Delete
        Next i

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 22
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Quand on veut insérer ou supprimer des lignes, il faut aller de la dernière à la première et non l'inverse, sinon on loupe des lignes.
    Essaye de réfléchir un peu à l’algorithmique et tu comprendras sans doute pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim i As Integer
        For i = Cells(Rows.Count, 82).End(xlUp).Row To 1 Step -1
            If Cells(i, 82).Value = "X" Or Cells(i, 97).Value = "X" Then Rows(i).Delete
        Next i
    Merci Menhir pour cette solution. En y réfléchissant, ça parait maintenant logique en effet!

    @Alex020181: intéressant. En effet je cherche à alléger au maximum la macro. La solution de transposer le tableau mérite d'être étudiée. Pour le moment je vais me contenter de supprimer les lignes, car j'ai des résultats financiers qui sont calculés avec l'aide d'une formule dont la plage de données est ajustée automatiquement quand on supprime les lignes. Ce ne sera pas le cas si je copie-colle une partie de ma table de données. Mais je vais garder ça dans un coin de ma tête.

    Merci en tout cas pour votre aide

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Autre solution, en filtrant les colonnes 82 et 97 à tour de rôle et supprimer toutes les lignes contenant un X
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Application.ScreenUpdating = False
        DerLig = 1000
        DerCol = 100
        On Error Resume Next
        ActiveSheet.AutoFilterMode = False
        Rows(1).AutoFilter
        ActiveSheet.Range(Cells(1, "A"), Cells(DerLig, DerCol)).AutoFilter Field:=82, Criteria1:="X"
        ActiveSheet.Rows("2:" & DerLig).SpecialCells(xlCellTypeVisible).Delete
        Worksheets("Feuil1").ShowAllData
        ActiveSheet.Range(Cells(1, "A"), Cells(DerLig, DerCol)).AutoFilter Field:=97, Criteria1:="X"
        ActiveSheet.Rows("2:" & DerLig).SpecialCells(xlCellTypeVisible).Delete
        ActiveSheet.AutoFilterMode = False
    Remplacez DerLig, DerCol et Feuil1, par les vraies valeurs

    Cdlt

  5. #5
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Bonjour,

    D'accord avec la solution de Menhir; pour parcourir les lignes d'une liste et supprimer des lignes il faut partir du bas sinon comme les lignes se retrouvent renumérotées après une suppression ET qu'en même temps ton index augmente alors tu te retrouves avec une ligne (celle juste en dessous ta suppression) non analysée.

    Par contre quand Excel supprime des lignes cela lui prend du temps. Je te conseille donc de parcourir ta feuille de haut en bas en enregistrant tes valeurs dans un tableau si la ligne ne contient pas de "X" puis d'effacer les valeurs de ta feuille (avec clear) et de transposer le tableau des lignes récupérées. Le résultat utilisateur sera le même mais le temps de traitement est nettement amélioré.

    L'une comme l'autre arrive au même résultat. A toi de voir si le temps de traitement te convient.

Discussions similaires

  1. [XL-2010] Supprimer les lignes dont la cellule contient un mot
    Par kikoo777 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/09/2018, 18h30
  2. Supprimer les zéros dans une cellule
    Par Alice78 dans le forum Excel
    Réponses: 1
    Dernier message: 03/07/2018, 12h56
  3. Supprimer les boutons d'une cellule
    Par tenebriox dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/08/2010, 20h26
  4. Réponses: 11
    Dernier message: 23/07/2010, 12h16
  5. Macro pour supprimer les lettres d'une cellule?
    Par LittleSun dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/01/2010, 20h56

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