OVH Cloud OVH Cloud

tri rapide en vba excel

11 réponses
Avatar
Migamamba
bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight

10 réponses

1 2
Avatar
michdenis
Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Avatar
Migamamba
Bonjour Michdenis et merci de m'avoir répondu aussi rapidement.

Hélas cela ne fonctionne qu'en partie :

1°) message d'erreur à DtaOption1:... = erreur compil argument introuvable !

2°) Ce qui est étrange c'est que si je fais un copier/coller, (sur autant de
ligne que je le souhaite), de ma 1ère ligne, mes nombres sont tous triés.
En revanche, si je saisis des nombre différents à chaque ligne, seule
la première sera triée ? Quid ?

merci e m'aider à percer ce mystère* (*pour moi) - cordialement -




Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight





Avatar
michdenis
Bonjour Migamamba,

Tu as bien raison, j'ai omis la boucle dans la procédure "TriHorizontale"

Utilise plutôt ceci:

'-----------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next
End Sub
'---------------------------------


Salutations!







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


Bonjour Michdenis et merci de m'avoir répondu aussi rapidement.

Hélas cela ne fonctionne qu'en partie :

1°) message d'erreur à DtaOption1:... = erreur compil argument introuvable !

2°) Ce qui est étrange c'est que si je fais un copier/coller, (sur autant de
ligne que je le souhaite), de ma 1ère ligne, mes nombres sont tous triés.
En revanche, si je saisis des nombre différents à chaque ligne, seule
la première sera triée ? Quid ?

merci e m'aider à percer ce mystère* (*pour moi) - cordialement -




Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight





Avatar
Migamamba
re,

Après ta modif, (boucle manquante),

Il subsiste toujours l'erreur 1004 .

- Si je supprime la phrase :"DataOption1=xlNormal"
cette erreur disparait et le tri fonctionne, mais , il y a un mais hélas,
pour trier une plage comportant 5 colonnes et 2000 lignes, l'opération
s'effectue en + de 3 minutes !!!! j'ai chronométré . Cette lenteur est-elle
normale ?

merci encore et @ +







Bonjour Migamamba,

Tu as bien raison, j'ai omis la boucle dans la procédure "TriHorizontale"

Utilise plutôt ceci:

'-----------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next
End Sub
'---------------------------------


Salutations!







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


Bonjour Michdenis et merci de m'avoir répondu aussi rapidement.

Hélas cela ne fonctionne qu'en partie :

1°) message d'erreur à DtaOption1:... = erreur compil argument introuvable !

2°) Ce qui est étrange c'est que si je fais un copier/coller, (sur autant de
ligne que je le souhaite), de ma 1ère ligne, mes nombres sont tous triés.
En revanche, si je saisis des nombre différents à chaque ligne, seule
la première sera triée ? Quid ?

merci e m'aider à percer ce mystère* (*pour moi) - cordialement -




Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight










Avatar
michdenis
Va y de cette façon,

:"DataOption1=xlNormal" = Paramêtre version excel 2003. il n'est probablement pas disponible sur ta version. Il s'agit tout
simplement de l'enlever.

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Next
End Sub
'---------------------------------


Salutations!





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


re,

Après ta modif, (boucle manquante),

Il subsiste toujours l'erreur 1004 .

- Si je supprime la phrase :"DataOption1=xlNormal"
cette erreur disparait et le tri fonctionne, mais , il y a un mais hélas,
pour trier une plage comportant 5 colonnes et 2000 lignes, l'opération
s'effectue en + de 3 minutes !!!! j'ai chronométré . Cette lenteur est-elle
normale ?

merci encore et @ +







Bonjour Migamamba,

Tu as bien raison, j'ai omis la boucle dans la procédure "TriHorizontale"

Utilise plutôt ceci:

'-----------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next
End Sub
'---------------------------------


Salutations!







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


Bonjour Michdenis et merci de m'avoir répondu aussi rapidement.

Hélas cela ne fonctionne qu'en partie :

1°) message d'erreur à DtaOption1:... = erreur compil argument introuvable !

2°) Ce qui est étrange c'est que si je fais un copier/coller, (sur autant de
ligne que je le souhaite), de ma 1ère ligne, mes nombres sont tous triés.
En revanche, si je saisis des nombre différents à chaque ligne, seule
la première sera triée ? Quid ?

