Supression de lignes selon condition

Résolu
Leghe -  
 Leghe -
Bonjour,

Dans un fichier d'export de stock, je voudrais supprimer les lignes dont la catégorie (colonne L) est "PAS DE VPC"

Voici mon code qui ne fonctionne pas (rien n'est fait...) :

Sub Macro1()
Dim I As Long
Dim CATEGORIE As Range
Set CATEGORIE = Range("L2:L" & Range("L2").End(xlDown).Row)
For I = CATEGORIE.Cells.Count To 1 Step -1
If UCase(CATEGORIE.Cells(I).Value) Like "PAS DE VPC" Then
CATEGORIE.Cells(I).EntireRow.Delete
End If
Next
End Sub


Pourquoi ?
Merci !

4 réponses

  1. Leghe
     
    Merci pour votre réponse.
    Ca me donne une erreur 1004 à cet endroit-là :
    If UCase(Cells(lig, 12)) = "PAS DE VPC" Then
    0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, as-tu essayé d'exécuter ta macro pas à pas? c'est souvent très éclairant!
    https://www.commentcamarche.net/contents/1381-debogage
    0
  3. rené
     
    @Leghe

    Rebonjour,

    Tu as dû avoir cette erreur 1004 car j'avais fait une petite erreur ;
    essaye maintenant avec ce nouveau code :

    
    Option Explicit
    
    Sub Macro1()
      Dim dlig As Long, lig As Long
      dlig = Range("L" & Rows.Count).End(xlUp).Row
      For lig = dlig To 2 Step -1
        If UCase(Cells(lig, 12)) = "PAS DE VPC" Then Rows(lig).Delete
      Next lig
    End Sub
    
    

    dlig : dernière ligne de ton tableau ; 1ère ligne : la ligne 2 ;
    Cells(lig, 12) : 12 => colonne L ; lignes lig : dlig à 2

    J'ai vérifié que UCase([L5]) marche même si [L5] est vide :
    c'est le cas, ça passe sans provoquer d'erreur.

    En principe, il ne devrait plus y avoir d'erreur 1004 !
    Si elle se reproduit quand même, essaye avec :

        If UCase(Cells(lig, 12).Value) = "PAS DE VPC" Then Rows(lig).Delete
    

    À te lire pour avoir ton avis.

    --------------------------------------

    Par rapport à mon précédent message (que j'ai supprimé),
    j'ai laissé la suite du texte inchangée.

    Si ta catégorie en colonne L peut être "PAS DE VPC" sans rien après,
    inutile d'utiliser Like !

    Si tu as des cellules qui commencent par "pas de vpc", donc avec
    une suite, tel que : "pas de vpc de type 1", alors oui, là tu dois
    utiliser Like, et la ligne #8 devient :

        If UCase(Cells(lig, 12)) Like "PAS DE VPC*" Then Rows(lig).Delete
    

    N'oublie pas le caractère " * " : c'est un caractère joker qui signifie
    « tous les caractères ».

    Si des caractères peuvent aussi être devant "pas de vpc" :

        If UCase(Cells(lig, 12)) Like "*PAS DE VPC*" Then Rows(lig).Delete
    

    Merci de me dire si ça te convient.
     
    0
  4. Leghe
     
    Bonjour René,

    Votre code fonctionne à merveille, je passe le sujet en résolu.

    Grand merci !
    0