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 :

Macro Excel, verifier si un fichier existe sans utiliser Dir(Path)


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Macro Excel, verifier si un fichier existe sans utiliser Dir(Path)
    Bonjour,

    Je travaille depuis très peu de temps sur un fichier excel que l'on m'a demandé de compléter.

    En fait, une macro est réalisée, son objectifs est de parcourir dans 3 dossiers différents tout les fichiers qu'ils contiennent succesivement pour en extraire des valeurs.

    Cependant j'avais besoin lorsque un fichier était en cours de traitement, d'en ouvrir un autre en parralèle pour aller chercher une valeur spécifique.

    Tout ceci fonctionne très bien, j'utilise la fonction Dir() pour parcourir l'ensemble de mes fichiers et ceci marche très bien.

    En revanche lorsque j'ouvre mon deuxième fichier, ça fonctionne car je n'utilise pas la fonction Dir() (car sinon je perds mon chemin mémorisé je crois). J'utilise un chemin absolu et je peux lire deux fichiers à la fois.
    Cependant lorsque le fichier que je cherche n'existe pas, j'aimerais ne rien faire mais impossible ..

    J'aimerai juste pouvoir dire Si Fichier Existe Alors .... Sinon ....
    En parlant bien sur du deuxième fichier à ouvrir. Sauf que la problème je ne sais pas comment vérifier ceci sans utiliser la méthode Dir().

    J'aurais juste besoin de savoir comment puis je faire pour dire Si telle chemin de fichier (X:\ ....\ Monfichier.xls) existe ou non.

    Merci pour votre aide (je débute en programmation et dans les forums)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu peux utiliser 'FileSystemObject':
    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
    Option Explicit
     
    Private Sub FichierExiste()
    Dim oFSO As Scripting.FileSystemObject
    Dim oFl As Scripting.File
     
        'Instanciation du FSO
        Set oFSO = New Scripting.FileSystemObject
        'Instanciation de l'objet File
        If oFSO.FileExists("X:\ ....\ Monfichier.xls") Then
           ...
        Else
           ...
        End If
     
    End Sub

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'ai bien fait comme tu m'as montré à prioris. Sauf que (l'erreur vient surement de moi, j'ai du oublier un truc ou bien ne pas être dans la bonne version d'excel) quand je compile, au moment ou j'appelle le sub FichierExiste, il me dit
    Erreur compilation
    type défini par l'utilisateur non défini.

    Et ceci pour la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim oFSO As Scripting.FileSystemObject
    Soit pour la première ligne de ma fonction. comme si il ne savait pas ce qu'était Scripting.FileSystemObject

    Désolé et vraiment merci de m'aider.

  4. #4
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour,

    une autre solution est de n'utiliser que Dir via une fonction renvoyant un tableau pour tout ton programme,
    c'est à dire en gérant autant de variables tableau que nécessaire …
    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
    Function DirList(SpecFic, Optional Dossier = "", Optional Attrib As VbFileAttribute = vbNormal)
             If Dossier > "" And Right(Dossier, 1) <> "\" And _
                                  Left(SpecFic, 1) <> "\" Then Dossier = Dossier & "\"
     
             F = Dir(Dossier & SpecFic, Attrib)
             U = -(F > "")
             ReDim T(U To U) As String
     
             Do Until F = ""
                ReDim Preserve T(1 To U)
                T(U) = Dossier & F
                   F = Dir
                   U = U + 1
             Loop
     
             DirList = T
    End Function
     
     
    Private Sub Demo()
        T = DirList("*.txt", "D:\Tests")
     
        For N = 1 To UBound(T)
            Debug.Print Format(N, "@@@  "); T(N)
        Next
    End Sub
    Exécuter la procédure Demo et voir le résultat dans la fenêtre Exécution de l'environnement VBA.

    UBound renvoie la valeur zéro si pas de fichier trouvé.


    _______________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  5. #5
    Invité
    Invité(e)
    Par défaut
    C'est parce qu'il faut que tu actives la référence Microsoft Scripting Runtime.

    Sinon tu peux utiliser le 'late binding' auquel cas tu n'as pas besoin d'activer la référence:
    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
    Option Explicit
     
    Private Sub FichierExiste()
    Dim oFSO As Object
     
        'Instanciation du FSO
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        'Instanciation de l'objet File
        If oFSO.FileExists("X:\ ....\ Monfichier.xls") Then
           ...
        Else
           ...
        End If
     
    End Sub
    http://warin.developpez.com/access/fichiers/
    Dernière modification par Invité ; 16/05/2013 à 15h51.

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Ca fonctionne!

    J'ai utilisé ta méthode vcottineau, car c'était la plus courte, je n'ai pas encore regardé la tienne Marc-L car elle me semblait plus complexe mais par curiosité je vais y jeter un oeil pour essayer de comprendre.

    En tout cas merci beaucoup c'était exactement ce que je cherchais et tout marche comme je voulais, tout va bien dans le meilleur des mondes.

    Je vous remercie vous êtes très fort Je comprend enfin le pouvoir des forums.

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

Discussions similaires

  1. [VC++] comment verifier qu'un fichier existe deja
    Par ksoft dans le forum Visual C++
    Réponses: 17
    Dernier message: 21/09/2006, 14h56
  2. [Excel] Tester si le fichier existe
    Par wanou44 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/09/2006, 10h20
  3. Réponses: 4
    Dernier message: 20/06/2006, 09h18
  4. verifier si un fichier existe
    Par franfr57 dans le forum ASP
    Réponses: 7
    Dernier message: 12/02/2006, 10h08
  5. Réponses: 2
    Dernier message: 05/09/2005, 16h32

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