Erreur exécution 53 sur fichier SRT
Bonjour,
Je souhaite réaliser une macro qui permet de :
Sélectionner un dossier
Lire tous les fichiers (SRT)
Extraire les 3 dernières lignes et les traiter
Stocker 2 valeurs (SumIn et SumOut) issue de cette ligne dans un tableau
Lors de la compilation j'ai une "Erreur d’exécution 53, fichier introuvable"
Open sFichier For Input As #iFile 'on ouvre le fichier srtJe ne comprends pas car le fichier existe bien,
Lorsque je passe mon curseur sur sFichier, il m'affiche bien un fichier SRT (DOOR_1_20150726-091525.srt),
Idem pour repertoire qui part de la racine,
Je ne sais pas si c'est du à une erreur de langage ou si c'est Excel qui ne parvient pas a ouvrir le fichier SRT
Je vous joint mon code, vous comprendrez que je ne suis pas un Dieu d'Excel
Merci pour votre aide !!
Julien
Public repertoire As String, i As Byte, c As Byte
Sub Subtitles_cmd()
If Range("Z17") > 0 Then 'vérification d'une entrée
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "Sélectionner répertoire"
.Filters.Clear
.AllowMultiSelect = False
If .Show = -1 Then
repertoire = .SelectedItems(1)
Select Case Range("Z17")
Case Is = 1
Call Subtitles_extract(1, 4)
Call Subtitles_extract(2, 10)
Call Subtitles_extract(3, 16)
Case Is = 2
Call Subtitles_extract(1, 4)
Case Is = 3
Call Subtitles_extract(2, 10)
Case Is = 4
Call Subtitles_extract(3, 16)
End Select
End If
End With
Else
MsgBox "Please select a door number"
End If
End Sub
Sub Subtitles_extract(n, c)
Dim sFichier As String
Dim iFile As Integer
Dim LastLine1, LastLine2, LastLine As String
Dim i As Long 'numéro de ligne / fichier
Dim SumIn, SumOut As Byte
Application.ScreenUpdating = False
sFichier = Dir(repertoire & "\DOOR_" & 1 & "*.srt") 'Retourne uniquement les fichiers .srt et porte N
iFile = FreeFile() 'Numéro du fichier à ouvrir
i = 7
LastLine1 = ""
LastLine2 = ""
LastLine = ""
Do While sFichier <> "" 'Boucle sur tous les fichiers srt
Open sFichier For Input As #iFile 'on ouvre le fichier srt
While Not EOF(iFile) 'Boucle sur toutes les lignes du fichier
Line Input #iFile, LastLine1 'Récupère le contenu de toute les ligne et garde la dernière dans la variable LastLine
LastLine = LastLine2 'Stock les 3 dernières lignes
LastLine2 = LastLine1
Wend
Close #iFile 'Ferme le fichier Texte
If IsNumeric(Mid(LastLine, InStr(LastLine, "SumIn"), 2)) Then 'Test si nombre
SumIn = Mid(LastLine, InStr(LastLine, "SumIn"), 2)
ElseIf IsNumeric(Mid(LastLine, InStr(LastLine, "SumIn"), 1)) Then 'Test si chiffre
SumIn = Mid(LastLine, InStr(LastLine, "SumIn"), 1)
Else
SumIn = "0"
End If
'InStr Renvoie la position de la première occurrence d'une chaîne ("e")
If IsNumeric(Mid(LastLine, InStr(LastLine, "SumOut"), 2)) Then
SumOut = Mid(LastLine, InStr(LastLine, "SumOut"), 2)
ElseIf IsNumeric(Mid(LastLine, InStr(LastLine, "SumOut"), 1)) Then
SumOut = Mid(LastLine, InStr(LastLine, "SumOut"), 1)
Else
SumOut = "0"
End If
Cells(i, c) = SumIn 'Écrit IN dans le fichier Excel
Cells(i, c + 1) = SumOut 'Écrit OUT dans le fichier Excel
i = i + 1 'Incrémente la ligne
If i >= 150 Then Exit Do 'N'importer que les lignes 143 premiers fichiers
sFichier = Dir 'Trouve le prochain fichier Texte
Loop
Application.ScreenUpdating = True
End SubExemple de fichier SRT nommé: DOOR_1_20150726-091525.srt
0
00:00:02,759 --> 00:00:04,654
In: 1 <b>[SumIn=1]</b>
Out: 0 <b>[SumOut=0]</b>
1
00:00:04,655 --> 00:00:11,564
In: 1 <b>[SumIn=2]</b>
Out: 0 <b>[SumOut=0]</b>Bonjour,
h0uSe a écrit :Je ne comprends pas car le fichier existe bien,
Lorsque je passe mon curseur sur sFichier, il m'affiche bien un fichier SRT (DOOR_1_20150726-091525.srt),
Idem pour repertoire qui part de la racine
Ton erreur est justement là
"sFichier" ne contient que le nom de ton fichier et non l'arborescence complète
A+
Merci Bruno !
Effectivement la réponse était dans la question
J'ai relus l'aide sur Dir,
sFichier = Dir(repertoire & "\DOOR_" & n & "*.srt")Ici sFichier Renvoi bien le nom du fichier et non la concaténation de mon repertoire + fichier
Pour palier à ça j'ai remplacé par
Open repertoire & "\" & sFichier For Input As #iFileça fonctionne, mais y a t il une meilleur façon de faire ?
Encore merci
Julien
Salut Julien,
h0uSe a écrit :Pour palier à ça j'ai remplacé par
Open repertoire & "\" & sFichier For Input As #iFileça fonctionne, mais y a t il une meilleur façon de faire ?
Sauf à concaténer ton chemin d'accès complet dans une autre variable (quel interêt), c'est la seule
Au plaisir