merci e m'aider à percer ce mystère* (*pour moi) - cordialement -




Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight










Avatar
Migamamba
Désolé de revenir sur ce problème mais bien que j'enlève cette fonctioN (et
ça marche), le tri met un temps très long pour s'effectuer (exemple : 2000
lignes = + de 3 minutes !)
Est ce normal, n'existe-t-il pas une méthode plus rapide ?

cordialement ....




Va y de cette façon,

:"DataOption1=xlNormal" = Paramêtre version excel 2003. il n'est probablement pas disponible sur ta version. Il s'agit tout
simplement de l'enlever.

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Next
End Sub
'---------------------------------


Salutations!





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


re,

Après ta modif, (boucle manquante),

Il subsiste toujours l'erreur 1004 .

- Si je supprime la phrase :"DataOption1=xlNormal"
cette erreur disparait et le tri fonctionne, mais , il y a un mais hélas,
pour trier une plage comportant 5 colonnes et 2000 lignes, l'opération
s'effectue en + de 3 minutes !!!! j'ai chronométré . Cette lenteur est-elle
normale ?

merci encore et @ +







Bonjour Migamamba,

Tu as bien raison, j'ai omis la boucle dans la procédure "TriHorizontale"

Utilise plutôt ceci:

'-----------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next
End Sub
'---------------------------------


Salutations!







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


Bonjour Michdenis et merci de m'avoir répondu aussi rapidement.

Hélas cela ne fonctionne qu'en partie :

1°) message d'erreur à DtaOption1:... = erreur compil argument introuvable !

2°) Ce qui est étrange c'est que si je fais un copier/coller, (sur autant de
ligne que je le souhaite), de ma 1ère ligne, mes nombres sont tous triés.
En revanche, si je saisis des nombre différents à chaque ligne, seule
la première sera triée ? Quid ?

merci e m'aider à percer ce mystère* (*pour moi) - cordialement -




Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight















Avatar
anonymousA
bonjour,

sans vouloir interferer, il me semble que la méthode la plus rapide de
tri sera toujours le tri de tableaux en VBA surtout si la masse d'infos
est grande.
Par ailleurs, pourquoi absolument utiliser VBA alors que l'usage des
fonctions PETITE.VALEUR ou GRAND.VALEUR judicieusement renseignées peut
parfaitement remplir cet office et très très rapidement.

Cordialement,

A+




Désolé de revenir sur ce problème mais bien que j'enlève cette fonctioN (et
ça marche), le tri met un temps très long pour s'effectuer (exemple : 2000
lignes = + de 3 minutes !)
Est ce normal, n'existe-t-il pas une méthode plus rapide ?

cordialement ....





Va y de cette façon,

:"DataOption1=xlNormal" = Paramêtre version excel 2003. il n'est probablement pas disponible sur ta version. Il s'agit tout
simplement de l'enlever.

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Next
End Sub
'---------------------------------


Salutations!





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


re,

Après ta modif, (boucle manquante),

Il subsiste toujours l'erreur 1004 .

- Si je supprime la phrase :"DataOption1=xlNormal"
cette erreur disparait et le tri fonctionne, mais , il y a un mais hélas,
pour trier une plage comportant 5 colonnes et 2000 lignes, l'opération
s'effectue en + de 3 minutes !!!! j'ai chronométré . Cette lenteur est-elle
normale ?

merci encore et @ +








Bonjour Migamamba,

Tu as bien raison, j'ai omis la boucle dans la procédure "TriHorizontale"

Utilise plutôt ceci:

'-----------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next
End Sub
'---------------------------------


Salutations!







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


Bonjour Michdenis et merci de m'avoir répondu aussi rapidement.

Hélas cela ne fonctionne qu'en partie :

1°) message d'erreur à DtaOption1:... = erreur compil argument introuvable !

2°) Ce qui est étrange c'est que si je fais un copier/coller, (sur autant de
ligne que je le souhaite), de ma 1ère ligne, mes nombres sont tous triés.
En revanche, si je saisis des nombre différents à chaque ligne, seule
la première sera triée ? Quid ?

merci e m'aider à percer ce mystère* (*pour moi) - cordialement -




Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
















Avatar
michdenis
Testé sur un vieux PC ... 2500 lignes -> 2 secondes

Essaie ceci :

