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

Contribuez Discussion :

[Fait]Comment vérifier l'existence d'un fichier (FSO) [FAQ]


Sujet :

Contribuez

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut [Fait]Comment vérifier l'existence d'un fichier (FSO)
    Cette fonction sert dans la programmation "médecine chinoise".. Anticiper c'est mieux que guérir, surtout en VBA ou l'utilisateur peut facilement se retrouver sur le code en cas de fichier non trouvé.. Cette fonction est plus simple et plus facile que la gestion programmée de l'erreur..

    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
     
    ' Vérifier l'existence d'un fichier(par ex avant de l'ouvrir..)
    Function VerifierExistenceFichier(ByVal Mondossier, ByVal MonFichier) As Boolean
        Dim ObjFSO, ListRepertoires, ListSousRep, ListFichiers, MonRep, LesReps, MonFich, LesFichs
        Set ObjFSO = CreateObject("Scripting.FileSystemObject")
        VerifierExistenceFichier = False
        Set ListRepertoires = ObjFSO.GetFolder(Mondossier)
        Set ListSousRep = ListRepertoires.SubFolders
        For Each MonRep In ListSousRep
                Set ListFichiers = MonRep.Files
                For Each MonFich In ListFichiers
                    If MonFich.Name = MonFichier Then
                        'trouvé
                        VerifierExistenceFichier = True
                        End
                    End If
                Next MonFich
        Next MonRep
    End Function

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    j'ai l'impression de voir de plus en plus de code <Late Binding> sur le site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateObject("Scripting.FileSystemObject")
    Pour ma culture, je me demande quels sont les intérêts de la liaison tardive en particulier ici ?

    merci,

    Philippe

  3. #3
    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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    L'intérêt, c'est de ne pas devoir ajouter de référence dans le projet.
    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!

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    la liaison est tardive, les erreurs le seront aussi...
    philippe

  5. #5
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par AlainTech Voir le message
    L'intérêt, c'est de ne pas devoir ajouter de référence dans le projet.
    et donc que l'application continue de fonctionner (sauf le code qui utilise l'objet) si l'application référencée est manquante.

    Pour ma part, je fais toujours du Late Binding avec des objets Word ou Excel par exemple, si je dois déployer une appli sur plusieurs postes sans être sûr qu'ils ont tous les produits attendus...
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour Mout1234 ,

    et donc que l'application continue de fonctionner (sauf le code qui utilise l'objet) si l'application référencée est manquante
    Je suis surpris que l'on puisse préférer une erreur a déclenchement aléatoire dans le temps plutot qu'un beau bouquet final (ou plutot initial !) d'erreur ?

    De plus :
    * il faut se souvenir des références tardives utilisées pour vérifier quelles sont bien sur le poste;
    * le développement n'est pas facilité par vbe avec les liaisons tardives
    * la perf est semble t'il inférieure par rapport au early binding
    * Je préfère contrôler les erreurs qui peuvent l'être, y'a suffisamment d'erreurs externes et internes potentielles !

    C'est un effet de mode ou suis-je totalement rétrograde ou j'ai rien compris aux avantages !

    Philippe

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    En y réfléchissant, j'ai trouvé un avantage.
    De mémoire, si un poste possède une version antérieure de la référence X, Access lève une erreur dans le cas d'une liaison précoce mais il n'en lévera pas dans le cas d'une liaison tardive (hors problème éventuel de méthode ou de propriété manquante dans la version antérieure).

    Si c'est bien ça, je reconnais que c'est un intérêt non négligeable.

    Philippe

  8. #8
    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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Le plus grand intérêt, à mes yeux, est la référence aux librairies Office qui ont besoin de la version quand on les définit.

    Astuce:
    Développer en liaison précoce et déployer en liaison tardive.
    De cette manière, on garde tout l'intérêt de l'Intellisense et on ne se heurte pas au problème des références manquantes.
    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!

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par AlainTech Voir le message
    Le plus grand intérêt, à mes yeux, est la référence aux librairies Office qui ont besoin de la version quand on les définit.

    Astuce:
    Développer en liaison précoce et déployer en liaison tardive.
    De cette manière, on garde tout l'intérêt de l'Intellisense et on ne se heurte pas au problème des références manquantes.
    + 1

    Je me suis fait avoir plusieurs fois, depuis je travaille de cette manière.

    Starec

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    Je vais bientôt faire un déploiement de ma base (dorsale/frontale) et j’aimerai savoir si vous pouviez expliquer un peu plus concrètement ou m’orienter vers des tutos (pas celui sur le déploiement, je l’ai lu) ou lectures sur le sujet FSO ?
    Comment se matérialise
    Développer en liaison précoce et déployer en liaison tardive
    ?

    Merci par avance
    Merci de votre aide

  11. #11
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    merci à AlainTech pour la précision.

    Je retiens l'intérêt du Late Binding pour les références Office (ce que fait Mout1234 d'ailleurs) et l'astuce pour l'Intellisense.
    Pour les autres références comme <scripting runtime> je ne vois encore aucun avantage, au contraire.

    kgb1917 a écrit :
    vers des tutos (pas celui sur le déploiement, je l’ai lu) ou lectures sur le sujet FSO ?
    Un lien qui te permettra d'avoir toutes les bases pour manipuler FSO :
    1) Tuto de Warin (Tofalu)
    http://warin.developpez.com/access/fichiers/

    Comment développer en liaison précoce (early binding) pour profiter l'Intellisense de VBA puis finir en late binding ?

    Exemple (si j'ai bien compris )
    Le premier code en early binding avec référencement de la référence <Microsoft Scripting Runtime> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim oSFS As Scripting.FileSystemObject
    Dim oSD As Scripting.Drive
    Set oSFS = New Scripting.FileSystemObject
    ...
    Le même en Late Binding c'est à dire les déclarations à la référence sont masqué au compilateur et elles se feront dynamiquement lors d'un appel (en gros !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set oSFS As Object, oSD As Object
    Set oSFS = CreateObject("Scripting.FileSystemObject")
    ...
    Donc à la fin du développement on transforme le code early binding en late binding. Pour voir si on a rien oublié, désactiver la référence <scripting runtime>, puis faire une compilation pour lever un éventuel oubli d'une liaison précoce.

    Philippe

  12. #12
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir Philben et les autres,
    Citation Envoyé par philben Voir le message
    Je suis surpris que l'on puisse préférer une erreur a déclenchement aléatoire dans le temps plutot qu'un beau bouquet final (ou plutot initial !) d'erreur ?
    Soyons plus clair:
    - Pendant la phase de dev, je déclare les objets en Early Binding et bénéficie ainsi de l'intellisense.
    - si je suis sur que tous les utilisateurs disposent du logiciel attendu (et de la même version...), je préfère bien sur garder une déclaration précoce.
    - mais il y des cas où on est sur n'ont pas que tous les utilisateurs n'auront pas forcément le produit. Pour développer la fonctionnalité pour certains utilisateurs concernés sans perturber les autres... la déclaration tardive est bien utile.
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

Discussions similaires

  1. [FTP] Vérifier l'existence d'un fichier !
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 19/02/2006, 12h09
  2. Réponses: 6
    Dernier message: 28/09/2005, 14h15
  3. Comment vérifier l'existence d'un répertoire ?
    Par Sydaze dans le forum Débuter
    Réponses: 2
    Dernier message: 30/06/2005, 11h34
  4. Réponses: 3
    Dernier message: 05/04/2005, 14h36
  5. Réponses: 3
    Dernier message: 24/06/2004, 11h23

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