Tri colonnes excel

Résolu
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014 - 26 juil. 2007 à 07:37
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014 - 26 juil. 2007 à 08:51
Bonjour,

Vu que je n'ai pas eu réponse à mon précédent poste, j'en crée un nouveau afin d'être sûr d'avoir une réponse (enfin j'espère)

Mon problème précédent était que je ne savais pas comment trier une colonne excel via VB .NET.

J'ai été énormément aidé et je les remercie encore une fois mais me voila encore une fois dans une impasse....

J'explique depuis le début..

J'écris des données dans un tableau excel (ces données sont prise dans l'active directory). J'ai ensuite 3 colonne:

Nom et Prénom | Visa | Numéro de téléphone

Quand il relève les informations depuis active directory, il ne les écris pas dans l'ordre alphabétique... dans mon poste précédent, le problème à presque été totalement résolu.

J'utilise le code suivant pour trier une colonne:

Dim wb
As Excel.Workbook

Dim ws
As Excel.Worksheet

wb = excel.Workbooks.Add(1)
'on ouvre un classeur dans excel
ws = wb.Worksheets(1)
'on ouvre une feuille dans le classeur excel ws.Cells(4, 2).SortSpecial(

Global.Excel.XlSortMethod.xlPinYin) 'Tri de la 2ème colonne par ordre alphabétique

Seulement voila... il me tri correctement la colonne Nom et Prénom mais le problème c'est qu'après ça ne correspond plus a la colonne visa et téléphone... En faisant le tri manuellement sur excel, j'ai vu qu'il fallait sélectionner mes 3 colonne et faire le tri pour que ça continu à correspondre. Mais je sais pas trop comment m'y prendre en VB... J'ai essayé de modifier ws.Cells.... afin de séléectionner plusieurs colonnes, mais soit on ne peux pas le faire, soit je fais faux.

Si quelqu'un à une solution, je suis tout ouïe.

Merci

8 réponses

apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
26 juil. 2007 à 08:51
C'est bon j'ai trouvé en fait tu avais raison c'est presque aussi simple!!

Fallait juste encore quelques truc en plus

ws.Range(

"B4:F500").Sort(Key1:=ws.Range(
"B5"), Order1:=
Global.Excel.XlSortOrder.xlAscending, Header:=
Global.Excel.XlYesNoGuess.xlGuess, _OrderCustom:=1, MatchCase:=
False, Orientation:=
Global.Excel.XlSortOrientation.xlSortColumns)

ça marche parfaitement bien
Merci pour ton aide
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
26 juil. 2007 à 08:01
Bonjour,
Une solution, non (je ne suis pas VBAiste du tout), mais une idée, oui :

1) tu lances l'enregistreur de macro
2) tu fais ta sélection et ton tri manuellement
3) tu arrêtes et sauvegardes la macro générée
4) tu ouvres ta macro dans l'éditeur et tu regardes comment Monsieur VBA a écrit tout celà.

5) tu adaptes, maintenant que tu connais cette syntaxe.
1
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
26 juil. 2007 à 08:02
ça serait en effet une bonne idée je vais voir se que ça donne et je donnerais des nouvelles. merci
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
26 juil. 2007 à 08:23
Avec une macro, ça me donne ceci:

    Range("B5:D22").Select
    Selection.Sort Key1:=Range("B5"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Mon idée à été de faire

ws.Range("B4:F500").SortSpecial(Global.Excel.XlSortMethod.xlPinYin)

Mais il me met référence non valide.

J'ai aussi essayé de d'abord uniquement sélectionner ces cellules mais je peux pas trier apres.. je dois faire faux.

ws.Range("B4:F500").Select()
0

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

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
26 juil. 2007 à 08:29
Pourquoi ne pas simplement reprendre la syntaxe de M. VBA en ajoutant ton objet Ws ?

ws.Range("B5:D22").Select
    Selection.Sort Key1:=Range("B5"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

et en remplaçant B5 et D22 par ce qui va dans ton appli .
B5:D22 y est ton range, à remplacer par celui qui te convient
B5 est la colonne que tu Tries, les autres étant "entrainées" par ce Tri

Enfin... c'est ce que je comprends de ce que je lis dans la syntaxe de la macro enregistrée...
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
26 juil. 2007 à 08:32
Parceque c'est malheureusement pas aussi simple :( Selection n'est pas définie et xlsAscending, xls guess etc.. n'ont pas l'air d'être utilisé en vb .net
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
26 juil. 2007 à 08:35
Essaye de mettre des ws devant chaque mot (Range, etc...) de ton objet ws auquel tu te réfères
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
26 juil. 2007 à 08:45
J'ai essayé mais non..

J'ai déjà: ws.Range(

"B4:F500").Select()

Il sélectionne juste mes colonnes me manque plus qu'a les trier

J'ai essayé en mettant après

ws.Range("B4:F500").SortSpecial(
Global.Excel.XlSortMethod.xlPinYin)

Mais rien à faire il me met toujours référence non valide
0
Rejoignez-nous