Valeurs uniques Removeduplicates

Will-e-coyote

XLDnaute Occasionnel
Bonjour le forum!

Lorsque l'on supprime les doublons d'une liste via le bouton spécifique du ruban Données, EXCEL retourne le nombre de valeurs unique dans une boite de dialogue

Ayant besoin de connaitre le nombre de lignes restantes lors de l'utilisation de cette fonction en VBA (removeduplicates), et plutôt que de recalculer moi-même ce nombre de ligne, je souhaitait savoir s'il n'y avait pas moyen de récupérer cette info qui semble disponible ....quelquepart....

Merki par avance :eek:
 

JCGL

XLDnaute Barbatruc
Re : Valeurs uniques Removeduplicates

Bonjour à tous,

Pas trouvé où ni comment récupérer les valeurs.
Un essai... Avec un code trouvé, en partie, sur MSND.

A+ à tous
 

Pièces jointes

  • JC Doublons.xlsm
    23.1 KB · Affichages: 54

Will-e-coyote

XLDnaute Occasionnel
Re : Valeurs uniques Removeduplicates

Merci JCGL !

C'est rageant de voir que cette info ne soit pas retournée nativement par le fonction VBA d'Excel alors que son utilisation via le bouton du ruban donne cette info !
Ta réecriture de la fonction est interressante mais je pense rester sur un calcul du nombre d'occurences uniques (ma recherche de doublons s'effectue sur 4 colonnes) l'un dans l'autre il va falloir que je pisse un peu de code...

Tant pis ! (Il parait qu'un bon informaticien est un fainéant.... bien que je ne me considère pas comme bon)

@+ et encore merci
Wil
 

Will-e-coyote

XLDnaute Occasionnel
Re : Valeurs uniques Removeduplicates

Re,

Au cas où ça pourrait interresser, j'ai trouver finalement un méthode relativement simple pour trouver mon info :

Code:
    ActiveSheet.Range(Cells(1, 1), Cells(NbLignes, NbCols)).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5) _
        , Header:=xlYes
    NbLignes = NbLignes - WorksheetFunction.CountBlank(Selection) / NbCols

Au départ NbLignes représente le nombre de lignes avec doublons, et NbCols le nombre de colonnes totales, je ne fais la chasse au doublons que sur la combinaison des 5 premières (et non 4)

Après l'application du RemoveDuplicates, j'enlève le nombre de cellules vides (divisé par le nombre colonnes) à mon nombre de lignes.

Voiloù !
 

Modeste

XLDnaute Barbatruc
Re : Valeurs uniques Removeduplicates

Bonsoir Will-e-coyote,
Salut JC :)

Avec le calcul de Will-e-coyote, l'existence de cellules vides dans la plage après suppression des doublons risque de fausser le résultat ... ou alors je dis une ânerie?

Tant qu'à en dire, un simple
Code:
nbUniques = [A1].CurrentRegion.Rows.Count
... ne suffirait-il pas? On ajoutera -1, si les colonnes ont des en-têtes!
Comme on ne dispose pas du fichier, on ne peut tester que sur un "ersatz" dudit fichier (sans les possibles "données fantômes" dont l'ombre subsiste parfois et fausse les résultats) ... Sur un fichier "tout propre, ça semble fonctionner :confused:
 

Staple1600

XLDnaute Barbatruc
Re : Valeurs uniques Removeduplicates

Bonsoir à tous

Modeste
Attention au "trous" ;)

Code:
Sub a()
Range("A1:A10") = "=ROW()^ROW()"
MsgBox [A1].CurrentRegion.Rows.Count
Range("A5:A7") = Empty
MsgBox [A1].CurrentRegion.Rows.Count, vbExclamation, "Gniark,gniark ;-)"
End Sub
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Valeurs uniques Removeduplicates

Re,
Salut JM :)

Je vois bien ce que tu veux dire (enfin, il me semble), mon petit sucre d'orge ;) ... mais dans le cas de la suppression des doublons sur 5 colonnes, il ne s'agit pas d'effacer des données au milieu de la plage ... les lignes entières sont supprimées dans la plage (pense-je) ... il ne resterait donc peut-être pas de cellules vides, après le RemoveDuplicates !?

