Suppression lignes selon critere

salut a vous tous les experts

Sub suppression_des_lignes()
For x = 4 To 7
Sheets(x).Activate

For I = Range("G120").End(xlUp).Row To 2 Step -1
If Cells(I, 1) = "VRAI" Then Range("a(i):g(i)").Select
Selection.Delete
Next I
Next x
End Sub

ca ne marche pas

votre avis svp et merci d'avance

Bonjour,

Sans tester, à première vue :

Sub suppression_des_lignes()
For x = 4 To 7
    Worksheets(x).Activate
    For I = Worksheets(x).Range("G120").End(xlUp).Row To 2 Step -1
        If Worksheets(x).Cells(I, 1) = "Vrai" Then Worksheets(x).Cells(I, 1).EntireRow.Delete
    Next I
Next x
End Sub

Je ne sais même pas si le Worksheets(x).Activate est nécessaire.

Cdlt,

PS : Penser à utiliser le balisage de code pour les rendre plus lisibles sur le forum

merci Ergotamine pour votre interet

ce code supprimera la ligne entiere je pence alors que le but est de supprimer juste la plage (a(i):g(i))

Bonjour,

Dans ce cas, si on ne souhaite pas toucher à droite de la colonne G, j'ai revu votre code, commenté pour que vous compreniez votre erreur. En effet on ne peut définir une Range comme vous le faites. C'est soit .Range("A" & i & ":G" & i) soit la formulation avec les cells que j'ai utilisé dans le code ci-contre :

Sub suppression_des_lignes()
For x = 4 To 7
    With Worksheets(x) 'Avec la feuille placée à la position X
        For I = .Cells(.Rows.Count, 7).End(xlUp).Row To 2 Step -1 'De la dernière ligne de la colonne G à la ligne 2
            If .Cells(I, 1) = "Vrai" Then .Range(.Cells(I, 1), .Cells(I, 7)).Delete xlUp 'Si la cellule ligne L colonne 1 = VRAI alors supprime la plage A:G de la ligne L en remontant les données vers le gaut
        Next I 'Ligne précédente
    End With
Next x
End Sub

Cdlt,

PS : Après test pas besoin d'activer la feuille pour supprimer les lignes. Ca permet d’accélérer l’exécution du code.

Edit : On pourrait aussi utiliser la méthode resize de l'objet .cells à la place du Range c'est à dire .Cells(I, 1).Resize(1, 8)

Salut le fil...

Juste une petite modification sur le code de Ergotamine : If Worksheets(x).Cells(i, 1) = "Vrai" Then Worksheets(x).Range("A" & i,":G" & i).ClearContents

Et cela devrait être bon, évites les .Activate et les .Select qui ne font que ralentir ton code

Ce qui nous donne :

Sub suppression_des_lignes()
Dim i As Long, x As Byte

For x = 4 To 7
    'Worksheets(x).Activate
    For i = Worksheets(x).Range("G120").End(xlUp).Row To 2 Step -1
        If Worksheets(x).Cells(i, 1) = "Vrai" Then Worksheets(x).Range("A" & i & ":G" & i).ClearContents
    Next i
Next x
End Sub

Merci a vous

mais malheureusement aucun codes ne supprime les données

merci les experts

Bonjour,

Ce n'est pas possible. Mon code testé supprime les lignes en décalant vers le haut, celle de Jean-Paul efface le contenu des cellules.

Merci de fournir un fichier test avec les données initiales et le résultat attendu, car on ne sait toujours pas si vous souhaitez supprimer les cellules ou effacer les données.

Cdlt,

Bonjour,

Si le VRAI ne se trouve pas en colonne G et non A ET que ce sont les feuilles qui sont nommées 4 à 7 mais qu'on interroge leur position alors oui ça ne peut fonctionner. Sur ce principe j'ai repris l'idée de Jean-Paul et procède à un effacement des données plus qu'une suppression des cellules :

Sub suppression_des_lignes()
For x = 4 To 7
    With Worksheets("FEUIL" & x) 'Avec la feuille nommée FEUIL & x
        For i = .Cells(.Rows.Count, 7).End(xlUp).Row To 2 Step -1 'De la dernière ligne de la colonne G à la ligne 2
            If .Cells(i, 7) = "Vrai" Then .Range(.Cells(i, 1), .Cells(i, 7)).ClearContents 'Si la cellule ligne L colonne G = VRAI alors nettoie la plage A:G de la ligne L
        Next i 'Ligne précédente
    End With
Next x
End Sub

Cdlt,

PS : Pas certain que d'utiliser des checkbox dans votre cas soit une bonne solution, autant placer un "X" dans une cellule ça fera le même effet, en plus léger pour le fichier.

ca ne marche toujours pas mais je pense que c'est du a un problème de mon excel 2019

merci a vous les experts

Bonjour,

Cela fait 3 fois que vous dites "ça ne marche pas/ça ne fonctionne pas" sans préciser qu'est ce qui ne fonctionne pas, sans nous donner de résultat attendu, sans nous donner d'indications supplémentaires, pas de références données, de capture d'écran malgré mes demandes. Chez moi, les données de chaque ligne de la plage A à G dont la valeur à l'intersection colonne G/ligne L contenant VRAI de chaque feuilles sont bien effacées, la valeur de la colonne G transformée en FAUX et la checkbox correspondante décochée.

Je n'irai pas plus à la pêche aux informations dans le brouillard sans que cela vienne de vous désolé.

Bonne continuation et bon courage.

Cdlt,

Salut le fil...

Bon j'ai ouvert le fichier que tu as donné, c'est pire que la base de registre de Windows, il est nul besoin de faire un Module par Procédure. De plus je n'ai trouvé trace d'un code pour effacer tes plages...

En regardant ton fichier j'ai pu constater que les cellules de la colonne G sont liées avec des CheckBox donc il faut plutôt utiliser True que "VRAI", VBA parle anglais.

C'est aussi le foutoir dans le nom de tes feuilles J'ai donc créé un Array, Moi j'ai testé et tout fonctionne sur mon PC. Il ne reste qu'a changer .Range("G120").End(xlUp).Row par un autre code beaucoup de sujet traite du .End(xlUp)

Le code définitif :

Sub suppression_des_lignes()
Dim i As Long, sh As Variant
i = 0

    For Each sh In Array("Feuil4", "Feuil5", "Feuil6", "Feuil7")
        With Worksheets(sh)
            For i = .Range("G120").End(xlUp).Row To 2 Step -1
                If .Range("G" & i).Value = True Then .Range("A" & i & ":G" & i).ClearContents
            Next i
        End With
    Next sh
End Sub

Ergotamine et Jean-Paul

Merci infiniment a vous les experts pour l'intérêt et le temps que vous avez donner a mon problème

votre code marche a la perfection Jean-Paul

merci beaucoup

Rechercher des sujets similaires à "suppression lignes critere"