OVH Cloud OVH Cloud

Valeurs uniques triées dans un tableau VBA

54 réponses
Avatar
Herdet
Bonsoir à tous,
Après une recherche infructueuse et des tests un peu laborieux je fais appel
à vous.
J'ai tableau VBA de 10 à 1200 lignes ( 1 colonne) nommé TAval
Je cherche à supprimer tous les doublons puis à le trier par ordre croissant
(ou décroissant).
Et bien sûr le tout en VBA ou bien en API Windows (plus rapides) sans
utiliser les filtres de feuille de calcul
Merci
Cordiales salutations
Robert Dezan

10 réponses

1 2 3 4 5
Avatar
jps
salut robert
ça va? quoi? à veau leau?
tiens, j'avais ça dans un tiroir de la commode :

Sub ValUniquesACote() ' PlageSrc As Range, CellDest As Range)
'Extrait les valeurs uniques d'une colonne et les renvoie
'dans une autre, à partir de CellDest tiré d'un code de F. Signonneau
Dim Arr1, Elt, Arr2(), Coll As New Collection, i As Integer
' If PlageSrc.Columns.Count > 1 Then Exit Sub ' Mais possible sur 2 colonnes
' Arr1 = PlageSrc.Value
Arr1 = Selection.Value
Dim Colo
Dim Line
Dim err
Colo = Selection.Column
Line = Selection.Row
For Each Elt In Arr1
On Error Resume Next
Coll.Add Elt, CStr(Elt)
If err.Number = 0 Then
ReDim Preserve Arr2(1 To Coll.Count)
Arr2(Coll.Count) = Elt
End If
On Error GoTo 0
Next
For i = 1 To Coll.Count
If IsEmpty(Cells(Line, Colo + 1)) Then
Cells(Line + i, Colo + 1).Value = Coll.Item(i)
Else
MsgBox ("cellule voisine non vide")
MsgBox Coll.Item(i)
End If
Next
Application.Transpose (Arr2)
End Sub

des fois que ça te convienne au moins pour extraire les valeurs uniques
HTH
jps

"Herdet" a écrit dans le message de
news:%
Bonsoir à tous,
Après une recherche infructueuse et des tests un peu laborieux je fais
appel

à vous.
J'ai tableau VBA de 10 à 1200 lignes ( 1 colonne) nommé TAval
Je cherche à supprimer tous les doublons puis à le trier par ordre
croissant

(ou décroissant).
Et bien sûr le tout en VBA ou bien en API Windows (plus rapides) sans
utiliser les filtres de feuille de calcul
Merci
Cordiales salutations
Robert Dezan




Avatar
Daniel.M
Salut JPS,

Pour une sélection d'une colonne, il y a aussi celle-là, qui utilise la
puissance des formules et qui est assez rapide.


Sub ExtraitUniques1Col()
Dim Plage As Range, A_ As String, Rel As String

Set Plage = Selection ' À adapter

A_ = Plage(1, 1).Address(1, 0) ' Adresse absolue 1ère cell de plage
Rel = Plage(1, 1).Address(0, 0) ' Adresse relative 1ère cell de plage