'-------------------------------------
Sub TriHorizontale(Rg As Range)

Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Next
Application.Calculation = xlCalculationManual
Application.EnableEvents = True
End Sub
'-------------------------------------


Salutations!




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




Désolé de revenir sur ce problème mais bien que j'enlève cette fonctioN (et
ça marche), le tri met un temps très long pour s'effectuer (exemple : 2000
lignes = + de 3 minutes !)
Est ce normal, n'existe-t-il pas une méthode plus rapide ?

cordialement ....




Va y de cette façon,

:"DataOption1=xlNormal" = Paramêtre version excel 2003. il n'est probablement pas disponible sur ta version. Il s'agit tout
simplement de l'enlever.

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Next
End Sub
'---------------------------------


Salutations!





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


re,

Après ta modif, (boucle manquante),

Il subsiste toujours l'erreur 1004 .

- Si je supprime la phrase :"DataOption1=xlNormal"
cette erreur disparait et le tri fonctionne, mais , il y a un mais hélas,
pour trier une plage comportant 5 colonnes et 2000 lignes, l'opération
s'effectue en + de 3 minutes !!!! j'ai chronométré . Cette lenteur est-elle
normale ?

merci encore et @ +







Bonjour Migamamba,

Tu as bien raison, j'ai omis la boucle dans la procédure "TriHorizontale"

Utilise plutôt ceci:

'-----------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next
End Sub
'---------------------------------


Salutations!







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


Bonjour Michdenis et merci de m'avoir répondu aussi rapidement.

Hélas cela ne fonctionne qu'en partie :

1°) message d'erreur à DtaOption1:... = erreur compil argument introuvable !

2°) Ce qui est étrange c'est que si je fais un copier/coller, (sur autant de
ligne que je le souhaite), de ma 1ère ligne, mes nombres sont tous triés.
En revanche, si je saisis des nombre différents à chaque ligne, seule
la première sera triée ? Quid ?

merci e m'aider à percer ce mystère* (*pour moi) - cordialement -




Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight















Avatar
Migamamba
Je tiens à vous remercier pour votre patience mais je craque.
...
J'ai passé une partie de la nuit ; la journée ; avec vos aides en plus et
cela ne fonctionne pas correctement.
J'ai du souci pour l'avenir. Peut-être suis-je fatigué. Je ne comprends plus
rien.
Même en copiant et collant les exemple fournies ; eh bien non.!!!!! Je vais
prendre du recul. merci encore !!!


Je suis allé dans l'aide EXCEL " petite.valeur - grande valeur - mais pas
plus de résultat.

salutations à vous deux...





Testé sur un vieux PC ... 2500 lignes -> 2 secondes

Essaie ceci :

'-------------------------------------
Sub TriHorizontale(Rg As Range)

Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Next
Application.Calculation = xlCalculationManual
Application.EnableEvents = True
End Sub
'-------------------------------------


Salutations!




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




Désolé de revenir sur ce problème mais bien que j'enlève cette fonctioN (et
ça marche), le tri met un temps très long pour s'effectuer (exemple : 2000
lignes = + de 3 minutes !)
Est ce normal, n'existe-t-il pas une méthode plus rapide ?

cordialement ....




Va y de cette façon,

:"DataOption1=xlNormal" = Paramêtre version excel 2003. il n'est probablement pas disponible sur ta version. Il s'agit tout
simplement de l'enlever.

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Next
End Sub
'---------------------------------


Salutations!





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


re,

Après ta modif, (boucle manquante),

Il subsiste toujours l'erreur 1004 .

- Si je supprime la phrase :"DataOption1=xlNormal"
cette erreur disparait et le tri fonctionne, mais , il y a un mais hélas,
pour trier une plage comportant 5 colonnes et 2000 lignes, l'opération
s'effectue en + de 3 minutes !!!! j'ai chronométré . Cette lenteur est-elle
normale ?

merci encore et @ +







Bonjour Migamamba,

Tu as bien raison, j'ai omis la boucle dans la procédure "TriHorizontale"

Utilise plutôt ceci:

'-----------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next
End Sub
'---------------------------------


Salutations!







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


Bonjour Michdenis et merci de m'avoir répondu aussi rapidement.

Hélas cela ne fonctionne qu'en partie :

1°) message d'erreur à DtaOption1:... = erreur compil argument introuvable !

