Trier données dans excel

Résolu
ketchups Messages postés 24 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 21 décembre 2007 - 16 oct. 2007 à 15:19
ketchups Messages postés 24 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 21 décembre 2007 - 18 oct. 2007 à 13:49
Hello tous le monde
Je me permet de poster encore un ti sos, vous m'avez bien aidé jusque là et je vous en remercie ^^

Je suis toujours sur excel et je prog en vb net et ce que j'aimerai faire c'est un tri dans mon document excel
j'ai vu dans pas mal de topic qu'on conseille de voir avec une macro vba et de copier le code malheuresement sa ne marche pas vu que dans vb net sa me dit fonction non déclarée.

donc la fonction que j'ai essayé de copier de vba excel: (j'ai modifié Selection.range par obxl.range car obxl c'est la variable pour mon fichier

obxl.range("A:E").Sort(Key1:=obxl.Range("B1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom)

Si quelqu'un à une meilleure solution elle est la bienvenue, ou si vous savez comment je devrais déclarer mes variables

8 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
17 oct. 2007 à 08:04
Ah ben là, je ne sais pas. Comme je te disais, je n'y connais rien au .net
Je suppose que tu as bien référencé Excel dans ton projet ?

Essaye peut être de remplacer ces mots clés d'Excel par leur constante
xlAscending, c'est 1 par exemple. Tu peux le savoir en allant dans l'explorateur de projet d'Excel. TU ouvres l'éditeur VB (alt+F11), puis tu fais F2 et tu cherches tes mots clés. En bas, la valeur de la constante t'est donnée.

Autre chose, ton code n'est toujours pas bon. Tu as rajouté le Worksheets dans la première partie, mais pas dans la 2ème, ça ne peut pas fonctionner comme ça :
obxl.Worksheets("temp1").Range("A:E").Sort(Key1:=obxl.Worksheets("temp1").Range("B1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom) 

Molenn
3
ketchups Messages postés 24 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 21 décembre 2007
17 oct. 2007 à 11:18
enfaite je crois que mon aide fonctionne pas vraiment quand je fais f1 ou ta manip alt+f11, f2 il me met toujours commande introuvable

alors j'ai trouvé ceci sur un site web.

'xlAscending = 1
'xlYes = 1
'xlTopToBottom = 1
'xlSortNormal = 0

mais une fois que je lance mon prog sa bug je pense qu'il aime pas le worksheets.... je vais essayé de cherché sa cette aprem

sinon y'a le site de msdn j'ai vu des truc intéressant (pour les parametres) faut just que je trouve à quoi sa corréspond :
http://msdn2.microsoft.com/fr-fr/library/microsoft.office.tools.excel.namedrange.sort(VS.80).aspx
3
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
18 oct. 2007 à 08:22
Si je ne m'abuse, je crois qu'il te manque l'objet Workbook justement, mais j'ai du mal à savoir. En VB6 ou en VBA, j'appelle mon fichier Excel de façon un petit peu différente, et je ne sais pas si c'est le .Net qui fait une différence ou non dans ton code.

Voici à quoi ça ressemblerait chez moi (avec la référence à Excel de cochée dans mon projet). En rouge les différences :

Dim obxl As
Excel.Application

Dim FicXl as Excel.Workbook

Set obxl = CreateObject("excel.application")
Set FicXl = obxl.workbooks.open(filename:="C:\Temp"& "SignallingNetwork" & Format(Now.Date, "d-M-yy") & ".xls", editable:=True)
FicXl .worksheets("temp1").Range("A:E").Sort Key1:=FicXl.worksheets("temp1").Range("B1"), Order1:=1, Header:=0, OrderCustom:=1, MatchCase:=0, Orientation:=1

Je ne sais pas si ça pourra t'aider, je n'ai pas de quoi tester exactement puisque pas le même logiciel que toi.

Molenn
3
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
16 oct. 2007 à 17:44
A mon avis, le problème vient justement de ton objet obxl.

C'est quoi le type de l'objet ? Un objet Workbook ou un objet Worksheet ?
Ca m'étonne que l'enregistreur de macro t'ait remonté une ligne du style Selection.range parce que normalement, Selection contient en fait les coordonnées complètes de ta cellule, c'est à dire Workbook("toto").Worksheets("Titi").range("A1")

Ce qui explique aussi ton cas :
Quand tu écris obxl.range("A:E"), à mon avis, il manque quelque chose, soit le workbook (puisque tu fais de l'automation, tu n'es pas dans le fichier Excel), soit le Worksheet.

Je ne connais pas le .net, mais je suppose que comme tout le monde en VB6 ou VBA, ton obxl est un objet Workbook crée avec un CreateObject ou GetObject.
Il faudrait donc que tu rajoutes : obxl.Worksheets("Feuil1").Range("A:E").Sort blabla pour que cela fonctionne.

Enfin, je suppose. Il faudrait un peu plus de code pour en être sûr.

Molenn
0

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

Posez votre question
ketchups Messages postés 24 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 21 décembre 2007
17 oct. 2007 à 07:48
Merci de m'avoir répondu, le type de mon objet obxl c'est bien un worbook
donc j'ai rajouté le bout de code que tu m'as indiqué

donc ce qui me donne ceci comme code excel
obxl.Worksheets("temp1").Range("A:E").Sort(Key1:=obxl.Range("B1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=

False, Orientation:=xlTopToBottom)    

mais enfaite mon soucis c'est que les parametres suivant "ne sont pas déclaré" dans vb net :
xlAscending , xlGuess, xlTopToBottom

et donc je sais pas si je dois les déclarer avec DIM ou si il faut que j'importe une "bibliothèque" supplémentaire
je sais pas si c'est compréhensible ce que je viens de dire

et pis je sais pas non plus si cette méthode est fessable avec vb net
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
17 oct. 2007 à 13:32
Donne ton bout de code complet, avec les déclarations de variable, la création de l'objet Excel, etc ...

On pourra peut être t'aider ?

Molenn
0
ketchups Messages postés 24 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 21 décembre 2007
17 oct. 2007 à 14:14
ok pas de soucis.

Dim

obxl
As
Object
obxl = CreateObject("excel.application")
obxl.workbooks.open(filename:="C:\Temp"
& "SignallingNetwork" & Format(Now.Date, "d-M-yy") & ".xls", editable:=True)

Là j'ai une procédure pour supprimer certaines lignes (vides, remplie d'espace....)
je ne la mets pas pour le moment mais si jamais je la mettrai.

obxl.Application.Rows.Columns.AutoFit()

'agrandir les colones automatiquements par rapport aux contenus

obxl.worksheet("temp1").Range("A:E").Sort(Key1:=obxl.worksheet("temp1").Range("B1"), Order1:=1, Header:=0, OrderCustom:=1, MatchCase:=0, Orientation:=1)

obxl.Save(

True)
obxl.application.quit()
0
ketchups Messages postés 24 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 21 décembre 2007
18 oct. 2007 à 13:49
j'ai fait un petit mix des différentes codes qu'on a écrit là et j'ai réussit à trier mon fichier

Merci beaucoup pour m'avoir aider molenn sa fait super plaisir
0
Rejoignez-nous