Supprimer lignes du dessus tant que la valeur de cellule est identique

salut,

Dans le fichier ci-joint, j'ai un tableau que j'aimerais simplifier à partir de la colonne G.

En colonne G, il y a toute une liste de cellules, avec beaucoup de répétitions (de valeurs identiques). J'aimerais pouvoir garder, dans cette colonne G, chacune des lignes où il y a un changement de valeur.

J'ai mis un exemple du résultat attendu sur le fichier ci-joint. J'ai exploré la piste des doublons mais ce n'est pas ça...

Merci pour votre aide

25classeur1.zip (1.26 Mo)

Bonjour

J'ai mis un exemple du résultat attendu sur le fichier ci-joint. J'ai exploré la piste des doublons mais ce n'est pas ça...

A la lecture de votre demande, cela me parait juste une question de doublons. Expliquez ce qui ne vous convient pas dans ce cas

si je fais supprimer les doublons, je vais logiquement me retrouver avec des références uniques dans la colonne G.

Or, ce que je souhaiterais, c'est conserver l'enchainement des valeurs en colonne G...J'ai en effet des valeurs qui se répètent sur 10/15/20 lignes et au lieu qu'elles se répètent, je souhaite ne garder qu'une seule ligne de ces valeurs. En gros, les ramer à 1 seule ligne.

Par exemple, sur l'image ci-dessous, j'ai supprimé à la main les lignes, pour ne garder que les lignes avec les valeurs rouge. Cela me donne un enchainement de valeurs 2G#/2F/2F#.... que je peux traiter ensuite.

Si j'étais passé par "supprimer les doublons", je n'aurais, par exemple, pas eu 2 lignes avec pour valeur "3F", mais seulement une seule ligne avec la valeur "3F". Et cela aurait faussé mon enchainement de valeurs...

Est-ce que ca vous aide?

2022 06 07 19h41 40

Un exemple plus simple : j'aimerais ne garder que les lignes où j'ai surligné en bleu, et effacer les lignes que j'ai colorié en orange.

2022 06 07 20h59 01
14classeur1.zip (1.28 Mo)
2022 06 08 09h15 01

J'ai trouvé une piste en créant une colonne M dans laquelle j'insère une formule qui teste la cellule supérieure, à savoir est ce que son contenu est identique (VRAI) ou est-ce que le contenu change (FAUX). Ensuite je copie/colle le Text Brut en colonne N.

Une fois ce test effectué, j'utilise une macro trouvé sur ce site, pour supprimer les lignes qui contiennent le mot VRAI en colonne N.

Mais ca tourne en boucle...

Est-ce dû au nombre de lignes à traiter (12000)? merci pour vos idées...

Sub DeleteRows()
'Updateby20211217
Dim rng As Range
Dim InputRng As Range
Dim DeleteRng As Range
Dim DeleteStr As String
Dim xTitleId As String
Dim xArr
Dim xF As Integer
Dim xWSh As Worksheet
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set rng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, rng.Address, Type:=8)
If InputRng Is Nothing Then Exit Sub
DeleteStr = Application.InputBox("Delete Text", xTitleId, Type:=2)
Set xWSh = InputRng.Worksheet
For Each rng In InputRng
    If rng.Value = DeleteStr Then
        If DeleteRng Is Nothing Then
            Set DeleteRng = rng
        Else
            Set DeleteRng = Application.Union(DeleteRng, rng)
            Set DeleteRng = DeleteRng.EntireRow
        End If
    End If
Next
xArr = Split(DeleteRng.AddressLocal, ",")
DeleteRng.Select
DeleteRng.Delete
For xF = UBound(xArr) To 0 Step -1
    Set DeleteRng = xWSh.Range(xArr(xF))
    DeleteRng.Delete
Next
End Sub

Re

En fait dans votre explication --> https://forum.excel-pratique.com/s/goto/1071336, vous voulez supprimer les valeurs identiques qui se suivent ?
Exemple : 3 valeurs de 3F qui se suivent on n'en garde qu'une mais si vous avez 3A puis 3F, on garde les deux valeurs

si oui, essayez ce code

Sub test()
Dim plage As Range
Dim i As Long, dlig As Long
Dim plig As Byte

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

With ActiveSheet.ListObjects("Tableau1")
    plig = .HeaderRowRange.Row + 1
    dlig = .DataBodyRange.Rows.Count + .HeaderRowRange.Row - 1

    For i = dlig To plig Step -1
        If .DataBodyRange.Item(i - 1, 6) = .DataBodyRange.Item(i, 6) Then
            If plage Is Nothing Then
                Set plage = .ListRows(i).Range
            Else: Set plage = Application.Union(plage, .ListRows(i).Range)
            End If
        End If
    Next i
End With

plage.Delete

With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
End With
End Sub

Si ok -->

Cordialement

@Dan: oui c'est cela

merci! ca fonctionne très bien

Rechercher des sujets similaires à "supprimer lignes dessus tant que valeur identique"