Supression de lignes selon condition

Résolu/Fermé
Leghe - 13 juin 2017 à 18:15
 Leghe - 14 juin 2017 à 11:43
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

Merci pour votre réponse.
Ca me donne une erreur 1004 à cet endroit-là :
If UCase(Cells(lig, 12)) = "PAS DE VPC" Then
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
13 juin 2017 à 19:16
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
@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
Bonjour René,

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

Grand merci !
0