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

tri selon l'ordre des colonnes [VBA, Excel 2000]

16 réponses
Avatar
J
Bonjour à tous [VBA, Excel 2000]

En colonne A j'ai des adresses de cellules que je veux trier "dans
l'ordre des colonnes puis des lignes"
Comment faire, svp ?

En pratique je n'utilise que 12 colonnes (classées dans un array) :
("k:k,u:u,ae:ae,ao:ao,ay:ay,bi:bi,bs:bs,cc:cc,cm:cm,cw:cw,dg:dg,dq:dq")

exemple :
sans tri tri XL souhaité
pas bon bon
$K$5 $AY$16 $K$5
$AY$5 $AY$17 $K$7
$AY$7 $AY$5 $K$8
$U$8 $AY$7 $K$12
$K$7 $K$12 $U$8
$K$8 $K$5 $AY$5
$K$12 $K$7 $AY$7
$AY$16 $K$8 $AY$16
$AY$17 $U$8 $AY$17

Merci pour l'aide
@+
J@@

10 réponses

1 2
Avatar
DanielCo
Bonjour,
en colonne B, mets :
ÎLLULE("col";INDIRECT(A1))
en colonne C, mets
ÎLLULE("ligne";INDIRECT(A1))
et trie sur ces deux colonnes avec la colonne B en majeur.
Cordialement.
Daniel


Bonjour à tous [VBA, Excel 2000]

En colonne A j'ai des adresses de cellules que je veux trier "dans l'ordre
des colonnes puis des lignes"
Comment faire, svp ?

En pratique je n'utilise que 12 colonnes (classées dans un array) :
("k:k,u:u,ae:ae,ao:ao,ay:ay,bi:bi,bs:bs,cc:cc,cm:cm,cw:cw,dg:dg,dq:dq")

exemple :
sans tri tri XL souhaité
pas bon bon
$K$5 $AY$16 $K$5
$AY$5 $AY$17 $K$7
$AY$7 $AY$5 $K$8
$U$8 $AY$7 $K$12
$K$7 $K$12 $U$8
$K$8 $K$5 $AY$5
$K$12 $K$7 $AY$7
$AY$16 $K$8 $AY$16
$AY$17 $U$8 $AY$17

Merci pour l'aide
@+
J@@
Avatar
Maude Este
Bonsour®

dcolardelle a écrit
en colonne B, mets :
ÎLLULE("col";INDIRECT(A1))
en colonne C, mets
ÎLLULE("ligne";INDIRECT(A1))
et trie sur ces deux colonnes avec la colonne B en majeur.



heu... ???
pourquoi pas simplement :
=COLONNE(INDIRECT(A1))
et
=LIGNE(INDIRECT(A1))
;o)))
Avatar
DanielCo
Bonjour,
Oui, pourquoi faire simple... ?
Daniel


Bonsour®

dcolardelle a écrit
en colonne B, mets :
ÎLLULE("col";INDIRECT(A1))
en colonne C, mets
ÎLLULE("ligne";INDIRECT(A1))
et trie sur ces deux colonnes avec la colonne B en majeur.



heu... ???
pourquoi pas simplement :
=COLONNE(INDIRECT(A1))
et
=LIGNE(INDIRECT(A1))
;o)))
Avatar
J
Bonjour et merci pour l'aide, Daniel & Modeste

J'ai vba-ïsé la réponse, ce qui me semble fonctionner, mais
** - comment éviter d'écrire dans les cellules E1 et F1, svp ?


For i = [A65000].End(xlUp).Row To 1 Step -1
If Application.CountA(Rows(i)) <> 0 Then Cells(i, 5).Select
With Selection
.FormulaR1C1 = "=COLUMN(INDIRECT(RC[-4]))"
End With
If Application.CountA(Rows(i)) <> 0 Then Cells(i, 6).Select
With Selection
.FormulaR1C1 = "=row(INDIRECT(RC[-5]))"
End With
Next i

'et ensuite voilà pour le tri
With ActiveSheet
With .Range("A2:f" & .Range("A65536").End(xlUp).Row)
.Sort Key1:=.Item(1, 5), order1:=xlAscending, _
Key2:=.Item(1, 6), order2:=xlAscending, Header:=xlYes
End With
End With

Merci encore
@+
J@@


Le 03/06/2011 22:56, Maude Este a écrit :
Bonsour®

dcolardelle a écrit
en colonne B, mets :
ÎLLULE("col";INDIRECT(A1))
en colonne C, mets
ÎLLULE("ligne";INDIRECT(A1))
et trie sur ces deux colonnes avec la colonne B en majeur.



heu... ???
pourquoi pas simplement :
=COLONNE(INDIRECT(A1))
et
=LIGNE(INDIRECT(A1))
;o)))
Avatar
J
Après une petite sieste :
For i = [A65000].End(xlUp).Row To 2 Step -1


Le 04/06/2011 16:04, J@@ a écrit :
** - comment éviter d'écrire dans les cellules E1 et F1, svp ?
Avatar
michel ou sam
Bonjour, ceci a l'air de fonctionner
mais comment dimensionner le tableau en fonction de fin ?
VBA demande une constante !

fin = [A65000].End(xlUp).Row
Dim Tableau(100, 1)

'remplissage du tableau
For i = 2 To fin
Adresse = Range(Cells(i, 1).Value).Address
Colonne = Range(Cells(i, 1).Value).Column
Ligne = Range(Cells(i, 1).Value).Row
Tableau(i - 2, 0) = Adresse
Tableau(i - 2, 1) = Colonne * 10000 + Ligne
Next i

'tri du tableau sur la colonne + ligne
For i = 0 To fin - 3 'Boucle externe
For j = 0 To fin - 3 'Boucle interne
If Tableau(j, 1) > Tableau(j + 1, 1) Then
TempA = Tableau(j, 0): TempC = Tableau(j, 1)
Tableau(j, 0) = Tableau(j + 1, 0): Tableau(j, 1) = Tableau(j + 1, 1):
Tableau(j + 1, 0) = TempA: Tableau(j + 1, 1) = TempC
End If
Next j
Next i

'mise en place dans feuille excel
For i = 2 To fin
Cells(i, 2) = Tableau(i - 2, 0)
Next i

End Sub

Michel

"J@@" a écrit dans le message de news:
isccmr$2dm$
Bonjour à tous [VBA, Excel 2000]

En colonne A j'ai des adresses de cellules que je veux trier "dans l'ordre
des colonnes puis des lignes"
Comment faire, svp ?

En pratique je n'utilise que 12 colonnes (classées dans un array) :
("k:k,u:u,ae:ae,ao:ao,ay:ay,bi:bi,bs:bs,cc:cc,cm:cm,cw:cw,dg:dg,dq:dq")

exemple :
sans tri tri XL souhaité
pas bon bon
$K$5 $AY$16 $K$5
$AY$5 $AY$17 $K$7
$AY$7 $AY$5 $K$8
$U$8 $AY$7 $K$12
$K$7 $K$12 $U$8
$K$8 $K$5 $AY$5
$K$12 $K$7 $AY$7
$AY$16 $K$8 $AY$16
$AY$17 $U$8 $AY$17

Merci pour l'aide
@+
J@@
Avatar
J
Bonjour Michel

je ne comprends pas grand chose, mais cette méthode de tri fonctionne
très bien.
Pourquoi Colonne * 10000 ?

Merci
J@@


Le 05/06/2011 04:49, michel ou sam a écrit :
Bonjour, ceci a l'air de fonctionner
mais comment dimensionner le tableau en fonction de fin ?
VBA demande une constante !

fin = [A65000].End(xlUp).Row
Dim Tableau(100, 1)

