Gestion de doublons

  • Initiateur de la discussion Petipeton
  • Date de début
P

Petipeton

Guest
Bonjour les petits clous !!!

J'ai un méga grand tableau avec plein de colonnes qui, chacune, contient un grand nombre de doublons.

J'aimerais extraire de ce tableau un autre tableau avec pour chaque colonne, une suppression des doublons !

Pas clair ???? Je joins un extrait (un peu tiré par les cheveux, mais j'ai pô eu l'inspiration et mes données sont trop confidentielles pour les balancer sur le net). Premier onglet : ce que j'ai (à peu de choses près); deuxième onglet : ce que je voudrais.

Merci molto et molto de votre précieuse aide...

Petipeton
 

Pièces jointes

  • petipeton_extraction.zip
    2 KB · Affichages: 65
  • petipeton_extraction.zip
    2 KB · Affichages: 65
  • petipeton_extraction.zip
    2 KB · Affichages: 63
M

Marc

Guest
Bonjour,

tu peux éventuellement utiliser le filtre élaboré pour chacune des colonnes , en veillant bien à changer les données pour chaque colonne.
Ce n'est pas extraordinaire comme méthode mais ça marche.

Salut,

Marc
 

Pièces jointes

  • petipeton_extraction.zip
    16.6 KB · Affichages: 89
  • petipeton_extraction.zip
    16.6 KB · Affichages: 93
  • petipeton_extraction.zip
    16.6 KB · Affichages: 90
P

Petipeton

Guest
Merci de ta réponse. Peux-tu m'indiquer la marche exacte à suivre, car j'essaie desesperement d'utiliser ce filtre élaboré (en cochant la case supprimer les doublons) mais je n'y arrive pas, il doit surement y avoir qq chose que je fais mal...

Merci encore.
 
M

myDearFriend

Guest
Bonjour Petipeton, Marc

Ci-dessous une autre approche entièrement VBA (voir fichier ci-joint en exemple) :

Private Sub btnSupprDoublons_Click()
Dim Dbl As New Collection
Dim L As Long
Dim i As Long
Dim C As Byte
Sheets("Resultat").Cells.Delete
'Pour chaque colonne utilisée
For C = 1 To 255
'Mémorisation et épuration des données source
With Sheets("Source")
If .Cells(1, C) = "" Then Exit For
'Nombre d'éléments dans la liste
L = .Cells(65536, C).End(xlUp).Row
'Alimente la collection avec suppression des doublons
On Error Resume Next
For i = 1 To L
Dbl.Add .Cells(i, C).Value, CStr(.Cells(i, C).Value)
Next i
On Error GoTo 0
End With
'Mise à jour des résultats
With Sheets("Resultat")
For i = 1 To Dbl.Count
.Cells(i, C).Value = Dbl.Item(i)
Next i
End With
Set Dbl = Nothing
Next C
Sheets("Resultat").Activate
End Sub


Cordialement.
Didier_mDF
 

Pièces jointes

  • PourPetipeton.zip
    11.1 KB · Affichages: 146
P

papyjo