2°) Ce qui est étrange c'est que si je fais un copier/coller, (sur autant de
ligne que je le souhaite), de ma 1ère ligne, mes nombres sont tous triés.
En revanche, si je saisis des nombre différents à chaque ligne, seule
la première sera triée ? Quid ?

merci e m'aider à percer ce mystère* (*pour moi) - cordialement -




Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight




















Avatar
michdenis
Bonjour Migamamba,

tu peux m'envoyer ton classeur directement dans ma BAL... seulement la feuille dont tu veux effectuer le tri horizontal est
suffisant


Salutations!


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



Je tiens à vous remercier pour votre patience mais je craque.
...
J'ai passé une partie de la nuit ; la journée ; avec vos aides en plus et
cela ne fonctionne pas correctement.
J'ai du souci pour l'avenir. Peut-être suis-je fatigué. Je ne comprends plus
rien.
Même en copiant et collant les exemple fournies ; eh bien non.!!!!! Je vais
prendre du recul. merci encore !!!


Je suis allé dans l'aide EXCEL " petite.valeur - grande valeur - mais pas
plus de résultat.

salutations à vous deux...





Testé sur un vieux PC ... 2500 lignes -> 2 secondes

Essaie ceci :

'-------------------------------------
Sub TriHorizontale(Rg As Range)

Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Next
Application.Calculation = xlCalculationManual
Application.EnableEvents = True
End Sub
'-------------------------------------


Salutations!




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




Désolé de revenir sur ce problème mais bien que j'enlève cette fonctioN (et
ça marche), le tri met un temps très long pour s'effectuer (exemple : 2000
lignes = + de 3 minutes !)
Est ce normal, n'existe-t-il pas une méthode plus rapide ?

cordialement ....




Va y de cette façon,

:"DataOption1=xlNormal" = Paramêtre version excel 2003. il n'est probablement pas disponible sur ta version. Il s'agit tout
simplement de l'enlever.

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight
Next
End Sub
'---------------------------------


Salutations!





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


re,

Après ta modif, (boucle manquante),

Il subsiste toujours l'erreur 1004 .

- Si je supprime la phrase :"DataOption1=xlNormal"
cette erreur disparait et le tri fonctionne, mais , il y a un mais hélas,
pour trier une plage comportant 5 colonnes et 2000 lignes, l'opération
s'effectue en + de 3 minutes !!!! j'ai chronométré . Cette lenteur est-elle
normale ?

merci encore et @ +







Bonjour Migamamba,

Tu as bien raison, j'ai omis la boucle dans la procédure "TriHorizontale"

Utilise plutôt ceci:

'-----------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

For Each R In Rg.Rows
R.Sort Key1:=R.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next
End Sub
'---------------------------------


Salutations!







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


Bonjour Michdenis et merci de m'avoir répondu aussi rapidement.

Hélas cela ne fonctionne qu'en partie :

1°) message d'erreur à DtaOption1:... = erreur compil argument introuvable !

2°) Ce qui est étrange c'est que si je fais un copier/coller, (sur autant de
ligne que je le souhaite), de ma 1ère ligne, mes nombres sont tous triés.
En revanche, si je saisis des nombre différents à chaque ligne, seule
la première sera triée ? Quid ?

merci e m'aider à percer ce mystère* (*pour moi) - cordialement -




Bonjour Migamamba,

Voici une façon de faire : copie ce qui suit dans un module standard :
Dans la procédure "Test", adapte le nom de la feuille et la première
colonne où sont situées tes données.

'---------------------------------
Sub test()

Dim Plg As Range
With Worksheets("Feuil1")
Set Plg = .Range("A1:A" & _
.Range("A65536").End(xlUp).Row).Resize(, 5)
End With

Application.ScreenUpdating = False
TriHorizontale Plg

End Sub

'---------------------------------
Sub TriHorizontale(Rg As Range)

Rg.Sort Key1:=Rg(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal

End Sub
'---------------------------------


Salutations!





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

bonjour, help,

je voudrais trier de manière très rapide et horizontalement des nombres sur
: 5 colonnes et 3000 lignes (par exemple) ("a1:e3000") . Si je pends comme
exemple la macro automatisée en mettant ma plage de cellule, cela ne me tri
qu'une seule ligne ! qui peut me donner la solution ? Merci par avance .
(Vous l'avez compris je débute). (voici l'exemple ...qui ne fonctionne ...pas
!)
Range("a1:e3000").Select
Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight




















1 2