With Plage.Offset(0, 1) ' à adapter. Ici, une colonne à droite
' Réplique les données qui apparaissent pour la 1ère fois
.Formula = "=IF(COUNTIF(" & A_ & ":" & Rel & "," & Rel & ")=1," & _
Rel & ","""")"
.Value = .Value ' fixe les valeurs
.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, header:=xlNo ' Tri
End With
Set Plage = Nothing
End Sub

Salutations,

Daniel M.

"jps" wrote in message
news:
salut robert
ça va? quoi? à veau leau?
tiens, j'avais ça dans un tiroir de la commode :

Sub ValUniquesACote() ' PlageSrc As Range, CellDest As Range)
'Extrait les valeurs uniques d'une colonne et les renvoie
'dans une autre, à partir de CellDest tiré d'un code de F. Signonneau
Dim Arr1, Elt, Arr2(), Coll As New Collection, i As Integer
' If PlageSrc.Columns.Count > 1 Then Exit Sub ' Mais possible sur 2 colonnes
' Arr1 = PlageSrc.Value
Arr1 = Selection.Value
Dim Colo
Dim Line
Dim err
Colo = Selection.Column
Line = Selection.Row
For Each Elt In Arr1
On Error Resume Next
Coll.Add Elt, CStr(Elt)
If err.Number = 0 Then
ReDim Preserve Arr2(1 To Coll.Count)
Arr2(Coll.Count) = Elt
End If
On Error GoTo 0
Next
For i = 1 To Coll.Count
If IsEmpty(Cells(Line, Colo + 1)) Then
Cells(Line + i, Colo + 1).Value = Coll.Item(i)
Else
MsgBox ("cellule voisine non vide")
MsgBox Coll.Item(i)
End If
Next
Application.Transpose (Arr2)
End Sub

des fois que ça te convienne au moins pour extraire les valeurs uniques
HTH
jps

"Herdet" a écrit dans le message de
news:%
Bonsoir à tous,
Après une recherche infructueuse et des tests un peu laborieux je fais
appel

à vous.
J'ai tableau VBA de 10 à 1200 lignes ( 1 colonne) nommé TAval
Je cherche à supprimer tous les doublons puis à le trier par ordre
croissant

(ou décroissant).
Et bien sûr le tout en VBA ou bien en API Windows (plus rapides) sans
utiliser les filtres de feuille de calcul
Merci
Cordiales salutations
Robert Dezan







Avatar
AV
J'ai tableau VBA de 10 à 1200 lignes ( 1 colonne) nommé TAval
Je cherche à supprimer tous les doublons puis à le trier par ordre croissant
(ou décroissant).


Du rapide...(A adapter)
La plage à bricoler est en A1:Ax
A1 contient l'étiquette de colonne

Sub zzzz()
[A:A].Insert
With Range("B1", [B65536].End(3))
.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
.SpecialCells(xlCellTypeVisible).Copy [A1]
End With
ActiveSheet.ShowAllData
[A:A].Sort Key1:=[A1], Order1:=xlAscending, Orientation:=xlTopToBottom
[B:B].Delete 'facultatif
End Sub

AV

Avatar
jps
merci monsieur prénom...
jps

"Daniel.M" a écrit dans le message de
news:%
Salut JPS,

Pour une sélection d'une colonne, il y a aussi celle-là, qui utilise la
puissance des formules et qui est assez rapide.


Sub ExtraitUniques1Col()
Dim Plage As Range, A_ As String, Rel As String

Set Plage = Selection ' À adapter

A_ = Plage(1, 1).Address(1, 0) ' Adresse absolue 1ère cell de plage
Rel = Plage(1, 1).Address(0, 0) ' Adresse relative 1ère cell de plage

With Plage.Offset(0, 1) ' à adapter. Ici, une colonne à droite
' Réplique les données qui apparaissent pour la 1ère fois
.Formula = "=IF(COUNTIF(" & A_ & ":" & Rel & "," & Rel & ")=1," & _
Rel & ","""")"
.Value = .Value ' fixe les valeurs
.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, header:=xlNo ' Tri
End With
Set Plage = Nothing
End Sub

Salutations,

Daniel M.

"jps" wrote in message
news:
salut robert
ça va? quoi? à veau leau?
tiens, j'avais ça dans un tiroir de la commode :

Sub ValUniquesACote() ' PlageSrc As Range, CellDest As Range)
'Extrait les valeurs uniques d'une colonne et les renvoie
'dans une autre, à partir de CellDest tiré d'un code de F. Signonneau
Dim Arr1, Elt, Arr2(), Coll As New Collection, i As Integer
' If PlageSrc.Columns.Count > 1 Then Exit Sub ' Mais possible sur 2
colonnes


' Arr1 = PlageSrc.Value
Arr1 = Selection.Value
Dim Colo
Dim Line
Dim err
Colo = Selection.Column
Line = Selection.Row
For Each Elt In Arr1
On Error Resume Next
Coll.Add Elt, CStr(Elt)
If err.Number = 0 Then
ReDim Preserve Arr2(1 To Coll.Count)
Arr2(Coll.Count) = Elt
End If
On Error GoTo 0
Next
For i = 1 To Coll.Count
If IsEmpty(Cells(Line, Colo + 1)) Then
Cells(Line + i, Colo + 1).Value = Coll.Item(i)
Else
MsgBox ("cellule voisine non vide")
MsgBox Coll.Item(i)
End If
Next
Application.Transpose (Arr2)
End Sub

des fois que ça te convienne au moins pour extraire les valeurs uniques
HTH
jps

"Herdet" a écrit dans le message de
news:%
Bonsoir à tous,
Après une recherche infructueuse et des tests un peu laborieux je fais
appel

à vous.
J'ai tableau VBA de 10 à 1200 lignes ( 1 colonne) nommé TAval
Je cherche à supprimer tous les doublons puis à le trier par ordre
croissant

(ou décroissant).
Et bien sûr le tout en VBA ou bien en API Windows (plus rapides) sans
utiliser les filtres de feuille de calcul
Merci
Cordiales salutations
Robert Dezan











Avatar
Herdet
Bonjour tous,
Je suis un peu déçu de vos prestations les gars, JPS en tête, car je pense
avoir clairement exposé le problème :
" j'ai un tableau VBA" à ne pas confondre avec un tableau Excel.
"sans utiliser les filtres de feuille de calcul", ce serait trop simple
mais uniquement du VBA
Faites un peu plus travailler vos méninges...heuh, sans vous obliger, bien
sûr !!!
En tout cas merci de vous être défoncés et à vos claviers

Question 2 pour les pros de la requête :

J'aurais besoin de sélectionner les lignes de données d'un tableau Excel
FERME situé dans une feuille bien précise et correspondant à plusieurs
critères à comparer avec plusieurs champs.
Quelle est la syntaxe de requête VBA pour l'utilisation de "SELECT, FROM et
WHERE nom de feuille, nom de champ" pour plusieurs opérateurs de tests de
valeurs dans les champs "
Je bute sur la syntaxe de définition de la feuille + champ pour where
Feuille1 ChampA = 10 and Feuille1 ChampN = "zaza" etc....par exemple

