IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

VBS pour bordures fichier Excel


Sujet :

VBScript

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut VBS pour bordures fichier Excel
    Bonjour,

    Je suis sur un script qui importe des données d'un fichier texte dans une feuille Excel. Je voudrais mettre en forme cette feuille par VBS.
    J'ai déjà trouvé pour trier par ordre croissant, pour dimensionner les cellules en fonction de la longueur du texte, à changer le format des nombres et je voudrais m'attaquer aux bordures pour que ce soit plus propre et que cela fasse tableau.
    J'ai cherché sur le forum (tutos, discussion,etc) ainsi que sur internet et je ne trouve aucune doc.
    J'ai fait la manip en vba excel et j'essaie de le coder en vbs sans succès.

    Voici un bout de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
    'Ouverture d'Excel
    	Dim waExcel: Set waExcel = CreateObject("Excel.Application")
    'Chemin d'accès du fichier
        	StrPath = "C:\"
    'Ajoute \ à la fin s'il y en a pas
        	If Right(StrPath, 1) <> "\" Then StrPath = StrPath & "\"
    'Nom du fichier
        	StrFich = "ControleDisque.txt"
    'Existance du fichier
        	If FSO.FileExists(StrPath & StrFich) Then
    'Rendre invisible Excel
            waExcel.Visible = False
    'Importe le fichier texte vers une feuille Excel avec délimiteur : Tabulation et Space
            waExcel.Workbooks.OpenText StrPath & StrFich, , , , , , True, , , True
    waExcel.Worksheets(1).Columns("A:L").Select
    xlContinuous = 1
    xlThin = 1
    xlAutomatic = 1
    waExcel.worksheets(1).Columns("A:L").Borders WaExcel.worksheets(1).Range("A:L"), xlContinuous, xlThin, xlAutomatic
    Quelqu'un aurait-il une idée ou des infos là dessus

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Cela donne quoi comme résultat ?

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    Bonjour,

    Cela me génère une erreur :

    Ligne 21
    Caract. :1
    Erreur : Cet objet ne gère pas cette propriété ou cette méthode :'Worksheets(....).Borders'
    Code 800A01B6
    Alors que pour les autres modifications de cellules 'Worksheets' fonctionne très bien.

    Je ne sais pas vers quel cade me tourner.

    J'ai essayé également par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    waExcel.worksheets(1).Borders(xlEdgeTop).LineStyle = xlContinuous
    Même erreur alors que pour que les cellules soient triées par ordre croissant en fonction de la colonne B1, le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            xlAscending = 1
    	xlTopToBottom = 1
    	xlSortNormal = 0
    	xlGuess = 0
    	WaExcel.Worksheets(1).Columns.Sort WaExcel.Worksheets(1).Range("B1"), xlAscending, , , , , , xlGuess, 1, False, xlTopToBottom, , xlSortNormal

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Oui bah ce que n'aime pas l'interpréteur c pas Worksheets mais Borders.
    As tu vérifié que la méthode existe bien pour l'objet en question ?

    Si tu regardes ici tu t'appercevras que Worksheet n'a pas de telle propriété ou méthode.

    EDIT : En fait tu n'utilises pas WorkSheet mais worksheets, mais qui ne contient pas non plus de border.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    Ok, merci, je commence à comprendre le fonctionnement vbscript.

    Question :

    J'ai trouvé sur ton lien plusieurs objets qui me conviendraient :

    CellFormatObject (qui contient Borders comme membre object)
    BordersObject
    BorderObject

    Lequel choisir ?

    Je serais tenté par CellFormatObject et écrire un code du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    waExcel.CellFormatObject.Borders(xlEdgeTop).LineStyle = xlContinuous
    Une idée là dessus ? Je vais faire des essais en attendant ta réponse

    Merci d'avance

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je ne sais pas !

    Je ne fait que très rarement du VBA excel, donc je ne sais pas ce qui est le plus adapté. Je ne peux faire que regarder la doc comme toi, mais je n'ai pas le temps pour cela.

    Bon courage.

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    Ce n'est pas du VBA Excel mais je tente de piloter Excel par du VBS et parfois passer d'un code VBA Excel en VBS ça se fait bien et d'autrefois c'est plus difficile comme pour les Bordures.
    Merci pour m'avoir déjà mis sur une piste.

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    "Ce n'est pas du VBA Excel mais je tente de piloter Excel " -> c ce que j'appelle du VBA.

    En fait plus exactement, tu fais du développement Office, pour Excel plus précisément, en VBS.

    VBA = Visual Basic for Applications. Bref sous certaine application comme excel tu peux diretement piloter l'outil en utilisant ses propres classes, le tout en VB.

    Lorsque tu veux faire la même chose en dehors de l'application, tu le fait en VB, VBS, ou autre langage.

    Bref par dérivation je nomme VBA tout développement Office fait en VB.

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    Ok, maintenant je sais que je fait du développement office en vbs !!!

    C'est vrai que lorsqu'on débute et que l'on veut faire du vbs, à force d'aller sur les forums, on trouve plus souvent des infos en vb ou vba et du coup, je ne savait plus ou se situait le vbs par rapport au reste.

    Merci pour l'info.

    Par contre, je n'ai pas avancé que se soit avec CellFormat Object, Borders Object ou Border Object. J'ai toujours la même erreur.

    Est-ce que cela peut venir de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim waExcel: Set waExcel = CreateObject("Excel.Application")
    qui m'empeche de remplacer worksheets par cellformat ?

    Es-ce qu'il ne vaudrait mieux pas que je fasse un 2 ème script pour la mise en forme du style : ouverture excel en ajout / mise en forme / fermeture.

    Je vais essayer !!!

    Tout avis sur la question sera bienvenu .

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Non cela ne vient pas de là.

    En fait tu manipules des objets, imbriqués les uns dans les autres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set waExcel = CreateObject("Excel.Application")
    -> te permet d'utiliser les objets Excel pour le piloter.

    Si cela ne marchais pas, tu aurais un problème dès ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    waExcel.Visible = False
    toujours pareil : CellFormatObject ne fait pas partie des propriétés de waexcel !!!

    Connais tu la programmation orienté objet ? Parce que là on est en plein dedans.

    Bref, si tu veux pouvoir utiliser CellFormat (le object à coté sur msdn c pour signalé que c un objet et ne fait pas partie du nom, d'où l'espace), il va falloir que tu trouves une propriété ou une méthodes d'un objets qui te le renvois.
    Sachant que tu es obligé de partir de waexcel.

    Regarde ici, borders fait partis de cellformat qui fait partis d'application, accessible lui directement par waexcel (ton "all").

    Ici, on t'explique tout sur CellFormat, et l'on te dit qu'il est récupérable grace à la propriété FindFormat d'Application.

    Maintenant tu devrais pouvoir faire ce que tu souhaites, masi tu n'as pas l'air de connaitre la programmation orientée object, et du coup ce n'est pas simple pour toi à comprendre comment on accéde aux différents objets. Recherche sur google, sur wiki, tu auras pas mal d'explication et les bases pour pouvoir t'en sortir seul.

    Bon courage.

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    Bonjour,

    Suite à ton message d'hier, je suis allé voir tes liens et si je comprends bien :

    Il faut que j'utilise les propriétés de FindFormat de l'Objet Application pour retourner un Objet CellFormat et avec l' Objet CellFormat je peux utiliser Borders.

    Suivant Object Model Map j'ai l'arborescence suivante :

    ALL
    |
    APPLICATION
    |
    CELLFORMAT -- FINDFORMAT
    |
    BORDERS

    Donc dans mon script waExcel est équivalent à All.Application et si je veux descendre jusqu'à Borders il faut écrire waExcel.CellFormat.Borders

    J'ai lu plusieurs articles : Programmation orientation objet sur Wikipedia et developpez.com + introduction au langage vbscript sur developpez.com + vbscript sur msdn.com, etc...

    Je comprends à priori le principe mais je suis incappable de trouver un exemple concret même autre que mon cas pour utiliser les propriétés pour retourner celles d'un autre objet.
    J'ai perdu pratiquement ma journée et j'aurais vraiment voulu comprendre le principe pour pouvoir réutiliser ce procédé et progresser en vbs.

    Merci

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Non waExcel est All.

    Normalement il suffirait de faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim CellFormatMyObject
     
    'Récupération de CellFormat :
    set CellFormatMyObject = waExcel.Application.FINDFORMAT
     
    'Utilisation de Borders :
    CellFormatMyObjet.Borders. '... -> là tu met la méthode ou la propriété que tu souhaites utiliser.
    Var = Function() -> Cela te permet de récupérer en VBS ce que renvoie une fonction ou une méthode d'objet.

    Si la valeur retourné est un objet alors il faut faire -> set Var = Object.Methode() (ou une propriété).

    Pour t'entrainer essaye de récupérer Borders comme j'ai récup CellFormat, et stocke le dans une variable. Ensuite tu pourras directement utilisé cette variable pour appeller une méthode ou une propriété de Borders.

  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Un petit coup d'enregistreur de macro dans Excel (suivi d'un peu de nettoyage) m'a donné la syntaxe à utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    waExcel.worksheets(1).Columns("A:L").Borders.LineStyle = xlContinuous
    Tu aurais pu en faire autant.

    Quoique, pour ma part, j'aurais défini un objet Workbook...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  14. #14
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    pas bête ça

  15. #15
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    Bonjour,

    Je suis d'accord cela fonctionne mais aucune bordure n'apparait car il faut lui dire quelle ligne (xlEdgeTop/Left/Right/...) et c'est là que cela coince :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    waExcel.worksheets(1).Columns("A:L").Borders(xlEdgeTop).LineStyle = xlContinuous
    génère une erreur d'exécution inconnue !!!

    Comment doit-t'on intégrer xlEdgeTop ?

  16. #16
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Remplace les constantes xl.. par leur valeur.

    pour connaitre leur valeur, fenêtre exécution VBA d'Excel ..:

    ?xlEdgeTop
    8
    ?xlContinuous
    1

  17. #17
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    Merci à tous, j'ai exécuté ce code dans mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlcontinuous = 1
    waExcel.worksheets(1).Columns("A:L").Borders.LineStyle = xlContinuous
    et j'obtiens des bordures comme je voulais c'est à dire sur toutes les lignes des colonnes sélectionnées.

    Sûrement un coup de chance de mon côté mais bien guidé par ced600, AlainTech et bbil.

    Merci à vous 3.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 06/03/2017, 09h47
  2. Macro unique pour plusieurs fichiers excel
    Par jackbauer972 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/07/2007, 13h41
  3. [ascendant='nul'] VBS ouvrir un fichier excel depuis IE7
    Par escteban dans le forum VBScript
    Réponses: 2
    Dernier message: 26/04/2007, 15h04
  4. [VBA-E] Macro pour tous fichiers Excel ?
    Par belfaigore dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/07/2006, 18h25
  5. [VBA-E]une macro unique pour plusieurs fichiers excel
    Par fanchic29 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/04/2006, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo