Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trier une selection dans une variable est-ce possible ?

10 réponses
Avatar
Alfred WALLACE
Bonjour,

ma base comporte pas mal de colonnes.
j'aimerai ne pas =EAtre obliger de faire des feuilles temporaires chaque
fois que je veux faire une op=E9ration sur une colonne.

est-ce que je peux definir une zone "tempo" qui serait initialis=E9e
avec "B1:B1000" (par exemple)
et ensuite appliquer un trie, et/ou un filtre elabor=E9 avec valeur
uniques ?

ceci afin de ne pas risquer de d=E9sorganiser ma base.


Merci


Jos=E9

10 réponses

Avatar
Alfred WALLACE
heu.... pas d'idée ?
José


Alfred WALLACE wrote:
Bonjour,

ma base comporte pas mal de colonnes.
j'aimerai ne pas être obliger de faire des feuilles temporaires chaque
fois que je veux faire une opération sur une colonne.

est-ce que je peux definir une zone "tempo" qui serait initialisée
avec "B1:B1000" (par exemple)
et ensuite appliquer un trie, et/ou un filtre elaboré avec valeur
uniques ?

ceci afin de ne pas risquer de désorganiser ma base.


Merci


José


Avatar
anonymousA
perso, je ne comprends pas réellement la question.Il est toujours
possible de récupérer des données d'une feuille dans un tableau ( au
sens logique du terme) puis de trier ce tableau ou de constituer à
partir de ce tableau une collection de valeurs uniques s'il y a des
doublons, mais la question est à quoi celà peut-il bien servir ?

A+

Alfred WALLACE wrote:
heu.... pas d'idée ?
José


Alfred WALLACE wrote:
Bonjour,

ma base comporte pas mal de colonnes.
j'aimerai ne pas être obliger de faire des feuilles temporaires chaque
fois que je veux faire une opération sur une colonne.

est-ce que je peux definir une zone "tempo" qui serait initialisée
avec "B1:B1000" (par exemple)
et ensuite appliquer un trie, et/ou un filtre elaboré avec valeur
uniques ?

ceci afin de ne pas risquer de désorganiser ma base.


Merci


José




Avatar
Alfred WALLACE
anonymousA wrote:
perso, je ne comprends pas réellement la question.Il est toujours
possible de récupérer des données d'une feuille dans un tableau ( au
sens logique du terme) puis de trier ce tableau ou de constituer à
partir de ce tableau une collection de valeurs uniques s'il y a des
doublons, mais la question est à quoi celà peut-il bien servir ?

A+



Bonjour anonymousA, :-)

pour le moment voilà ce que je fais :
1 je crée une feuille tempo
2 je retourne dans la feuille de ma base
3 je me positionne sur la colonne voulue et je la selectionne
completement.
4 je copie cette selection dans la feuille tempo
5 je trie la colonne dans tempo
6 je fais un filtre valeur unique
7 enfin, les valeurs xlvisible je les copie dans une combobox.

Je me demandais si je ne pouvais pas faire la même chose, mais au lieu
de passer
par une feuille tempo, placer la colonne initiale dans une variable
(une collection ?)
et d'appliquer toutes ces opérations à la variable.

Mais bon, si çà ne sert à rien alors je laisse comme c'est.

Merci d'avoi rrépondu.


José

Avatar
anonymousA
on peut utiliser la méthode suivante qui est a adapter pour le
range("G1:G50000").Utilise une collection et est très rapide.

Dim Tabentree, Sandoublons As New Collection, I As Long, J As Long

Tabentree = Range("G1:G50000").Value

For I = LBound(Tabentree, 1) To UBound(Tabentree, 1)
On Error Resume Next
Sandoublons.Add Tabentree(I, 1), CStr(Tabentree(I, 1))
Next
On Error GoTo 0

For I = 1 To Sandoublons.Count - 1

For J = I + 1 To Sandoublons.Count

If Sandoublons(I) > Sandoublons(J) Then
Swap1 = Sandoublons(I)
Swap2 = Sandoublons(J)
Sandoublons.Add Swap1, before:=J
Sandoublons.Add Swap2, before:=I
Sandoublons.Remove I + 1 'supprime l'item considéré
Sandoublons.Remove J + 1 'supprime l'item considéré
End If

Next J

Next I

A+

Alfred WALLACE wrote:
anonymousA wrote:
perso, je ne comprends pas réellement la question.Il est toujours
possible de récupérer des données d'une feuille dans un tableau ( au
sens logique du terme) puis de trier ce tableau ou de constituer à
partir de ce tableau une collection de valeurs uniques s'il y a des
doublons, mais la question est à quoi celà peut-il bien servir ?

A+



Bonjour anonymousA, :-)

pour le moment voilà ce que je fais :
1 je crée une feuille tempo
2 je retourne dans la feuille de ma base
3 je me positionne sur la colonne voulue et je la selectionne
completement.
4 je copie cette selection dans la feuille tempo
5 je trie la colonne dans tempo
6 je fais un filtre valeur unique
7 enfin, les valeurs xlvisible je les copie dans une combobox.

Je me demandais si je ne pouvais pas faire la même chose, mais au lieu
de passer
par une feuille tempo, placer la colonne initiale dans une variable
(une collection ?)
et d'appliquer toutes ces opérations à la variable.

Mais bon, si çà ne sert à rien alors je laisse comme c'est.

Merci d'avoi rrépondu.


José



Avatar
anonymousA
Bien sur , après ,il n'y a plus qu'à remplir le combobox avec la
collection Sansdoublons

For I=1 to Sansdoublons.count
me.combobox1.additem Sansdoublons(I)
next

et le tour est joué en quelques fractions de secondes

A+

on peut utiliser la méthode suivante qui est a adapter pour le
range("G1:G50000").Utilise une collection et est très rapide.

Dim Tabentree, Sandoublons As New Collection, I As Long, J As Long

Tabentree = Range("G1:G50000").Value

For I = LBound(Tabentree, 1) To UBound(Tabentree, 1)
On Error Resume Next
Sandoublons.Add Tabentree(I, 1), CStr(Tabentree(I, 1))
Next
On Error GoTo 0

For I = 1 To Sandoublons.Count - 1

For J = I + 1 To Sandoublons.Count

If Sandoublons(I) > Sandoublons(J) Then
Swap1 = Sandoublons(I)
Swap2 = Sandoublons(J)
Sandoublons.Add Swap1, before:=J
Sandoublons.Add Swap2, before:=I
Sandoublons.Remove I + 1 'supprime l'item considéré
Sandoublons.Remove J + 1 'supprime l'item considéré
End If

Next J

Next I

A+

Alfred WALLACE wrote:
anonymousA wrote:
perso, je ne comprends pas réellement la question.Il est toujours
possible de récupérer des données d'une feuille dans un tableau ( au
sens logique du terme) puis de trier ce tableau ou de constituer à
partir de ce tableau une collection de valeurs uniques s'il y a des
doublons, mais la question est à quoi celà peut-il bien servir ?

A+

Bonjour anonymousA, :-)


pour le moment voilà ce que je fais :
1 je crée une feuille tempo
2 je retourne dans la feuille de ma base
3 je me positionne sur la colonne voulue et je la selectionne
completement.
4 je copie cette selection dans la feuille tempo
5 je trie la colonne dans tempo
6 je fais un filtre valeur unique
7 enfin, les valeurs xlvisible je les copie dans une combobox.

Je me demandais si je ne pouvais pas faire la même chose, mais au lieu
de passer
par une feuille tempo, placer la colonne initiale dans une variable
(une collection ?)
et d'appliquer toutes ces opérations à la variable.

Mais bon, si çà ne sert à rien alors je laisse comme c'est.

Merci d'avoi rrépondu.


José






Avatar
Alfred WALLACE
-M-E-R-C-I- !!!

çà marche effectivement ... heu .... j'abuserais bien encore un peu
de ta patience, parceque

comme j'ai plusieur combobox dans ma feuille, j'aimerai que les
variables que tu
déclare "collection" soient public.

Or, j'ai un module VARIABLE dans lequel j'ai écris çà :

Public Dim Tabentree, Sandoublons As New Collection, I As Long, J As
Long

mais çà ne marche pô ... ?


Alors, comment je peux rendre public la collection ? est-ce que c'est
possible ?

oubien dois-je utiliser une fonction ? (mais alors là... comment
passer les parametres ?)


Merci

José







anonymousA wrote:
Bien sur , après ,il n'y a plus qu'à remplir le combobox avec la
collection Sansdoublons

For I=1 to Sansdoublons.count
me.combobox1.additem Sansdoublons(I)
next