Pour une plage d'un classeur fermé j'utilise qui marche très bien :
Cmde_SQL = "SELECT * FROM `" & srcSheet & "$" & srcRange & "`"

A+
Robert

"Herdet" a écrit dans le message de news:
#
Bonsoir à tous,
Après une recherche infructueuse et des tests un peu laborieux je fais
appel

à vous.
J'ai tableau VBA de 10 à 1200 lignes ( 1 colonne) nommé TAval
Je cherche à supprimer tous les doublons puis à le trier par ordre
croissant

(ou décroissant).
Et bien sûr le tout en VBA ou bien en API Windows (plus rapides) sans
utiliser les filtres de feuille de calcul
Merci
Cordiales salutations
Robert Dezan




Avatar
Herdet
... ceci dit à défaut, j'utiliserai la solution d'Alain qui comme à son
habitude nous donne des solutions claires, nettes et concises.
Robert

"Herdet" a écrit dans le message de news:

Bonjour tous,
Je suis un peu déçu de vos prestations les gars, JPS en tête, car je pense
avoir clairement exposé le problème :
" j'ai un tableau VBA" à ne pas confondre avec un tableau Excel.
"sans utiliser les filtres de feuille de calcul", ce serait trop simple
mais uniquement du VBA
Faites un peu plus travailler vos méninges...heuh, sans vous obliger, bien
sûr !!!
En tout cas merci de vous être défoncés et à vos claviers

Question 2 pour les pros de la requête :

J'aurais besoin de sélectionner les lignes de données d'un tableau Excel
FERME situé dans une feuille bien précise et correspondant à plusieurs
critères à comparer avec plusieurs champs.
Quelle est la syntaxe de requête VBA pour l'utilisation de "SELECT, FROM
et

WHERE nom de feuille, nom de champ" pour plusieurs opérateurs de tests de
valeurs dans les champs "
Je bute sur la syntaxe de définition de la feuille + champ pour where
Feuille1 ChampA = 10 and Feuille1 ChampN = "zaza" etc....par exemple

Pour une plage d'un classeur fermé j'utilise qui marche très bien :
Cmde_SQL = "SELECT * FROM `" & srcSheet & "$" & srcRange & "`"

A+
Robert

"Herdet" a écrit dans le message de news:
#
Bonsoir à tous,
Après une recherche infructueuse et des tests un peu laborieux je fais
appel

à vous.
J'ai tableau VBA de 10 à 1200 lignes ( 1 colonne) nommé TAval
Je cherche à supprimer tous les doublons puis à le trier par ordre
croissant

(ou décroissant).
Et bien sûr le tout en VBA ou bien en API Windows (plus rapides) sans
utiliser les filtres de feuille de calcul
Merci
Cordiales salutations
Robert Dezan








Avatar
hey Bobby, tu va pas te mettre à remplacer Pestou !!!
;o)))
® © ¿
-----Message d'origine-----
Faites un peu plus travailler vos méninges...heuh, sans
vous obliger, bien sûr !!!


Avatar
Herdet
Salut anonymous (????)
1) qui est-tu pour te permettre de m'appeler Bobby ?
2) le ton de message est un petit encouragement amical adressé à des
personnes connues et pour faire avancer le shmilblic mais je dis que c'est
juste pour JPS, je vais me faire incendier.
A+
Robert


a écrit dans le message de news:
992801c4d3a1$81d82cc0$
hey Bobby, tu va pas te mettre à remplacer Pestou !!!
;o)))
® © ¿
-----Message d'origine-----
Faites un peu plus travailler vos méninges...heuh, sans
vous obliger, bien sûr !!!


Avatar
jps
bon, ben moi, bobby, c'est fini : je ne t'aide plus....
un tableau VBA...un tableau VBA...mais c'est quoi un tableau VBA?
tu pourrais au moins le dire au lieu d'ironiser à l'égard de geedee ou de
moi-même...
jps

"Herdet" a écrit dans le message de
news:%
Salut anonymous (????)
1) qui est-tu pour te permettre de m'appeler Bobby ?
2) le ton de message est un petit encouragement amical adressé à des
personnes connues et pour faire avancer le shmilblic mais je dis que c'est
juste pour JPS, je vais me faire incendier.
A+
Robert


a écrit dans le message de news:
992801c4d3a1$81d82cc0$
hey Bobby, tu va pas te mettre à remplacer Pestou !!!
;o)))
® © ¿
-----Message d'origine-----
Faites un peu plus travailler vos méninges...heuh, sans
vous obliger, bien sûr !!!






Avatar
Daniel.M
Bonjour Robert,

Je suis un peu déçu de vos prestations les gars, JPS en tête, car je pense
avoir clairement exposé le problème :
" j'ai un tableau VBA" à ne pas confondre avec un tableau Excel.



C'est en effet JPS qui m'a aiguillé sur la mauvaise voie. Mais combien de
personnes a-t-il perverties ainsi au cours de sa vie, hein?!

Ceci étant dit, as-tu trouvé ton bonheur pour ta question originale?

Salutations,

Daniel M.

1 2 3 4 5