[RESOLU] Macro : suppression des doublons avec une condition de date

V.MAOT

XLDnaute Nouveau
Bonjour à tous,

Votre site et son forum m'ont beaucoup aidé sur les macros, seulement, malgré mes recherches je n'arrive pas à réaliser un code en particulier. Je me permets donc de solliciter votre aide.

J'aimerais, avec l'utilisation d'un bouton, pouvoir supprimer (dans une base de données) les doublons en fonction de la date de création de la ligne.

Le fichier excel est automatisé par un formulaire, qui par macro, vient copier les données dans le tableau. Les données sont copiées à la suite et sans prendre compte des doublons.
Mon objectif est simplement de pouvoir "nettoyer" la base de données avec une ligne par Nom et ce en fonction de la date la plus récente.

Pour illustrer, j'attache une base test.

Merci encore pour votre aide!

Victor
 

Pièces jointes

  • 160222 - Macro support.xlsx
    98.3 KB · Affichages: 106
Dernière modification par un modérateur:

V.MAOT

XLDnaute Nouveau
Re : Macro : suppression des doublons avec une condition de date

Bonjour TheBenoit59,

C'est exactement ça, j'aimerais pouvoir manipuler les données individuellement et collectivement. Pour ce faire, je dois retrouver une ligne par nom.

Seulement je ne sais pas comment faire étant donné que il peut y avoir plusieurs lignes et ce à des dates différentes.
Dans l'échantillon, je souhaiterai donc trouver une ligne par nom, en fonction de la date la plus récente.

Merci beaucoup pour ta réponse.
Victor
 

thebenoit59

XLDnaute Accro
Re : Macro : suppression des doublons avec une condition de date

Je te joins le travail réalisé sur ton fichier.

J'ai utilisé la méthode suivante :
  • Nous trions la colonne A du plus récent au plus ancien
  • Nous examinons dans la colonne C s'il existe plusieurs valeurs de la cellule en question
  • S'il existe plus d'une valeur nous supprimons la ligne, étant donné qu'elle sera plus ancienne
 

Pièces jointes

  • 160222 - Macro support.xlsm
    102.8 KB · Affichages: 137

V.MAOT

XLDnaute Nouveau
Re : Macro : suppression des doublons avec une condition de date

Re,

Je te remercie pour ton aide, mais manuellement, je connais cette méthode.
Le tableau final devrait représenter 2 à 300 lignes.

Mon problème est de l'automatiser avec un bouton de commande par macro.
L'opérateur doit permettre à l'utilisateur final de pouvoir nettoyer la base en un clique pour faire des analyses statistiques.

Victor
 

V.MAOT

XLDnaute Nouveau
Re : Macro : suppression des doublons avec une condition de date

C'est super cela fonctionne à merveille !
Je te remercie car je n'avais pas vu le problème sous cet angle. Je vais garder ton code précieusement.
J'ai un petit problème, peut-être que tu peux m'aider.

Comme ce tableau excel sera utilisé par plusieurs personnes (qui possèdent toutes un compte Windows distingué par leurs initiales), j'ai intégré une macro à l'ouverture, mais celle-ci ne fonctionne pas. Le but d'identifié l'auteur automatiquement avec son identifiant windows.

Ci-dessous, le code utilisé:

Code:
Private Sub Workbook_Open()
Sheets("V1").Select
ActiveSheet.Range("T2").Value = Environ("UserName")
End Sub

Est-ce le bon code ?

Merci d'avance pour ton aide supplémentaire, qui est vraiment la bienvenue !

Victor
 

thebenoit59

XLDnaute Accro
Re : Macro : suppression des doublons avec une condition de date

Je peux te proposer ça :
L'option 1, bête et méchant ça ajoute le nom, même si la cellule contient déjà du texte.
L'option 2, ne remplace pas le nom si existant.
L'option 3, ajoute à la suite le nom.

Private Sub Workbook_Open()
' Option 1 : Inscrire le nom de l'utilisateur, même si la cellule comprend déjà du texte
'Worksheets("V1").Range("A1") = Environ("UserName")

' Option 2 : N'inscris pas le nom si la cellule n'est pas vide
'If Worksheets("V1").Range("A1") = "" Then
'Worksheets("V1").Range("A1").FormulaLocal = Environ("UserName")
'End If

' Option 3 : Inscris les différents utilisateurs les uns à la suite des autres
If Worksheets("V1").Range("A1") = "" Then
Worksheets("V1").Range("A1").FormulaLocal = Environ("UserName")
Else: Worksheets("V1").Range("A1").FormulaLocal = Worksheets("V1").Range("A1").Value & " // " & Environ("Username")
End If


End Sub
 

klin89

XLDnaute Accro
Re : Macro : suppression des doublons avec une condition de date

Bonsoir à tous, :)

Pour répondre à la question du post #1

VB:
Option Explicit

Sub Nettoyer()
Dim dico As Object, a, i As Long, x As Range
    Set dico = CreateObject("Scripting.Dictionary")
    With Sheets("Consolidation").Range("a1").CurrentRegion
        .Offset(2).Resize(.Rows.Count - 2).Interior.ColorIndex = xlNone
        a = .Value
        For i = 3 To UBound(a, 1)
            If Not dico.exists(a(i, 2)) Then
                dico(a(i, 2)) = VBA.Array(a(i, 1), i)
            Else
                If a(i, 1) >= dico(a(i, 2))(0) Then
                    dico(a(i, 2)) = VBA.Array(a(i, 1), i)
                End If
            End If
        Next
        For i = 3 To UBound(a, 1)
            If dico.exists(a(i, 2)) Then
                If a(i, 1) <= dico(a(i, 2))(0) And i <> dico(a(i, 2))(1) Then
                    If x Is Nothing Then
                        Set x = .Rows(i)
                    Else
                        Set x = Union(x, .Rows(i))
                    End If
                End If
            End If
        Next
    End With
    If Not x Is Nothing Then
        x.Interior.ColorIndex = 42    'surligne
     Else
        MsgBox "Aucune ligne à supprimer"
    End If
    'If Not x Is Nothing Then x.EntireRow.Delete 'supprime
    Set x = Nothing
End Sub
klin89
 
Dernière édition:

laetitia90

XLDnaute Barbatruc
Re : Macro : suppression des doublons avec une condition de date

bonjour tous :):)
on peut utiliser removeduplicates si excel 2007 & >

Code:
Sub es()
With Range("a3:ac" & Cells(Rows.Count, 1).End(3).Row)
.Sort Key1:=Range("a3"), Order1:=xlDescending, Header:=xlYes
.RemoveDuplicates Columns:=Array(3)
End With
End Sub
 

V.MAOT

XLDnaute Nouveau
Re : Macro : suppression des doublons avec une condition de date

Bonjour à tous,

Merci beaucoup pour vos réponses.
J'ai oublié de clore mon poste, mais en relisant vos solutions, je ne comprends pas quelles différences il y a entre chacune des macros. Celle de Benoit fonctionne parfaitement pour l'instant donc je la conserve.

Cela dit, peut-être que les autres sont plus optimisées/fiables ?
Peut-être pouvez-vous m'expliquer leurs différences ?

Merci d'avance pour votre aide.
Victor
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote