VBA lire un disque USB externe

Fermé
tontonbruno Messages postés 6 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 4 octobre 2021 - 23 sept. 2021 à 00:04
tontonbruno Messages postés 6 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 4 octobre 2021 - 4 oct. 2021 à 16:56
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.
A voir également:

5 réponses

yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 Ambassadeur 1 538
23 sept. 2021 à 08:47
bonjour,
que contient la variable
monfic
?
Je pense que tu peux déplacer la ligne 3 avant la ligne 1.
0
tontonbruno Messages postés 6 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 4 octobre 2021 1
25 sept. 2021 à 09:39
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
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
25 sept. 2021 à 11:01
que contient la variable
monfic
au moment de l'erreur?
0
tontonbruno Messages postés 6 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 4 octobre 2021 1
1 oct. 2021 à 19:44
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
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
1 oct. 2021 à 20:52
tu écris "tous les fichiers fonctionnent", et ensuite "résoudre mon problème".
quel est le problème, puisque tout fonctionne?
0
tontonbruno Messages postés 6 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 4 octobre 2021 1
Modifié le 1 oct. 2021 à 22:36
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
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
2 oct. 2021 à 08:15
Je ne pense pas que GetFile() en VBA soit capable de détecter que le fichier est vérolé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tontonbruno Messages postés 6 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 4 octobre 2021 1
4 oct. 2021 à 16:56
Effectivement ça ne marche pas.
Mon sauveur sera ... PYTHON.
Merci de vos réponse sen tous cas.
Cordialement,
0