et le tour est joué en quelques fractions de secondes

A+

on peut utiliser la méthode suivante qui est a adapter pour le
range("G1:G50000").Utilise une collection et est très rapide.

Dim Tabentree, Sandoublons As New Collection, I As Long, J As Long

Tabentree = Range("G1:G50000").Value

For I = LBound(Tabentree, 1) To UBound(Tabentree, 1)
On Error Resume Next
Sandoublons.Add Tabentree(I, 1), CStr(Tabentree(I, 1))
Next
On Error GoTo 0

For I = 1 To Sandoublons.Count - 1

For J = I + 1 To Sandoublons.Count

If Sandoublons(I) > Sandoublons(J) Then
Swap1 = Sandoublons(I)
Swap2 = Sandoublons(J)
Sandoublons.Add Swap1, before:=J
Sandoublons.Add Swap2, before:=I
Sandoublons.Remove I + 1 'supprime l'item considéré
Sandoublons.Remove J + 1 'supprime l'item considéré
End If

Next J

Next I

A+
anonymousA wrote:


Bien sur , après ,il n'y a plus qu'à remplir le combobox avec la
collection Sansdoublons

For I=1 to Sansdoublons.count
me.combobox1.additem Sansdoublons(I)
next

et le tour est joué en quelques fractions de secondes

A+

on peut utiliser la méthode suivante qui est a adapter pour le
range("G1:G50000").Utilise une collection et est très rapide.

Dim Tabentree, Sandoublons As New Collection, I As Long, J As Long

Tabentree = Range("G1:G50000").Value

For I = LBound(Tabentree, 1) To UBound(Tabentree, 1)
On Error Resume Next
Sandoublons.Add Tabentree(I, 1), CStr(Tabentree(I, 1))
Next
On Error GoTo 0

For I = 1 To Sandoublons.Count - 1

For J = I + 1 To Sandoublons.Count

If Sandoublons(I) > Sandoublons(J) Then
Swap1 = Sandoublons(I)
Swap2 = Sandoublons(J)
Sandoublons.Add Swap1, before:=J
Sandoublons.Add Swap2, before:=I
Sandoublons.Remove I + 1 'supprime l'item considéré
Sandoublons.Remove J + 1 'supprime l'item considéré
End If

Next J

Next I

A+




Avatar
Alfred WALLACE
-M-E-R-C-I- !!!

çà marche effectivement ... heu .... j'abuserais bien encore un peu
de ta patience, parceque

comme j'ai plusieur combobox dans ma feuille, j'aimerai que les
variables que tu
déclare "collection" soient public.

Or, j'ai un module VARIABLE dans lequel j'ai écris çà :

Public Dim Tabentree, Sandoublons As New Collection, I As Long, J As
Long

mais çà ne marche pô ... ?


Alors, comment je peux rendre public la collection ? est-ce que c'est
possible ?

oubien dois-je utiliser une fonction ? (mais alors là... comment
passer les parametres ?)


Merci

José







anonymousA wrote:
Bien sur , après ,il n'y a plus qu'à remplir le combobox avec la
collection Sansdoublons

For I=1 to Sansdoublons.count
me.combobox1.additem Sansdoublons(I)
next

et le tour est joué en quelques fractions de secondes

A+

on peut utiliser la méthode suivante qui est a adapter pour le
range("G1:G50000").Utilise une collection et est très rapide.

Dim Tabentree, Sandoublons As New Collection, I As Long, J As Long

Tabentree = Range("G1:G50000").Value

For I = LBound(Tabentree, 1) To UBound(Tabentree, 1)
On Error Resume Next
Sandoublons.Add Tabentree(I, 1), CStr(Tabentree(I, 1))
Next
On Error GoTo 0

For I = 1 To Sandoublons.Count - 1

For J = I + 1 To Sandoublons.Count

If Sandoublons(I) > Sandoublons(J) Then
Swap1 = Sandoublons(I)
Swap2 = Sandoublons(J)
Sandoublons.Add Swap1, before:=J
Sandoublons.Add Swap2, before:=I
Sandoublons.Remove I + 1 'supprime l'item considéré
Sandoublons.Remove J + 1 'supprime l'item considéré
End If

Next J

Next I

A+




Avatar
anonymousA
Public Tabentree, Sandoublons As New Collection, I As Long, J As Long

On ne peut associer Public et Dim