Guest
Bonjour Petitpeton, Marc et tout le forum
J'avais noté cette doc à un moment ou j'avais un Pbl de doublons.
peut-être sera-t-elle utile. (elle n'est pas de moi, Laurent Longre peut-être)
Les Doublons sous Excel 97
A plusieurs reprises vous m'avez posé la question des valeurs ou désignations en doubles dans un fichier Excel. Cette page présente différentes méthodes (formules, macro...) pour détecter et éliminer des données ou enregistrements dupliqués dans des plage de cellules.
Quatre méthodes :
1. Contrôle de doublons à la saisie
2. Elimination de doublons par formules
3. Elimination de doublons par filtre élaboré
4. Elimination de doublons par macro
1. Contrôle de doublons à la saisie (simple et efficace à la saisie)
Pour éviter la présence de doublons dans une plage en avertissant en cours de saisie que la valeur a déjà été entrée, on peut exploiter l'outil de validation des données.
Par exemple, pour avertir par un message d'alerte lorsque l'on saisit une valeur déjà existante dans la plage A2:A300 :
- Sélectionner la plage A2:A300
- Dans le menu 'Données', activer la commande 'Validation'
- Dans la boîte de dialogue suivante, onglet 'Options' :
. Sélectionner 'Personnalisé' dans la liste déroulante 'Autoriser'
. Dans la zone de texte 'Formule', saisir la formule suivante=NB.SI(A$2:A$300;A2)=1
- Dans l'onglet 'Alerte d'erreur', indiquer le titre et le message de la boîte de dialogue avertissant l'utilisateur que la valeur saisie a déjà été entrée dans la plage.
2. Elimination de doublons par formules (simple pour corriger)
Ces formules permettent de reproduire dans une autre plage les valeurs déjà saisies dans une plage-colonne en éliminant tous les doublons. La plage source doit être de taille relativement limitée (quelques centaines de cellules) si l'on veut éviter que le temps de calcul nécessité soit trop important.
Exemple : reproduire dans la plage B2:B19 les valeurs déjà saisies dans la plage A1:A19 en éliminant les doublons.
- Taper la formule ="" dans la cellule B20, et faire un copier-coller sur cette cellule par valeur uniquement. - En B2, entrer la formule =A2
- En B3, saisir la formule suivante (saisie matricielle par la combinaison de touches Ctrl-Maj-Entrée) :
=SI(B2="";"";INDEX(A3:A$20;MIN(SI(NB.SI(B$2:B2;A3:A$19);LIGNE(A$20)-LIGNE()+1;LIGNE(A3:A$19)-LIGNE()+1))))
- Recopier cette formule vers le bas jusqu'à la cellule B19
Pour fonctionner correctement, cette formule nécessite que la plage source (ici A2:A19) ne comporte aucune cellule vide.
La fonction matricielle VALEURS.UNIQUES de la macro Morefun.xll permet également d'obtenir le contenu d'une plage ou matrice d'une seule colonne en éliminant les valeurs
dupliquées. Cette fonction reposant sur un tri par QuickSort, elle peut-être appliquée à des plages de plusieurs milliers de cellules sans ralentir de façon notable le recalcul de la feuille.
3. Elimination de doublons par filtre élaboré (simple pour corriger mais peut-être destructif)
Le filtre élaboré d'Excel dispose d'une option "extraction sans doublon" qui permet d'éliminer très efficacement les valeurs dupliquées d'une plage.
Exemple : extraction sans doublons de la plage A1:C100 (A1:C1 contenant les noms des champs) :
- Activer la commande Filtre -> Filtre élaboré du menu 'Données'
- Dans la boîte de dialogue "Filtre élaboré", indiquer les valeurs suivantes :
. Action : Copier vers un autre emplacement
. Plages : $A$1:$C$300
. Destination : toute cellule située à un emplacement libre de taille assez grande dans la feuille
. Activer l'option "Extraction sans doublon"
Le tableau créé après validation de la boîte de dialogue contient une copie de la plage d'origine A1:C300 sans enregistrements (lignes) dupliqués.
Pour remplacer la plage d'origine, il est nécessaire d'en effacer le contenu et de faire un couper-coller de la plage contenant les données filtrées vers l'emplacement de la plage source.
Si l'on veut appliquer un filtre non destructif (masquant simplement les enregistrements excédentaires), il faut garder l'option par défaut "Filtrer la liste sur place" au lieu de "Copier vers un autre emplacement" dans la boîte de dialogue du filtre élaboré.
4. Elimination de doublons par macro (marrant pour celui qui veut programmer un peu)
La macro suivante permet de supprimer les enregistrements dupliqués dans une plage, avec différentes options concernant le traitement des lignes "libérées" par l'élimination des doublons.
- La fonction SupprDoublons(Plage, Modif) supprime les enregistrements (lignes) dupliqués dans la plage donnée en argument. La première ligne de cette plage doit contenir les intitulés des champs. Cette fonction renvoie 0 en cas de succès, et un code d'erreur si l'opération a échoué.
L'argument 'Modif' indique l'action à effectuer sur les lignes excédentaires libérées par le filtrage :
. 0 (par défaut) = effacement sans suppression
. 1 = suppression des lignes à l'interieur de la plage
. 2 = suppression des lignes entières
- Les procédures Unique_Efface, Unique_SupprPartielle et Unique_SupprEntière éliminent les enregistrements dupliqués dans la plage actuellement sélectionnée en transmettant à la fonction de suppression (Function Unique) respectivement les trois paramètres précédents.
'_____________________________________________________________
Function SupprDoublons(Plage As Range, Optional Modif As Integer) As Long
Dim Temp As Range
Dim MiseAJourEcran As Boolean, Recalcul As Boolean
On Error GoTo Fin
' Sauvegarde des paramètres actuels d'affichage et de recalcul
If Application.ScreenUpdating Then
MiseAJourEcran = True
Application.ScreenUpdating = False
End If
If Application.Calculation = xlCalculationAutomatic Then
Recalcul = True
Application.Calculation = xlCalculationManual
End If
' Détermination de la plage d'extraction temporaire (Temp),
' exécution du filtre et déplacement vers la plage d'origine
With Plage
Set Temp = .Worksheet.Cells(.SpecialCells(xlCellTypeLastCell). _
Row + 1, 1).Resize(.Rows.Count, .Columns.Count)
.AdvancedFilter xlFilterCopy, CopyToRange:=Temp, Unique:=True
End With
Temp.Cut Plage ' Traitement des lignes libérées en fonction de 'Modif'
If Modif And WorksheetFunction.CountBlank(Temp) > 0 Then
With Range(Temp.End(xlDown)(2), Temp(Temp.Count))
If Modif = 1 Then .Delete xlShiftUp Else .EntireRow.Delete
End With
End If
' Réinitialisation du UsedRange
Temp.Parent.UsedRange
Fin:
SupprDoublons = Err
If MiseAJourEcran Then Application.ScreenUpdating = True
If Recalcul Then Application.Calculation = xlCalculationAutomatic
End Function
'___________________________________________________________
Sub Unique_Efface()
SupprDoublons Selection
End Sub
Sub Unique_SupprPartielle()
SupprDoublons Selection, 1
End Sub
Sub Unique2_SupprEntière()
SupprDoublons Selection, 2
End Sub
'______________________________________________________________
La fonction 'SupprDoublons' repose sur l'utilisation d'un filtre élaboré avec extraction sans doublon. Une plage temporaire (Temp) située en-dessous de la dernière cellule utilisée dans la
feuille de calcul reçoit les données construites par le filtre, et son contenu est recopié dans un deuxième temps à l'emplacement de la plage d'origine.
 
D

Dugenou

Guest
Papyjo,

Je garde ta réponse dans mon "coffre aux trésors" : quelle merveille !


E2.gif
 

Discussions similaires

Statistiques des forums

Discussions
312 310
Messages
2 087 119
Membres
103 478
dernier inscrit
Frederic Lagger