VBA lire un disque USB externe

tontonbruno Messages postés 6 Statut Membre -  
tontonbruno Messages postés 6 Statut Membre -
Bonjour,
Je lis en VBA Excel un fichier .txt contenant une liste de fichiers ( Path complet + nom ). Pour chaque ligne du fichier je fais :
While Not EOF(F)
    Line Input #F, ContenuLigne
    Set oFSO = New Scripting.FileSystemObject
    If oFSO.FileExists(monfic) Then
        Set oFILISTE = oFSO.GetFile(monfic)
    End If
...

Cela fonctionne très bien quand les fichiers de la liste sont sur un de mes HDD internes.
Mais dès que le fichier est sur un disque USB externe, ça ne fonctionne plus.
Le test " If oFSO.FileExists(monfic) Then " n'est plus vérifié.
Quelqu'un pourrait-il me dire pourquoi ?
Merci à vous.

5 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    que contient la variable
    monfic
    ?
    Je pense que tu peux déplacer la ligne 3 avant la ligne 1.
    0
  2. tontonbruno Messages postés 6 Statut Membre 1
     
    Bonjour yg_be,
    Le code complet, en fait, est le suivant :

    Public Sub Copier()
    Dim monfichier As String
    Dim oFSO As Scripting.FileSystemObject
    monfichier = "D:\100_DATA\120_WEB\www\perso\sites\fileinfo\dir.txt"
    F = FreeFile()
    Open monfichier For Input As #F
    While Not EOF(F)
    Line Input #F, ContenuLigne
    monfichier = Trim(ContenuLigne)
    Set oFSO = New Scripting.FileSystemObject ' Instanciation du FSO
    If oFSO.FileExists(monfichier) Then 'Instanciation de l'objet File
    Set oFILISTE = oFSO.GetFile(monfichier)
    End If
    fin:
    GoTo Suite
    err:
    Select Case err.Number
    Case 53: Debug.Print "--------> Fichier introuvable"
    Case Else: Debug.Print "--------> Erreur inconnue"
    End Select
    Resume fin
    Suite:
    Wend
    Close #F
    End Sub


    Encore une fois, ce code fonctionne avec des fichiers en local. Pas avec des fichiers sur disque USB Externe ... curieux.
    Merci.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      que contient la variable
      monfic
      au moment de l'erreur?
      0
  3. tontonbruno Messages postés 6 Statut Membre 1
     
    Je ne comprends plus rien à l'informatique ! (si j'y ai compris quelque chose un jour ... )
    J'ai relancé now pour répondre à ta question : tous les fichiers fonctionnent.
    J'avais trouvé ce moyen pour lister toutes les photos de mon disque que je n'arrive plus à ouvrir via l'explorateur de Windows.
    Les photos abimées arrivaient à déclencher l'erreur dans le on error ... Plus maintenant !
    Si tu as une idée autre pour résoudre mon problème, je suis preneur.
    PS : j'avais essayé aussi en PHP sans succès ... :(
    Merci d'avance.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu écris "tous les fichiers fonctionnent", et ensuite "résoudre mon problème".
      quel est le problème, puisque tout fonctionne?
      0
  4. tontonbruno Messages postés 6 Statut Membre 1
     
    Voilà le souci : quand je veux ouvrir une photo vérolée par l'explorateur de fichier, Windows me renvoie une erreur.

    Donc je me suis dis : si je les ouvre avec Excel, est-ce que cela me donne une erreur ? Dans ce cas, je pourrais catcher les erreurs et faire une liste des photos vérolées.

    J'ai essayé au début sur une photo : ça fonctionnait. C'est-à-dire qu'Excel me renvoyait une erreur.

    Ensuite, j'ai fait un > DIR > monrep.txt du répertoire de photos par l'invite de commande CMD, pour créer un fichier .txt contenant toutes les photos ( path + nom de la photo ) du répertoire concerné.

    Puis j'ai fait une boucle sur ce fichier .txt et pour chaque ligne, donc chaque path+photo, je fais un " Set oFILISTE = oFSO.GetFile(monfichier) " en espérant catcher les erreurs, par le On Error, dues aux photos vérolées, et ainsi les lister par debug.print.

    Ce qui fonctionnait sur une photo ne fonctionne plus : c'est-à-dire que je passe, pour toutes les photos, même les vérolées, dans la condition :
    If oFSO.FileExists(monfichier) Then                     'Instanciation de l'objet File
      Set oFILISTE = oFSO.GetFile(monfichier)
    End If

    ... sans que cette instruction ne déclenche la clause On Error.
    Public Sub Copier()
    Dim fic_a_tester    As String
    Dim monfichier      As String
    Dim oFSO            As Scripting.FileSystemObject
    monfichier = "D:\100_DATA\120_WEB\www\perso\sites\fileinfo\dir.txt"
    F = FreeFile()
    Open monfichier For Input As #F
    On Error GoTo err
    Set oFSO = New Scripting.FileSystemObject    ' Instanciation du FSO
    While Not EOF(F)
        Line Input #F, ContenuLigne
        fic_a_tester = Trim(ContenuLigne)
        Debug.Print fic_a_tester
        If oFSO.FileExists(fic_a_tester) Then    ' Instanciation de l'objet File
            Set oFILISTE = oFSO.GetFile(fic_a_tester)
        End If
    fin:
        GoTo Suite
    err:
        Select Case err.Number
            Case 53:    Debug.Print "--------> Fichier introuvable"
            Case Else:  Debug.Print "--------> Erreur  inconnue"
        End Select
        Resume fin
    Suite:
    Wend
    Close #F
    End Sub
    

    Résultat du script :
    D:\100_DATA\120_WEB\www\perso\sites\fileinfo\fichiers\2020 20 20 _ 001.jpg
    N:\125_ALBUMS\000125 _ 2001 12 25 - Noel 2001\2001 12 25 _ 030.jpg
    D:\100_DATA\120_WEB\www\perso\sites\fileinfo\fichiers\2020 20 20 _ 002.jpg
    

    A noter que N est mon disque USB externe sur lequel j'ai des soucis de lecture de certaines photos.

    Voilà. J'espère que j'ai été bien clair. N'hésite pas à me dire sinon.

    Merci de ta réponse.
    Cordialement,
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Je ne pense pas que GetFile() en VBA soit capable de détecter que le fichier est vérolé.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tontonbruno Messages postés 6 Statut Membre 1
     
    Effectivement ça ne marche pas.
    Mon sauveur sera ... PYTHON.
    Merci de vos réponse sen tous cas.
    Cordialement,
    0