Tri colonnes excel [Résolu]

apache88 78 Messages postés mercredi 26 janvier 2005Date d'inscription 19 mars 2014 Dernière intervention - 26 juil. 2007 à 07:37 - Dernière réponse : apache88 78 Messages postés mercredi 26 janvier 2005Date d'inscription 19 mars 2014 Dernière intervention
- 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
Afficher la suite 

8 réponses

Répondre au sujet
apache88 78 Messages postés mercredi 26 janvier 2005Date d'inscription 19 mars 2014 Dernière intervention - 26 juil. 2007 à 08:51
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de apache88
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 26 juil. 2007 à 08:01
+1
Utile
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.
Commenter la réponse de jmfmarques
apache88 78 Messages postés mercredi 26 janvier 2005Date d'inscription 19 mars 2014 Dernière intervention - 26 juil. 2007 à 08:02
0
Utile
ça serait en effet une bonne idée je vais voir se que ça donne et je donnerais des nouvelles. merci
Commenter la réponse de apache88
apache88 78 Messages postés mercredi 26 janvier 2005Date d'inscription 19 mars 2014 Dernière intervention - 26 juil. 2007 à 08:23
0
Utile
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()
Commenter la réponse de apache88
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 26 juil. 2007 à 08:29
0
Utile
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...
Commenter la réponse de jmfmarques
apache88 78 Messages postés mercredi 26 janvier 2005Date d'inscription 19 mars 2014 Dernière intervention - 26 juil. 2007 à 08:32
0
Utile
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
Commenter la réponse de apache88
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 26 juil. 2007 à 08:35
0
Utile
Essaye de mettre des ws devant chaque mot (Range, etc...) de ton objet ws auquel tu te réfères
Commenter la réponse de jmfmarques
apache88 78 Messages postés mercredi 26 janvier 2005Date d'inscription 19 mars 2014 Dernière intervention - 26 juil. 2007 à 08:45
0
Utile
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
Commenter la réponse de apache88

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.