Macro pour supprimer les doublons et prévenir

shoub95

XLDnaute Nouveau
Bonjour à tous,

On vient de me demander d'effectuer une macro pour faciliter le traitement d'une base de donnée. Je suis assez expert sous Excel mais pas du tout en Macro (Donc pas expert sous Excel, nous sommes bien d'accord...:()

Je vous remet un peu dans le contexte : Tous les mois une extraction est effectuée, elle concerne tous les employés étrangers nouvellement embauchés et déjà présent dans l'entreprise.

Jusqu'ici tout va bien, la problématique est tout d'abord la suivante :

Lorsqu'une extraction est effectuée, des personnes apparaissent en doublon notamment lorsqu'ils ont renouvelés leurs carte de séjour/Résident/autres le but serait donc de supprimer le doublon le plus ancien (Exemple ligne 3 et 4, il faudrait supprimer la ligne ou la carte de séjour est la plus ancienne)

Pour finir, (Pour l'instant:confused:) l'idéal serait d'une quelconque manière de prévenir l'utilisateur peut être en mettant en rouge une ligne entière lorsqu'un employé doit renouveller sa carte de séjour (1,2 voir 3 mois avant)

Merci de vos lumières qui me seront j'en suis sur précieuse.

Bonne journée à tous
 
Dernière modification par un modérateur:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro pour supprimer les doublons et prévenir

Bonjour Shoub et bienvenu, bonjour le forum,

Comme tu es nouveau dans le forum, je te recommande vivement de lire la
Lien supprimé. En plus de donner tous les bons plans pour obtenir de l'aide rapidement, elle indique, par exemple, que les fichiers en pièces jointes ne doivent pas contenir de données personnelles...
T'imagine si ton fichier tombe aux mains d'Hortefeux... Ho p... !

En pièce jointe, ton fichier modifié avec une macro qui supprime les doublons en ne gardant que le matricule ayant la carte de séjour la plus récente.

Pour le 2 point une Mise en Forme Conditionnelle (MFC) devrait faire l'affaire, mais comme je suis ultra nul en formules je ne m'y risque pas...
Le code :

Code:
Sub Macro1()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CEllule)
Dim NB As Integer 'déclare la variable NB (NomBre d'occurrences)
Dim PLV As Range 'déclare la variable PLV (PLage Visible)
Dim TBD 'déclare le tableau de variables TBD (TaBleau des Dates)
Dim J As Integer 'déclare la variable J (incrément)
Dim DM As Date 'déclare la variable DM (Date Max)
Dim LDM As Long 'déclare la variable LDM (Ligne de la Date Max)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = Sheets("Feuil1") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
Set PL = O.Range("A2:A" & DL) 'définit la plage PL
For Each CEL In PL 'boucle 1 : sur toutes les cellules CEL de la plage PL (= tous les matricules)
    NB = Application.WorksheetFunction.CountIf(PL, CEL.Value) 'définit la variable NB (le nombre d'occurrences du matricule dans la plage PL)
    If NB > 1 Then 'condition : si NB est supérieur à un (si plusieurs matricules identiques)
        Range("A1").AutoFilter Field:=1, Criteria1:=CEL.Value 'filtre la colonne 1 (=A) de l'onglet avec le matricule comme critère
        Set PLV = PL.Offset(0, 8).SpecialCells(xlCellTypeVisible) 'définit la plage PLV (= plage visible des date de fin de carte de séjour)
        ReDim TBD(1 To 2, 1 To NB) 'redimensionne le tableau TBD
        For J = 1 To NB 'boucle 2 : sur le nombre d'occurrences
            TBD(1, J) = PLV(J) 'récupère la date
            TBD(2, J) = PLV(J).Row 'récupère le numéro de ligne
            If DM < TBD(1, J) Then LDM = TBD(2, J) 'si la date max DM est inférieure à la date, la ligne de la date max LDM est égale à la ligne du tableau TBL
        Next J 'prochaine occurrence de la boucle 2
        For J = NB To 1 Step -1 'boucle inversée 3 : du nombre d'occurrences à 1
            If TBD(2, J) <> LDM Then Rows(TBD(2, J)).Delete 'si la ligne du tableau TBD est différente de la ligne LDM, supprime la ligne
        Next J 'prochaine occurrence de la boucle inversée 3
        Range("A1").AutoFilter 'supprime le filtre automatique
    End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
Le fichier :
 
Dernière modification par un modérateur:

JBARBE

XLDnaute Barbatruc
Re : Macro pour supprimer les doublons et prévenir

Bonjour à tous,

On vient de me demander d'effectuer une macro pour faciliter le traitement d'une base de donnée. Je suis assez expert sous Excel mais pas du tout en Macro (Donc pas expert sous Excel, nous sommes bien d'accord...:()

Je vous remet un peu dans le contexte : Tous les mois une extraction est effectuée, elle concerne tous les employés étrangers nouvellement embauchés et déjà présent dans l'entreprise.

Jusqu'ici tout va bien, la problématique est tout d'abord la suivante :

Lorsqu'une extraction est effectuée, des personnes apparaissent en doublon notamment lorsqu'ils ont renouvelés leurs carte de séjour/Résident/autres le but serait donc de supprimer le doublon le plus ancien (Exemple ligne 3 et 4, il faudrait supprimer la ligne ou la carte de séjour est la plus ancienne)

Pour finir, (Pour l'instant:confused:) l'idéal serait d'une quelconque manière de prévenir l'utilisateur peut être en mettant en rouge une ligne entière lorsqu'un employé doit renouveller sa carte de séjour (1,2 voir 3 mois avant)

Merci de vos lumières qui me seront j'en suis sur précieuse.

Bonne journée à tous

Bonjour à tous,

Pour compléter la demande en gras, la saisie en colonne I ( date de fin carte de séjour ) provoque une ligne rouge pour les dates ultérieurs à aujourd'hui !

PS : j'ai pris le fichier de Robert !

bonne journée !
 
Dernière modification par un modérateur:

Efgé

XLDnaute Barbatruc
Re : Macro pour supprimer les doublons et prévenir

Bonjour à tous
Une tentative par Mise en formes conditionnelles (en sélectionnant $A$2:$P$66)
Vert Moins de trois mois avant la date en colonne I
Jaune moins de deux mois, Orange moins d'un mois, rouge dépassée.
Cordialement
 
Dernière modification par un modérateur:

JBARBE

XLDnaute Barbatruc
Re : Macro pour supprimer les doublons et prévenir

La Date d'aujourd'hui se met en ROUGE !

Le mois en cours se met en VIOLET !

Le mois suivant ( +1) se met en BLEU

A+
 
Dernière modification par un modérateur:

shoub95

XLDnaute Nouveau
Re : Macro pour supprimer les doublons et prévenir

Merci à tous pour vos retours

Effectivement je n'avais pas (comme beaucoup à mon avis) lu la charte jusqu'au bout. Je m'en excuse !
J'ai tout de même pu travailler sur mon fichier et la macro fonctionne effectivement à merveille. La mise en forme conditionnelle est aussi un point que j'avais lamentablement zappé !

Bonne journée et bon week end :)
 

Discussions similaires

Réponses
2
Affichages
593

Statistiques des forums

Discussions
312 188
Messages
2 086 028
Membres
103 100
dernier inscrit
erym64300