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

Macros et VBA Excel Discussion :

FileSystemObject - création de l'instance [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Par défaut FileSystemObject - création de l'instance
    Bonjour,

    Je créé un projet qui contient des Sub et des Function.
    A chaque fois que j'ai besoin de faire appel à FileSystemObject je créé une nouvelle instance dans la sub ou function considérée.
    Cela me paraît lourd comme procédé, aussi, j'ai cherché à créer/déclarer une seule instance de FileSystemObject en Public afin de pouvoir "appeler" les méthodes dans n'importe quel sub ou function sans avoir à créer l'instance. Mes tests sont restés vains, je n'y suis pas parvenu .
    Dans mon projet j'ai déclaré 6 instances différentes de FileSystemObject et je n'ai pas encore fini. En voici un aperçu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function fileExtension(fichier)
    Set fs2 = CreateObject("Scripting.FileSystemObject")
    fileExtension = fs2.GetExtensionName(fichier)
    End Function
    Function fileBaseName(fichier)
    Set fs3 = CreateObject("scripting.filesystemobject")
    fileBaseName = fs3.GetBaseName(fichier)
    End Function
    Function copyFile(fichierSource, destination)
    Set fs4 = CreateObject("Scripting.FileSystemObject")
    copyFile = fs4.copyFile(fichierSource, destination)
    End Function
    Y-a-t-il un moyen de ne faire qu'une seule déclaration de l'instance FileSystemObject et pouvoir utiliser cette instance dans n'importe quel "module" du projet ? qui pourrait donner quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public fs as New FileSystemObject
    Function fileExtension(fichier)
    fileExtension = fs.GetExtensionName(fichier)
    End Function
    Function fileBaseName(fichier)
    fileBaseName = fs.GetBaseName(fichier)
    End Function
    Function copyFile(fichierSource, destination)
    copyFile = fs4.copyFile(fichierSource, destination)
    End Function
    J'ai évidemment essayé cette solution avec et sans le New, mais le message d'erreur suivant est retourné:
    Nom : 20160921_045_DIV_VBA-declaration-instance-filesystemobject_01.png
Affichages : 180
Taille : 5,9 Ko

    Merci pour votre aide.
    - crissc -

  2. #2
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour,
    Regardes un peu ce lien, ce n'est pas pour Excel mais cela pourra peut-être t'aider.
    http://warin.developpez.com/access/fichiers/#LI
    et ceci
    http://vb.developpez.com/faq/vbs?pag...leSystemObject
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  3. #3
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Ta déclaration ne peut fonctionner que si tu as ajouté une référence (outils/références/ )à "MICROSOFT SCRIPTING RUNTIME"

    du coup tu n'a plus besoin de recréer ce qui existe tu peux directement faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    MsgBox fs.GetExtensionName("toto.txt")
    End Sub

    en restant en late binding tu peux faire comme cela mais la macro MAIN devra avoir été lancée en premier

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Public fs As Object
     
     
    Sub main()
    Set fs = CreateObject("Scripting.FileSystemObject")
     
    'divers traitements
     
    MsgBox fileExtension("toto.txt")
     
    Call test
    Set fso = Nothing
    End Sub
     
     
     
     
    Function fileExtension(fichier)
    fileExtension = fs.GetExtensionName(fichier)
    End Function
    Function fileBaseName(fichier)
    fileBaseName = fs.GetBaseName(fichier)
    End Function
    Function copyFile(fichierSource, destination)
    copyFile = fs4.copyFile(fichierSource, destination)
    End Function
    Sub test()
    MsgBox fs.GetExtensionName("toto.txt")
    End Sub
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour,

    au passage l'utilisation de FileSystemObject est superfétatoire, tout pouvant être directement réalisé en pur VBA !

    Voir donc dans l'aide VBA interne les fonctions texte InStrRev, Left et Right


    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …


  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Par défaut
    Bonjour à tous et merci pour vos réponses.
    Désolé de revenir si tardivement.

    FSO reste un outil pratique et intéressant, mais j'ai suivi les "conseils" de Marc-L et ai épuré mon code de 90% des appels à MSO (il m'en reste 2 ou 3 ).

    Cdlt
    - Crissc -

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/02/2007, 11h31
  2. [Débutant] création d'une instance de base
    Par petitpasdelune dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/12/2006, 08h38
  3. création d'une instance chypriote
    Par mryovo dans le forum Oracle
    Réponses: 9
    Dernier message: 29/04/2006, 09h13
  4. Création d'une instance
    Par kiki_dam27 dans le forum Oracle
    Réponses: 1
    Dernier message: 31/03/2006, 12h41
  5. Création d'une instance
    Par coco-sup dans le forum Oracle
    Réponses: 10
    Dernier message: 31/12/2005, 19h30

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