Tri en VBA

tortuegenie Messages postés 110 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 21 octobre 2008 - 10 août 2006 à 10:26
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 10 août 2006 à 16:11
C'est encore moi malheureusement je crois que le VB n'est pas fait pour moi

Quelqu'un peut me dire ce qui est faux dans mon code.

Dim LaCase As Range
    Worksheets(4).Activate
    ActiveSheet.Columns("A:A").Select
    For Each LaCase In Selection
        If (LaCase.Row >= 8) Then
            Selection.Sort
        End If
    Next

Je veux trier la colonne A à partir de la ligne 7 et jusqu'à la fin dans l'ordre croissant des nombres.
Merci

22 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
10 août 2006 à 10:44
Tu es en Excel c'est bien ça ?
Qu'est-ce que tu t'embêtes avec ton code ? Utilise donc la fonction de tri d'excel :

Temp = "A7:A" & DernièreLigne
Range(Temp).Sort Key1:=Range("A7"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

Avec ce bout de code, il te reste une seule chose à faire, déterminer la dernièreligne de ta colonne à trier.
Ou alors, si tu ne veux pas t'embêter et que tu sais que tu n'auras pas plus d'un nb donné de lignes, tu mets directement "A7:A2000" par ex, les cellules vides étant à la fin quand tu tries.

Molenn.

P.S. : Un conseil, utilise l'assistant création de macro d'Excel. C'est très instructif. Le mieux, c'est en règle général d'utiliser l'assistant dès que tu peux, puis avec l'éditeur, d'aller modifier ta macro en virant tout le code inutile.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
10 août 2006 à 10:47
Voici ce que je préparais pendant que 528680 Molenn ecrivait (je ne suis plus aussi rapide qu 'avant)
Mais je tiens a dire que les grand esprits se rencontrent.
Salut,

Essaie ceci:

Range("A7").Select
Call Range(Selection, Selection.End(xlDown)).Sort(Range("A7"), xlAscending, Orientation: =xlTopToBottom)

Je te conseille d'utiliser l'enregistreur de macro fourni avec Excel.
C'est un outil très utile lorsque tu ne sais pas trop comment faire ce que tu souhaite depuis le code.

Il est accessible depuis le menu : Outils => Macros =>
tu peux aussi directement ajouter la barre de menu : Affichage => Barres d'outils => VisualBasic.

Tu lance un enregistrement de macro.
Tu effectues les opérations depuis excel.
Tu arrets l'enregistrement
et tu vas voir ce que Excel à mis dans le module. c'est le code qui permet de faire les actions précédentes.

D'accord le code donné ne parait parfois pas tres optimiser mais cela te donne des points de départ interessant.
@+, Julien
Pensez:

@+, Julien
Pensez:
0
tortuegenie Messages postés 110 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 21 octobre 2008
10 août 2006 à 10:59
Dsl mais cela ne fonctionne pas l'objet  Range de Worksheet a échoué!!!

Le problème que j'ai moi, c'est la syntaxe du langage VB, c'est le seul handicap je suis plus adapté au Java, c'est tout. 
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
10 août 2006 à 11:11
Re,
"Cela ne fonctionne pas...."
Donne le code que tu as mis cela nous eviteras d'essayer de deviner ou ca coinces.
As tu teste l'enregistreur de macro.

@+, Julien
Pensez:
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
10 août 2006 à 11:12
L'objet Range de Worksheet a échoué oui ... mais où, quand, comment ?
Tu parles de ton bout de code que tu as modifié, de mon bout de code ou de celui de jrivet ?

Comme d'hab, donne nous le bout de code qui plante qu'on puisse te dire où se situe le pb.

Molenn

P.S. : Je dirais même plus, jrivet, les grands esprits se télescopent, et ne se font pour autant jamais mal ^^
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
10 août 2006 à 11:13
Ouah l'aut', il dit qu'il n'est plus aussi rapide et il m'a grillé ... Snif ...
0
tortuegenie Messages postés 110 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 21 octobre 2008
10 août 2006 à 11:16
 Worksheets(4).Activate
    ActiveSheet.Range("A8").Select
    Call Range(Selection, Selection.End(xlDown)).Sort(Range("A8"), xlAscending, Orientation:=xlTopToBottom)

Marche pas, la méthode Rande de Worksheet a échoué
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
10 août 2006 à 11:32
Salut,

En fait je viens de tester en mettant le bouton (qui lance mon tri de feuil4 ) sur un autre feuille.(Feuil1)
Ce que j'en comprends:
- Si tu ne mets pas ActiveSheet. devant Range, il doit essayer de prendre Range sur la feuille contenant le code ici feuil1.

Il faut donc lui dire a chaque fois dans quelle feuille fait reference l'objet Range.

Donc essaie ceci

Worksheets(4).Activate
ActiveSheet.Range("A8").Select
Call ActiveSheet.Range(Selection, Selection.End(xlDown)).Sort(ActiveSheet.Range("A8"), xlAscending, Orientation:=xlTopToBottom)

@+, Julien
Pensez:
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
10 août 2006 à 11:35
Alors, je propose un mix de tout ça, youpiiiii  (je ne pense jamais à utiliser le Range comme ça, en intégrant le End à l'intérieur.

Tu peux donc mettre en code :

Worksheets(4).Range("A8", Range("A8").End(xlDown)).Sort Key1:=Range("A8"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

Si là, ça ne marche pas, c'est que tu as de gros doigts parce que moi ça marche nickel.

Molenn

P.S. : Et comme je l'ai dit dans un autre de tes posts, il faut virer dès que c'est possible la propriété .Select de ton code.
Tout peut être bon, le select plante 1 fois sur 2 je ne sais pourquoi. Pire, il fonctionne, je rajoute un bout de code qui ne touche pas aux ranges, etc ... et ça ne marche plus.
Pas compliqué, un seul mot d'ordre : éradication des Select !
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
10 août 2006 à 11:42
>Molenn:
Moi aussi les codes testés n'avaient aucun problème mais en fait je mettais le code toujours dans la feuille concernée par le tri.
En revanche des que tu mets ce code dans un autre feuille c'est là que les soucis commence. je crois qu il faut tous mâcher a Excel et lui eviter de deviner a quel Cellule on fait reference.

A quand le

ActiveWorkBook.WorkSheets(4).Range(...

Note: je trouve quand meme que l'option ou l'on ecrit tout est beaucoup plus "propre" au niveau du code.
Au moins si quelqu un arrive après il sait tout de suite de  quelle cellule(s) ont parle

@+, Julien
Pensez:
0
tortuegenie Messages postés 110 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 21 octobre 2008
10 août 2006 à 11:47
DSl Molenn ton truc ne marche pas et toi jrivet ca marche mais il bloque, travaille sur le disque dur alors qu'il n'y a rien à chercher.

Je crois que mon tri est pas possible à faire.

Quelqu'un sait ou on peut trouver le code utilliser dans Excel pour Tri Croissant???
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
10 août 2006 à 11:51
Salut,
Je ne comprends pas pourquoi cela ne fonctionne pas.
Ca me tracasse , Si tu veux tu peux m'envoyer ton classeur par Mail pour que je puisse inspecter tout ca (si ce classeur n'est pas classé secret défense).
En m'expliquant ce que je doit savoir.
Voici mon adresse: [mailto:epsylon9@gmail.com epsylon9@gmail.com]

@+, Julien
Pensez:
0
tortuegenie Messages postés 110 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 21 octobre 2008
10 août 2006 à 12:00
Merci j'essaye encore de chercher au pire je te l'envoi cette aprem.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
10 août 2006 à 12:52
Ben honnêtement, je ne vois pas comment ça ne peut pas fonctionner.

Worksheets(4).Range("A8", Range("A8").End(xlDown)).Sort Key1:=Range("A8"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

Je ne vois que 2 choses :
Worksheets(4) ne correspond pas à la feuille que tu veux trier.
Insère juste en bout de code au début pour tester :
MsgBox Worksheets(4).Name
Est-ce que le nom de la feuille qui ressort est bien celle que tu veux trier ?

Ensuite, la zone de tri : Qu'est-ce qui te ressort comme zone dans le code ?
Teste pour le savoir avec le bout de code suivant
MsgBox Range("A8", Range("A8").End(xlDown)).Address
Est-ce que ça correspond bien à la zone du tableau que tu veux trier ?

Parce que, ce que tu demandes, à savoir le code pour trier dans Excel, tu l'as là. Il n'y en a pas d'autre.

Donc, quand tu dis : mon truc ne marche pas. C'est à dire ? Il y a un message d'erreur, dans ce cas donne le. Il ne se passe rien, dans ce cas, à mon avis, le tri s'est bien effectué, mais dans une autre feuille ! ou alors, tu ne tries que sur une seule case et forcément, ça ne se voit pas. (On t'envoit à la dernière ligne pour définir la zone à trier mais, si tu as une ligne vide avant la fin, genre en 2eme lègne, forcément, ça ne fonctionnera pas.

Molenn.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 août 2006 à 15:33
salut,

Sheets("Nom de ta feuille").Range("A8", Range("A8").End(xlDown)).Sort Key1:=Range("A8"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

il est préférable de travailler avec le nom de la feuille :
1/ c'est plus lisible
2/ lors de la création de feuilles, avec les inversions, il se peut que l'index ne soit pas correspondant avec sa position.

@++

   Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
10 août 2006 à 15:38
> mortalino: BONJOUR QUAND MEME

@+, Julien
Pensez:
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
10 août 2006 à 15:41
Je n'ai fait que reprendre sa syntaxe Mortalino ^^
D'où ma dernière question : Vérifier ce qui se cache derrière son index 4.

Mais étant donné qu'on a plus de réponses, je prends les paris : il a trouvé son erreur et maintenant, ça marche :p

Molenn
0
tortuegenie Messages postés 110 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 21 octobre 2008
10 août 2006 à 15:43
Non cela ne marche pas car y'a un pb mais je ne pense pas qu'il est dû à moi mais à Excel et VbA, y'a certains Bug et puis c'est tout.
Je fais mon tri à la main à la place de le faire par prog.
Merci
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 août 2006 à 15:45
J'ai dit Salut, en première ligne, après j'avoue que c'est barbare (désolé je me lève car je travaille de nuit en ce moment)

Alors
BONJOUR JULIEN & MOLENN

CA GAZ ?

@++

   Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 août 2006 à 15:50
tortuegenie :
je viens de tester le code, ça marche nickel chrome !

@++

   Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
0
Rejoignez-nous