Enfin, ce n'est là que pure hypothèse, mon petit bout d'Emmenthal (et s'il n'y a pas de trous, c'est sans doute du Comté?) et pure conjecture: je n'affirme rien: je suppute et subodore, sans plus (et l'odore du Comté, c'est quelque chose :eek:)
 

Staple1600

XLDnaute Barbatruc
Re : Valeurs uniques Removeduplicates

Re

Modeste
Ma macro n'était là que pour illustrer le méfait du trou ;)
(En langage Excel, on dirait une plage discontinue)
Tu as testé mon code au moins ?
C'était juste pour montrer que quand il y trou (volontaire ou pas), CurrentRegion renvoie une information erronée, non ?

EDITION: En te relisant mieux
les lignes entières sont supprimées dans la plage (pense-je) ... il ne resterait donc peut-être pas de cellules vides, après le RemoveDuplicates !?
Je me rends que tu connais le danger du trou comme ta poche ;)

Au moins j'aurai eu le plaisir de te croiser au bord d'un trou ;)

PS: Je préfère le cheddar ;)
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Valeurs uniques Removeduplicates

Re,

Tu as testé mon code au moins ?
Si fait, mon doux Seigneur! Je m'agenouille et implore votre pardon ;) ... mais ton exemple (sauf mienne erreur) est plus parlant sur une unique colonne.

Dans le cas du vil coyote, il y en aurait au moins 5 (comme ne l'illustre pas son fichier absent) et donc j'imagine (peut-être à tort) qu'il n'y aura pas des lignes entières ... entièrement vides ... et que donc le CurrentRegion pourrait fonctionner (et j'insiste sur le conditionnel, ainsi que la désespérante absence de fichier exemple)

Rien que pour toi, donc un fichier (avec ce que j'ai compris!?)
 

Pièces jointes

  • SupprimerDoublons.xlsm
    15.2 KB · Affichages: 45

Si...

XLDnaute Barbatruc
Re : Valeurs uniques Removeduplicates

salut :D, ;)

avec une macro comme JGCL ...

Re
Modeste
Je me rends que tu connais le danger du trou comme ta poche
Au moins j'aurai eu le plaisir de te croiser au bord d'un trou
PS: Je préfère le cheddar

Un fromage de tête sans trous comme Modeste*, malgré "mes fuites dans les idées" et avec une réponse à une autre demande que j'avais préparée (mais pas envoyée car le demandeur a été très satisfait des suggestions faites).

*en complément de sa proposition (adaptable à des colonnes tombées dans un trou d'oubli)
 

Pièces jointes

  • Tri sur une ou deux colonnes sans doublon.xlsm
    42.6 KB · Affichages: 37

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Valeurs uniques Removeduplicates

Bonjour à tous,

La fonction de mapomme pour compter les doublons et ceux qui restent sans toucher aux données de départ:
Code:
N1N2doublon(xplage As Range, xentete As Boolean, ParamArray xcolonnes())
Elle ramène un tableau de deux éléments: le 1ier est le nombre de doublons, le 2ème est le nombre de valeurs uniques.
il faudrait rajouter un paramètre pour prendre en compte ou non les lignes vides. En l'état, la fonction les prend en compte tout comme le fait RemoveDuplicates.

Le code:
Code:
Function N1N2doublon(xplage As Range, xentete As Boolean, ParamArray xcolonnes())
Dim dico, tablo, n1, i&, j&, corr&

  If xentete Then corr = 1 Else corr = 0
  Set dico = CreateObject("scripting.dictionary")
  tablo = xplage.Value: n1 = UBound(tablo)
  n1 = xplage.Rows.Count

  For i = 1 + corr To n1
    ReDim T(LBound(xcolonnes(0)) To UBound(xcolonnes(0)))
    For j = 1 To UBound(T) - LBound(T) + 1
     T(LBound(T) + j - 1) = tablo(i, j)
    Next j
    If Not dico.exists(Join(T, "²")) Then dico.Add Join(T, "²"), ""
  Next i

  N1N2doublon = Array(n1 - corr - dico.Count, dico.Count)
End Function
 

Pièces jointes

  • Fonction N1N2doublon v1.xlsm
    18.1 KB · Affichages: 45
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 238
Messages
2 086 491
Membres
103 234
dernier inscrit
matteo75654548