A+

-M-E-R-C-I- !!!

çà marche effectivement ... heu .... j'abuserais bien encore un peu
de ta patience, parceque

comme j'ai plusieur combobox dans ma feuille, j'aimerai que les
variables que tu
déclare "collection" soient public.

Or, j'ai un module VARIABLE dans lequel j'ai écris çà :

Public Dim Tabentree, Sandoublons As New Collection, I As Long, J As
Long

mais çà ne marche pô ... ?


Alors, comment je peux rendre public la collection ? est-ce que c'est
possible ?

oubien dois-je utiliser une fonction ? (mais alors là... comment
passer les parametres ?)


Merci

José







anonymousA wrote:
Bien sur , après ,il n'y a plus qu'à remplir le combobox avec la
collection Sansdoublons

For I=1 to Sansdoublons.count
me.combobox1.additem Sansdoublons(I)
next

et le tour est joué en quelques fractions de secondes

A+

on peut utiliser la méthode suivante qui est a adapter pour le
range("G1:G50000").Utilise une collection et est très rapide.

Dim Tabentree, Sandoublons As New Collection, I As Long, J As Long

Tabentree = Range("G1:G50000").Value

For I = LBound(Tabentree, 1) To UBound(Tabentree, 1)
On Error Resume Next
Sandoublons.Add Tabentree(I, 1), CStr(Tabentree(I, 1))
Next
On Error GoTo 0

For I = 1 To Sandoublons.Count - 1

For J = I + 1 To Sandoublons.Count

If Sandoublons(I) > Sandoublons(J) Then
Swap1 = Sandoublons(I)
Swap2 = Sandoublons(J)
Sandoublons.Add Swap1, before:=J
Sandoublons.Add Swap2, before:=I
Sandoublons.Remove I + 1 'supprime l'item considéré
Sandoublons.Remove J + 1 'supprime l'item considéré
End If

Next J

Next I

A+







Avatar
Alfred WALLACE
Bonjour,
oui, mais alors, comment est ce que je peux transformer la SUB que tu
m'as montré comme exemple et qui fonctionne tres bien, en fonction ?

en gros, en entrée je devrais pouvoir passer le numéro de la colonne
qui contiend
les données, et en sortie, obtenir une liste de valeur que je pourrais
injecter dans ma
combobox...

c'est pas de la tarte, de plus, au moment de l'execution de ce code je
suis
dans l'éventment _change de la combobox concernée.

Merci
José


anonymousA wrote:
Public Tabentree, Sandoublons As New Collection, I As Long, J As Long

On ne peut associer Public et Dim

A+

-M-E-R-C-I- !!!

çà marche effectivement ... heu .... j'abuserais bien encore un peu
de ta patience, parceque

comme j'ai plusieur combobox dans ma feuille, j'aimerai que les
variables que tu
déclare "collection" soient public.

Or, j'ai un module VARIABLE dans lequel j'ai écris çà :

Public Dim Tabentree, Sandoublons As New Collection, I As Long, J As
Long

mais çà ne marche pô ... ?


Alors, comment je peux rendre public la collection ? est-ce que c'est
possible ?

oubien dois-je utiliser une fonction ? (mais alors là... comment
passer les parametres ?)


Merci

José







anonymousA wrote:
Bien sur , après ,il n'y a plus qu'à remplir le combobox avec la
collection Sansdoublons

For I=1 to Sansdoublons.count
me.combobox1.additem Sansdoublons(I)
next

et le tour est joué en quelques fractions de secondes

A+

on peut utiliser la méthode suivante qui est a adapter pour le
range("G1:G50000").Utilise une collection et est très rapide.

Dim Tabentree, Sandoublons As New Collection, I As Long, J As Long

Tabentree = Range("G1:G50000").Value

For I = LBound(Tabentree, 1) To UBound(Tabentree, 1)
On Error Resume Next
Sandoublons.Add Tabentree(I, 1), CStr(Tabentree(I, 1))
Next
On Error GoTo 0

For I = 1 To Sandoublons.Count - 1

For J = I + 1 To Sandoublons.Count

If Sandoublons(I) > Sandoublons(J) Then
Swap1 = Sandoublons(I)
Swap2 = Sandoublons(J)
Sandoublons.Add Swap1, before:=J
Sandoublons.Add Swap2, before:=I
Sandoublons.Remove I + 1 'supprime l'item considér é
Sandoublons.Remove J + 1 'supprime l'item considér é
End If