'remplissage du tableau
For i = 2 To fin
Adresse = Range(Cells(i, 1).Value).Address
Colonne = Range(Cells(i, 1).Value).Column
Ligne = Range(Cells(i, 1).Value).Row
Tableau(i - 2, 0) = Adresse
Tableau(i - 2, 1) = Colonne * 10000 + Ligne
Next i

'tri du tableau sur la colonne + ligne
For i = 0 To fin - 3 'Boucle externe
For j = 0 To fin - 3 'Boucle interne
If Tableau(j, 1)> Tableau(j + 1, 1) Then
TempA = Tableau(j, 0): TempC = Tableau(j, 1)
Tableau(j, 0) = Tableau(j + 1, 0): Tableau(j, 1) = Tableau(j + 1, 1):
Tableau(j + 1, 0) = TempA: Tableau(j + 1, 1) = TempC
End If
Next j
Next i

'mise en place dans feuille excel
For i = 2 To fin
Cells(i, 2) = Tableau(i - 2, 0)
Next i

End Sub

Michel

"J@@" a écrit dans le message de news:
isccmr$2dm$
Bonjour à tous [VBA, Excel 2000]

En colonne A j'ai des adresses de cellules que je veux trier "dans l'ordre
des colonnes puis des lignes"
Comment faire, svp ?

En pratique je n'utilise que 12 colonnes (classées dans un array) :
("k:k,u:u,ae:ae,ao:ao,ay:ay,bi:bi,bs:bs,cc:cc,cm:cm,cw:cw,dg:dg,dq:dq")

exemple :
sans tri tri XL souhaité
pas bon bon
$K$5 $AY$16 $K$5
$AY$5 $AY$17 $K$7
$AY$7 $AY$5 $K$8
$U$8 $AY$7 $K$12
$K$7 $K$12 $U$8
$K$8 $K$5 $AY$5
$K$12 $K$7 $AY$7
$AY$16 $K$8 $AY$16
$AY$17 $U$8 $AY$17

Merci pour l'aide
@+
J@@




Avatar
Maude Este
Bonsour®

"J@@" a écrit
je ne comprends pas grand chose, mais cette méthode de tri fonctionne très
bien.
Pourquoi Colonne * 10000 ?



pour qu'en cas de colonnes identiques , la notion de ligne soit pondérée mais de
façon moins significative
moi même j'avais pondéré de façon que le numéro de ligne n'intervienne que dans
la partie décimale
colonne(x)+ligne(y)/10^6
Avatar
J
Bonjour

Ok, dans mes mots à moi, ce serait pour que l'ordre de grandeur des 256
colonnes soit, à peux près, voisin du nombre de lignes (ici 65536)?

Question subsidiaire, Geedee :
1 - > "moi même j'avais pondéré" ... veut dire que tu as envoyé un
message sur une solution vba ? Je ne l'ai pas reçu.

J@@

Le 05/06/2011 13:08, Maude Este a écrit :
Bonsour®

"J@@" a écrit
je ne comprends pas grand chose, mais cette méthode de tri fonctionne
très bien.
Pourquoi Colonne * 10000 ?



pour qu'en cas de colonnes identiques , la notion de ligne soit pondérée
mais de façon moins significative
moi même j'avais pondéré de façon que le numéro de ligne n'intervienne
que dans la partie décimale
colonne(x)+ligne(y)/10^6
Avatar
Maude Este
Bonsour®

"J@@" a écrit
Question subsidiaire, Geedee :
1 - > "moi même j'avais pondéré" ... veut dire que tu as envoyé un message sur
une solution vba ? Je ne l'ai pas reçu.



;o)))
en effet j'ai jugé que ma solution était très similaire à celle de "Michel ou
sam"
à l'instruction prés:
Tableau(i - 2, 1) = Colonne +(Ligne/10^6)

;o))) bug éventuel (tri erroné) avec XL2007+
au cas ou il y aurait plus d'un million de lignes...
1 2