Code VBA ou macro pour supprimer lignes doublantes en gardant l'original

Bonjour,

J'ai un tableau contient des lignes redoublons et je voulais supprimer les redoublons en gardant la ligne redoublante en bas du tableau. exemple:

05/10/2021 nom 0 poste 0
05/10/2021 nom 1 poste 1
05/10/2021 nom 2 poste 2
05/10/2021 nom 3 poste 3

Résultat:

05/10/2021 nom 3 poste 3

Merci d' avance!

C'est possible, mais je suis peu près certain qu'il va y avoir une 2e question après la 1re. Le mieux serait de proposer le fichier rendu anonyme sur lequel tu veux opérer.

Bonjour à tous,

Surtout quand on post un sujet en doublon avec une description incomplète et une réponse qui ne laisse aucune possibilité de résolution.

Vous devriez porter une attention toute particulière à la signature d'Optimix.

Cdlt,

Ergotamine la réponse que t as proposé je la connais et malheureusement c'est pas ce que je cherche!!

Merci!

Merci bcp Optimix pour votre effort!

Peut être j ai mal expliqué mon besoin, le problème principal c'est que j'ai un bouton archive et chaque fois que je clique il me donne une copie supplémentaire avec la même date et je voulais garder juste la dernière copie archivée et pas besoin d'autres archivé avant.

Je joins un fichier exemple pour comprendre mieux mon problème!

Merci d'avance!

6copie-de-test1.zip (151.51 Ko)

Bonjour à tous,

La propriété Item du dictionnaire fait ce que tu demandes, puisque la donnée suivante écrasera la donnée précédente.

For i = 1 To UBound(a, 1)
      dico.Item(a(i, 1)) = Array(a(i, 1), a(i, 2), a(i, 3))
Next

Puis tu restitues les items du dictionnaire, une ligne de code suffit.

klin89

Merci Klin89 pour votre réponse !

Pouvez-vous vous me composer le code correctement dans le fichier que j'ai mis en pièces jointes (dans la discussion en haut) SVP car je sais comment le faire!

je voulais juste préciser on écrase les données si est seulement si la date est identique.

Merci bcp!

Alors je t'explique deux choses :
1 - il n'est pas nécessaire d'ouvrir 3 fils pour le même pb, ce que tu as fait avec : "Archiver les données de la feuille dans une autre feuille sans bouton macro", "Lignes avec des dates identiques comment garder juste une" et "Code VBA ou macro pour supprimer lignes doublantes en gardant l'original".
2 - Si je n'ai pas corrigé la macro que je t'ai faite, c'est parce que je n'ai jamais compris ce que tu voulais faire exactement. Alors la meilleure façon de procéder est de nous donner un exemple avec ce que tu veux voir lorsqu'on fait plusieurs historiques le même jour : à gauche la copie brute et à droite la même avec les lignes à effacer comme ci-joint. Rien ne vaut une présentation "Avant"..."Après".

8test1.xlsm (166.61 Ko)

Dans la colonne de droite toutes les lignes (en jaune) sont en doublon, sauf la 2e où le tracteur et le secteur ont été modifiés.
Question (la dernière pour moi) : est-ce qu'il faut n'ajouter que cette 2e ligne ou remplacer toutes les lignes du 09/04 par les nouvelles ?

Bonjour Optimix,

c'est bien noté merci!

Je voudrais mieux chaque fois que je clique sur le bouton, l'ancienne copie archivée des lignes soit écrasée et les remplacer par les nouvelles lignes à archiver même s'il y a pas des modifications, dans le pire des cas l'essentiel de ne pas avoir 2 copies avec même date.

Merci d'avance!

Optimix avez vous une réponse à ma question en haut?

Merci!

Je résume : si on a déjà effectué une sauvegarde pour le 13 avril et qu'on veut, le même jour (pas le lendemain ou plus tard), annuler cette sauvegarde pour en mettre une autre, on détruit les enregistrements du 13 et on copie les nouveaux à leur place. Si ce n'est que ça, c'est possible.
PS : pas de MP pour cela, je ne les lis jamais ; de plus, ça intéresse tout le monde.

Bonjour Optimix,

Ce que vous dites c'est exactement ce que je cherche!

Voici mon fichier en pièce jointe.

Merci!

8copie-de-test1.zip (151.51 Ko)
Sub Archiver()
    Dim i As Integer
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim nL1 As Long, nL2 As Long

    Set ws1 = Sheets("Feuille1")
    Set ws2 = Sheets("Archive")
    nL1 = ws1.Cells(Columns.Count, 3).End(xlUp).Row
    nL2 = ws2.Cells(Columns.Count, 3).End(xlUp).Row

    ' Si la dernière date saisie n'est pas celle du jour on supprime l'historique et on le remplace
    If ws2.Range("A" & nL2) = Date Then
        choix = MsgBox("L'historique a déjà été saisi pour aujourd'hui. Confirmez-vous l'effacement de l'enregistrement précédent ?", vbYesNoCancel, "Historique")
        If choix = vbCancel Or choix = vbNo Then Exit Sub

        ' On supprime les enregistrement à la date d'aujourd'hui
        ws2.Activate
        For i = nL2 To 1 Step -1
            If ws2.Cells(i, 1) = Date Then ws2.Rows(i).EntireRow.Delete
        Next i
        nL2 = ws2.Cells(Columns.Count, 3).End(xlUp).Row
    End If

    ' On enregistre l'historique du jour à la suite
    ws1.Activate
    ws1.Range("B5:H" & nL1).Select
    Selection.Copy
    ws2.Range("B" & nL2 + 1).PasteSpecial xlPasteValues
    ' et on entre la date d'aujourd'hui
    For i = nL2 + 1 To nL2 + nL1 - 4
        ws2.Cells(i, 1) = Date
    Next i
    Application.CutCopyMode = True
    ws1.Range("C2").Select
End Sub

J'ai ajouté la macro "Vider" pour vider la feuille de saisie de son contenu.

Sub Vider()
    Dim ws1 As Worksheet, nL1 As Long

    Set ws1 = Sheets("Feuille1")
    nL1 = ws1.Cells(Columns.Count, 2).End(xlUp).Row

    ' On vide la feuille de saisie
    ws1.Range("A5:H" & nL1).Select
    Selection.ClearContents
    ws1.Application.CutCopyMode = False
    ws1.Range("C2").Select
End Sub

Bonjour Optimix,

Merci bcp pour votre effort c'est génial ce que vous avez fait! juste une dernière précision est ce que la feuille active va me garder l'historique par jour car je voulais si ce n'est pas la date de jour il fait un enregistrement à partir de la ligne vide en bas de l'archive et ainsi de suite.

Merci d'avance!

Dans ce développement, toutes les difficultés rencontrées depuis le début viennent de ce que je ne comprends pas le sens de vos questions.
Faites des tests, c'est la seule façon de vous assurer que tout fonctionne comme vous le voulez.

Merci beaucoup Optimix il fallait attendre le lendemain pour s'assurer le bon fonctionnement de votre code!

Merci infiniment!!

Rechercher des sujets similaires à "code vba macro supprimer lignes doublantes gardant original"