Next J

Next I

A+









Avatar
anonymousA
C'est possible que tu transformes la sub en fonction. Pour autant, ca
implique que le range dont se sert la fonction pour constituer la
collection soit elle une variable de type Public.Dans ces conditions ,
on peut rendre publique aussi si ca te tente la variable de restour de
la fonction et du coup ta collection exposée est aussi publique.
Ceci, dit dans l'autre post que tu initié ce matin, je te faisais une
réponse différente en gardant l'aspect SUb et c'est cette réponse
qui me parait la mieux adaptée
Ceci dit, si tu as envie d'essayer le passage par une fonction, voici
une solution possible

Dans un module standard, tu écris

Public rng, sd As Collection
Sub mise_en_collection()

'Dim sd As New Collection

Set rng = Range("E1:E42491")

Set sd = Sansdoublons

End Sub

Function Sansdoublons() As Collection

Dim tt As New Collection

Tabentree = rng.Value
For II = LBound(Tabentree, 1) To UBound(Tabentree, 1)
On Error Resume Next
tt.Add Tabentree(II, 1), CStr(Tabentree(II, 1))
Next
On Error GoTo 0

MsgBox tt.Count
For II = 1 To tt.Count - 1
For JJ = II + 1 To tt.Count
If tt(II) > tt(JJ) Then
Swap1 = tt(II)
Swap2 = tt(JJ)
tt.Add Swap1, before:=JJ
tt.Add Swap2, before:=II
tt.Remove II + 1 'supprime l'item considéré
tt.Remove JJ + 1 'supprime l'item considéré
End If
Next JJ
Next II
Set Sansdoublons = tt
Set tt=nothing

End Function

A+

Alfred WALLACE wrote:
Bonjour,
oui, mais alors, comment est ce que je peux transformer la SUB que tu
m'as montré comme exemple et qui fonctionne tres bien, en fonction ?

en gros, en entrée je devrais pouvoir passer le numéro de la colonne
qui contiend
les données, et en sortie, obtenir une liste de valeur que je pourrais
injecter dans ma
combobox...

c'est pas de la tarte, de plus, au moment de l'execution de ce code je
suis
dans l'éventment _change de la combobox concernée.

Merci
José


anonymousA wrote:
Public Tabentree, Sandoublons As New Collection, I As Long, J As Long

On ne peut associer Public et Dim

A+

-M-E-R-C-I- !!!

çà marche effectivement ... heu .... j'abuserais bien encore un p eu
de ta patience, parceque

comme j'ai plusieur combobox dans ma feuille, j'aimerai que les
variables que tu
déclare "collection" soient public.

Or, j'ai un module VARIABLE dans lequel j'ai écris çà :

Public Dim Tabentree, Sandoublons As New Collection, I As Long, J As
Long

mais çà ne marche pô ... ?


Alors, comment je peux rendre public la collection ? est-ce que c'est
possible ?

oubien dois-je utiliser une fonction ? (mais alors là... comment
passer les parametres ?)


Merci

José







anonymousA wrote:
Bien sur , après ,il n'y a plus qu'à remplir le combobox avec la
collection Sansdoublons

For I=1 to Sansdoublons.count
me.combobox1.additem Sansdoublons(I)
next

et le tour est joué en quelques fractions de secondes

A+

on peut utiliser la méthode suivante qui est a adapter pour le
range("G1:G50000").Utilise une collection et est très rapide.

Dim Tabentree, Sandoublons As New Collection, I As Long, J As Long

Tabentree = Range("G1:G50000").Value

For I = LBound(Tabentree, 1) To UBound(Tabentree, 1)
On Error Resume Next
Sandoublons.Add Tabentree(I, 1), CStr(Tabentree(I, 1))
Next
On Error GoTo 0

For I = 1 To Sandoublons.Count - 1

For J = I + 1 To Sandoublons.Count

If Sandoublons(I) > Sandoublons(J) Then
Swap1 = Sandoublons(I)
Swap2 = Sandoublons(J)
Sandoublons.Add Swap1, before:=J
Sandoublons.Add Swap2, before:=I
Sandoublons.Remove I + 1 'supprime l'item considé ré
Sandoublons.Remove J + 1 'supprime l'item considé ré
End If

Next J

Next I

A+