Formule Matricelle pour extraire les valeurs uniques

Armand11

XLDnaute Occasionnel
Bonjour à toute la communauté,

J'aimerai pouvoir extraire de ma colonne toutes les valeurs UNIQUES... non pas grâce à un TCD mais grâce à une formule Excel matricielle ...

J'ai appliquer une Matricielle, mais ya qqchose qui cloche et je bute dessus ...

Pourriez vous m'aider sur ce sujet ?
Merci d'avance...
 

Pièces jointes

  • Exceldownload Formule Matricielle Données unique extraire.xlsx
    122.2 KB · Affichages: 31

job75

XLDnaute Barbatruc
Bonjour Armand11,

Formule matricielle en E2 tirée laborieusement jusqu'à la la ligne 800 :
Code:
=SIERREUR(INDEX(A:A;PETITE.VALEUR(SI(NON(NB.SI(E$1:E1;A$2:A$3575));LIGNE(A$2:A$3575));1));"")
Le recalcul de ces 799 formules prend beaucoup de temps : 324 secondes chez moi

A+
 

Pièces jointes

  • Exceldownload Formule Matricielle Données unique extraire(1).xlsx
    109.6 KB · Affichages: 21

Airone784

XLDnaute Occasionnel
Bonjour,

Voici une solution que j'utilise à l'occasion mais qui est peut être moins efficace lorsqu'il y a beaucoup de lignes, encore que....
 

Pièces jointes

  • Exceldownload Formule Matricielle Données unique extraire.xlsx
    133 KB · Affichages: 25

Paf

XLDnaute Barbatruc
Bonjour à tous,

une solution qui ne répond pas directement au besoin puisque Macro (qui a le mérite d'être rapide (+/- 0.02s)) :

VB:
Sub Regroupe()
Dim Dico, T, TT, i As Long
'D = Timer
Set Dico = CreateObject("Scripting.Dictionary")
With Worksheets("Feuil1")
T = .Range("A2:B" & .Range("A" & Rows.Count).End(xlUp).Row)

For i = LBound(T, 1) To UBound(T, 1)
    Dico(T(i, 1)) = Dico(T(i, 1)) + T(i, 2)
Next
' si on veut également le cumul par code activer les deux lignes en commentaire et désactiver la suivante
'TT = Application.Transpose(Array(Dico.keys, Dico.Items))
'.Range("F3").Resize(UBound(TT, 1), UBound(TT, 2)) = TT
.Range("F3").Resize(Dico.Count, 1) = Application.Transpose(Dico.keys)
End With
'MsgBox Timer - D
End Sub
 

job75

XLDnaute Barbatruc
Re, salut djidji59430, Airone784,

Airone 784 votre formule est plus compliquée que la mienne et elle prend autant de temps de calcul.
Et pourquoi pas "supprimer les doublons" ??
Bien sûr si cette commande existe dans la version utilisée, on peut aussi exécuter cette macro archi classique :
Code:
Sub DonnesUniques()
Dim tablo, d As Object, i&
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(tablo)
    d(tablo(i, 1)) = ""
Next
If d.Count Then [E2].Resize(d.Count) = Application.Transpose(d.keys) 'Transpose est limitée à 65536 lignes
End Sub
Edit : salut Paf, oui, plus on est de fou...

A+
 

Pièces jointes

  • Données uniques VBA(1).xlsm
    96.8 KB · Affichages: 14

Modeste geedee

XLDnaute Barbatruc
Bonjour,

Et pourquoi pas "supprimer les doublons" ??

Crdlmt
sans formule ni matricielle, sans macro
instantané !!!
le B A BA en quelque sorte :p
;)

sélectionner la colonne A
séquence de touches à saisir :
Alt é V Shift_Tab C Tab Tab Tab $g$1 Tab x Tab Entrée
upload_2019-2-22_19-17-29.png


la même en macro :
Sub Macro1()
Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("G1"), Unique:=True
End Sub
 

Armand11

XLDnaute Occasionnel
Bonjour A toute la communauté, et bonjour à Tout ceux qui m'on répondu !

Merci pour votre aide, et les dévelopepments proposé. JE ne passerai pas par un Dév VBA mais je pense suivre la suggestion de Djdjdji à savoir supprimer les doublons ... car derrière j'ai d'autres formules à insérer ... JE pense faire un TCD pour récupérer les données uniques puis ensuite reporter ces données dans un tableur et terminer mes calculs ...

Merci beaucoup pour votre aide sur mo sujet.

A très bientôt

Armand
 

Discussions similaires

Statistiques des forums

Discussions
312 232
Messages
2 086 462
Membres
103 222
dernier inscrit
2BS