Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Conserver uniquement les valeurs uniques

lolopolo

XLDnaute Nouveau
Bonjour,

Apres plusieurs recherches sur le forum et google, je vous demande de l'aide pour une opération qui me semble simple mais que je n'arrive pas à réaliser en formule.

Comment sur une colonne (50 000 entrées), conserver uniquement les données uniques et supprimer tous les doublons.
En exemple

Sur la liste suivante, je ne veux conserver que A,D,E,F,H
A
B
B
C
C
C
D
E
F
G
G
H

La fonction doublons d'excel ne m'interesse pas car elle me garde toutes les valeurs et supprime les doublons... Moi je cherche les valeurs uniques
Un grand merci!
 

mromain

XLDnaute Barbatruc
Re : Conserver uniquement les valeurs uniques

Bonjour lolopolo et bienvenue sur le forum,
Bonjour pierrejean


Voici un essai :
VB:
'*** Les données à analyser sont en colonne A de la feuille "Feuil1"
Sub test()
Dim derLigne As Long, iLigne As Long, liste As String
    
    liste = ";"
    
    With ThisWorkbook.Sheets("Feuil1")
        
        'calculer la dernière ligne contenant les données
        derLigne = .Range("A" & .Rows.Count).End(xlUp).Row
        
        'bouler sur toutes les lignes (de 1 à derLigne)
        For iLigne = derLigne To 1 Step -1
        
            'si ce n'est pas une valeur unique (dans la colonne A)
            If Application.WorksheetFunction.CountIf(.Range("A:A"), .Range("A" & iLigne)) <> 1 Then
                'ajouter la valeur = la liste
                liste = liste & .Range("A" & iLigne).Text & ";"
            End If
            
            'si la valeur de cette ligne est dans la liste
            If InStr(liste, ";" & .Range("A" & iLigne).Text & ";") <> 0 Then
                'effacer la ligne
                .Rows(iLigne).Delete
            End If
            
        Next iLigne
    End With
End Sub
a+
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Conserver uniquement les valeurs uniques

Re

Mes excuses , je n'avais pas lu jusqu'au bout

Vois ceci

Edit: Salut mromain
 

Pièces jointes

  • uniques.zip
    12.7 KB · Affichages: 819
  • uniques.zip
    12.7 KB · Affichages: 759
  • uniques.zip
    12.7 KB · Affichages: 795

lolopolo

XLDnaute Nouveau
Re : Conserver uniquement les valeurs uniques



Merci pour cette réponse mais c trop compliqué pour moi
 

Tonneau91

XLDnaute Nouveau
Re : Conserver uniquement les valeurs uniques


Bonjour,

Je me permets de réactiver la discussion.

Le code ci-dessus marche parfaitement lorsque l'on souhaite conserver les valeurs uniques d'une seule colonne.

Pour ma part, je souhaite conserver les lignes uniques d'une base de données, c'est à dire incluant plusieurs colonnes.

J'essaie d'adapter le code sans grand succès.

Avez-vous une piste à me conseiller ?

D'avance, merci
 

Tonneau91

XLDnaute Nouveau
Re : Conserver uniquement les valeurs uniques

Bonjour Pierrejean,

Merci beaucoup pour votre réponse.

En fait c'est une combinaison de valeurs uniques qui m'intéresse.

Exemple pour cette base de données simplifiée :

A A B
C C A
A A C
A A B
A C A
A A C

Je voudrais obtenir seulement les lignes en rouge, c'est à dire celle qui sont uniques dans la base.

Seulement, certains caractères sont en doublons si on ne regarde qu'une seule colonne : Peu importe, je cherche à identifier les combinaisons uniques.

Encore merci de m'avoir répondu si vite.
 

Tonneau91

XLDnaute Nouveau
Re : Conserver uniquement les valeurs uniques

Bonjour,

Je pense avoir trouvé la solution en adaptant le premier code. Je transforme le Countif en Countifs en intégrant mes autres critères (c'est à dire mes autres colonnes). Ca à l'air de marcher.

Si vous avez des remarques je suis preneur, je suis novice en vba.

Ca donne ceci pour moi :
Code:
Sub test()
Dim derLigne As Long, iLigne As Long, liste As String
   
    liste = ";"
   
    With ThisWorkbook.Sheets("Feuil1")
       
        'calculer la dernière ligne contenant les données
       derLigne = .Range("A" & .Rows.Count).End(xlUp).Row
       
        'bouler sur toutes les lignes (de 1 à derLigne)
       For iLigne = derLigne To 1 Step -1
       
            'si ce n'est pas une valeur unique (dans la colonne A)
           If Application.WorksheetFunction.CountIfs(.Range("A:A"), .Range("A" & iLigne), .Range("B:B"), .Range("B" & iLigne), .Range("C:C"), .Range("C" & iLigne)) <> 1 Then
                'ajouter la valeur = la liste
               liste = liste & .Range("A" & iLigne).Text & ";"
            End If
           
            'si la valeur de cette ligne est dans la liste
           If InStr(liste, ";" & .Range("A" & iLigne).Text & ";") <> 0 Then
                'effacer la ligne
               .Rows(iLigne).Delete
            End If
           
        Next iLigne
    End With
End Sub
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Conserver uniquement les valeurs uniques

Bonsoir,

Code:
Sub NonDoublons()
 Set d = CreateObject("Scripting.Dictionary")
 Tbl = Range("a2:c" & [a65000].End(xlUp).Row)
 For i = LBound(Tbl) To UBound(Tbl)
   clé = Tbl(i, 1) & "|" & Tbl(i, 2) & "|" & Tbl(i, 3)
   d(clé) = d(clé) + 1
 Next i
 j = 0
 Dim b(): ReDim b(1 To d.Count, 1 To 3)
 For Each c In d.keys
   If d(c) = 1 Then
     j = j + 1
     a = Split(c, "|")
     b(j, 1) = a(0): b(j, 2) = a(1): b(j, 3) = a(2)
   End If
 Next c
 [e2].Resize(j, 3) = b
End Sub

0,03 sec pour 5.000 lignes

JB
 

Pièces jointes

  • NonDoublons2.xls
    367.5 KB · Affichages: 151

tikljo

XLDnaute Nouveau
Sinon une version plus simple sans macro :
faire un concat des cellules A1;B1; etc) dans la cellule Z1 par exemple.
Dérouler le concat sur la liste de valeur.
puis faire un mise en forme conditionnelle des valeurs uniques de la colonne Z
 

Discussions similaires

Réponses
15
Affichages
397
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…