suprimer ligne au dessus

greg954

XLDnaute Junior
Bonjour,
Je cherche à écrire une macro qui recherche le mot doublon dans une colonne et supprime la ligne au dessus.
la macro suivante m'efface toutes les lignes au dessus du mot "doublon"!!!
VB:
Dim i As Integer
With ThisWorkbook.Sheets("Feuil1")
'Précisez le nom de votre feuille
            For i = .Range("E" & .Rows.Count).End(xlUp).Row To 2 Step -1

                        If .Range("E" & i).Value = "Doublon" Then
                                   .Rows(i - 1).Delete
                        End If
            Next i
End With

Merci de votre aide
Greg
 

Philippe_JOCHMANS

XLDnaute Junior
Bonjour,

Rajoute cette ligne : i = i - 1 juste après .Rows(i-1).Delete

En fait quand tu supprimes la ligne au-dessus, Doublons remonte de 1, et donc dans ta boucle de Step -1 tu te retrouves avec Doublon, et donc rebelote.

En mettant cette ligne tu remontes de i, et quand tu arrives dans ton For tu remontes encore de 1, donc au-dessus du mot Doublon que tu viens de détecter.

Pour trouver ce genre de choses il faut mettre en parallèle ton code et ta feuille et parcourir ton code pas à pas (F8), tu vois le phénomène.

C'est plus facile avec deux écrans.

Philippe
 

greg954

XLDnaute Junior
Philippe,
Merci de ta réponse , j'ai bien rajouté i = i - 1 juste après .Rows(i-1).Delete mais aucun changement , ça m'efface toujours toute les lignes au dessus du premier Doublon trouvé...
VB:
Dim i As Integer
With ThisWorkbook.Sheets("Feuil1")
'Précisez le nom de votre feuille
            For i = .Range("E" & .Rows.Count).End(xlUp).Row To 2 Step -1
                        If .Range("E" & i).Value = "Doublon" Then
                                   .Rows(i - 1).Delete i = i - 1
                        End If
            Next i
End With
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Une autre proposition avec la méthode Find.Range :

VB:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim R As Range 'déclare la variable R (Recherche)
Dim POT As String 'déclare la variable POT (Première Occurrence Trouvée)
Dim LAF As Range 'déclare la variable LAF (Lignes À Effacer)

Set O = Worksheets("Feuil1") 'définit l'onglet O
Set R = O.Columns(5).Find("Doublon", O.Range("E1"), xlValues, xlWhole) 'définit la recherche R (recherche le mot "Doublon" entier dans la colonne E en partant de E1
If Not R Is Nothing Then 'condition : s'il existe au moins une occurrence trouvée
    POT = R.Address 'définit l'adresse de la première occurrence trouvée POT
    Do 'exécute
        'définit la plage LAF (la ligne au dessus de la pemière occurrence trouvée ou l'union de LAF et de la ligne au dessus pour les occurrences suivante
        If LAF Is Nothing Then Set LAF = O.Rows(R.Row - 1) Else Set LAF = Application.Union(LAF, O.Rows(R.Row - 1))
        Set R = O.Columns(5).FindNext(R) 'définit la recherche R (occurrence suivante)
    Loop While Not R Is Nothing And R.Address <> POT 'boucle tant qu'il existe de nouvelle occurrence ailleurs qu'en POT
End If 'fin de la condition
LAF.Delete 'efface la plage LAF
End Sub
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 106
Messages
2 085 352
Membres
102 871
dernier inscrit
Maïmanko