Tri en VBA

Messages postés
110
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
21 octobre 2008
-
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
-
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

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
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.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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:
Messages postés
110
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
21 octobre 2008

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. 
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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:
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
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 ^^
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Ouah l'aut', il dit qu'il n'est plus aussi rapide et il m'a grillé ... Snif ...
Messages postés
110
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
21 octobre 2008

 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é
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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:
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
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 !
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
>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:
Messages postés
110
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
21 octobre 2008

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???
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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:
Messages postés
110
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
21 octobre 2008

Merci j'essaye encore de chercher au pire je te l'envoi cette aprem.
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
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.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
> mortalino: BONJOUR QUAND MEME

@+, Julien
Pensez:
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
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
Messages postés
110
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
21 octobre 2008

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
tortuegenie :
je viens de tester le code, ça marche nickel chrome !

@++

   Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"