Macro suppression lignes

fif2208

XLDnaute Junior
Bonjour le forum,

Une nouvelle fois j'ai besoin de vos services.

Cette fois, c'est pour le code d'une macro qui supprimerait toutes les lignes de la colonne C ne contiennant pas la valeur "A payer".

J'ai trouvé quelques codes de macros qui parlaient un peu de ce sujet mais j'ai été incapable de les adapter à mon problème.

Je vous remercie de votre aide
 

pedrag31

XLDnaute Occasionnel
Re : Macro suppression lignes

Bonjour Fif2208, bonjour le forum,

Un essai ci dessous, qui fonctionne chez moi. La feuille s'appelle ici "Feuil1", à adapter bien-sûr! ;)
Activer les macros et placer cette macro dans un module standard.

VB:
Sub SupprimeLesLignes()

'ici on fait une boucle sur i en partant du nombre de lignes +1 en remontant jusqu'à 1 au pas de -1
For i = Worksheets("Feuil1").UsedRange.Rows.Count + 1 To 1 Step -1
    
    If Worksheets("Feuil1").Range("C" & i).Value <> "A payer" Then 'test si la cellule C de la ligne i n'est pas a payer
        Worksheets("Feuil1").Rows(i).Delete 'suppression
    End If

Next i


End Sub

Note: Dans les macros, il est nécessaire de supprimer les lignes en remontant.
Sinon en descendant, la ligne supprimée est immédiatement remplacée par celle du dessous : la ligne i+1 devient donc ligne i, ce qui compliquerait la macro si on descendait...

Note 2: On pourrait faire le test de la cellule colonne C avec la commande "Not" *** "Like" pour faire des tests plus précis.

Bonne journée :)
 

Cousinhub

XLDnaute Barbatruc
Re : Macro suppression lignes

Bonjour,

En supposant le début de ta base de données en A1, et la colonne C contenant "A payer", tu peux essayer ainsi :

Code:
Sub suppression()
Range("A1").AutoFilter Field:=3, Criteria1:="<>A payer", Operator:=xlAnd
If MsgBox("Etes vous sûr?", vbYesNo) = vbYes Then
    If Range("_FilterDataBase").SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
        Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
            Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
    End If
Else
     MsgBox "Annulé"
End If
Range("A1").AutoFilter
End Sub

bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
312 559
Messages
2 089 604
Membres
104 225
dernier inscrit
Misterpat63