vba - copie réseau gérer les erreurs pour ne pas bloquer dans un hors temps
1 réponse
twinley
Bonjour à tous,
En continuation de la question d'Eric, déplacer des fichier en fonction
du nom.
Je vais adapter sa macro pour allez chercher un seul fichier sur un
autre poste réseau, sans tuer l'original donc juste une copie.
Je partais sur la base assez simplissime :
FileCopy "M:\ficsource\File.txt", "C:\ficdest\File.txt"
Mais si la machine à l'autre bout n'est pas allumée, comment gérer les
erreurs ? Ce sera l'occasion d'envoyer un message ( ça c'est ok), mais
c'est surtout comment ne pas bloquer le process dans un hors temps ?
Sub Deplacefichier()
Dim FichSource As String, FichCible As String
'ChDir "c:\pdf\out\"
ChDrive "p:\"
FichSource = Dir("*.pdf")
Do While FichSource <> ""
FichCible = "w:\Documents\" & Left(FichSource, 2) & "\" &
Left(FichSource, 5) & "\" & _
Mid(FichSource, 6, 4) & "\" & FichSource
'FichSource = "c:\pdf\out\" & FichSource
FichSource = "p:\" & FichSource
FileCopy FichSource, FichCible
'Kill FichSource
FichSource = Dir
Loop
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
twinley
Alors aux dernières nouvelles, je me débat avec le code suivant :
Function IsFileOpen(filename As String) Dim filenum As Integer, errnum As Integer
On Error Resume Next filenum = FreeFile() Open filename For Input Lock Read As #filenum Close filenum errnum = Err On Error GoTo 0 Select Case errnum Case 0 IsFileOpen = False Case 70 IsFileOpen = True Case Else Error errnum End Select End Function
Sub CallDemands() Dim Msg, Style, Title If IsFileOpen("d4600aapubliccar2005car.txt") Then MsgBox "Fichier en cours d'utilisation ou machine éteinte" & Chr(13) & "Recommencez plus tard" Else ' copy source, dest FileCopy "d4600aapubliccar2005car.txt", "c:aapubliccar2005car.txt" End If End Sub
Pour simuler une machine arrêtée, je ne partage pas le dossier source. J'ai un message d'erreur msgbox qui stoppe la macro, car il ne trouve pas le chemin. Et il ne part pas en hors temps. Pour une première approche, c'est suffisant. Si je trouve mieux, cela fera l'objet d'une autre version. Adaptation d'après Michdenis.
à+twinley
twinley wrote:
Bonjour à tous,
En continuation de la question d'Eric, déplacer des fichier en fonction du nom.
Je vais adapter sa macro pour allez chercher un seul fichier sur un autre poste réseau, sans tuer l'original donc juste une copie.
Je partais sur la base assez simplissime : FileCopy "M:ficsourceFile.txt", "C:ficdestFile.txt"
Mais si la machine à l'autre bout n'est pas allumée, comment gérer les erreurs ? Ce sera l'occasion d'envoyer un message ( ça c'est ok), mais c'est surtout comment ne pas bloquer le process dans un hors temps ?
Sub Deplacefichier() Dim FichSource As String, FichCible As String 'ChDir "c:pdfout" ChDrive "p:" FichSource = Dir("*.pdf") Do While FichSource <> "" FichCible = "w:Documents" & Left(FichSource, 2) & "" & Left(FichSource, 5) & "" & _ Mid(FichSource, 6, 4) & "" & FichSource
'FichSource = "c:pdfout" & FichSource FichSource = "p:" & FichSource FileCopy FichSource, FichCible 'Kill FichSource FichSource = Dir Loop End Sub
Merci pour l'aide
Alors aux dernières nouvelles,
je me débat avec le code suivant :
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer
On Error Resume Next
filenum = FreeFile()
Open filename For Input Lock Read As #filenum
Close filenum
errnum = Err
On Error GoTo 0
Select Case errnum
Case 0
IsFileOpen = False
Case 70
IsFileOpen = True
Case Else
Error errnum
End Select
End Function
Sub CallDemands()
Dim Msg, Style, Title
If IsFileOpen("\d4600aapubliccar2005car.txt") Then
MsgBox "Fichier en cours d'utilisation ou machine éteinte" &
Chr(13) & "Recommencez plus tard"
Else
' copy source, dest
FileCopy "\d4600aapubliccar2005car.txt",
"c:aapubliccar2005car.txt"
End If
End Sub
Pour simuler une machine arrêtée, je ne partage pas le dossier source.
J'ai un message d'erreur msgbox qui stoppe la macro, car il ne trouve
pas le chemin. Et il ne part pas en hors temps.
Pour une première approche, c'est suffisant. Si je trouve mieux, cela
fera l'objet d'une autre version.
Adaptation d'après Michdenis.
à+twinley
twinley wrote:
Bonjour à tous,
En continuation de la question d'Eric, déplacer des fichier en fonction
du nom.
Je vais adapter sa macro pour allez chercher un seul fichier sur un
autre poste réseau, sans tuer l'original donc juste une copie.
Je partais sur la base assez simplissime :
FileCopy "M:ficsourceFile.txt", "C:ficdestFile.txt"
Mais si la machine à l'autre bout n'est pas allumée, comment gérer les
erreurs ? Ce sera l'occasion d'envoyer un message ( ça c'est ok), mais
c'est surtout comment ne pas bloquer le process dans un hors temps ?
Sub Deplacefichier()
Dim FichSource As String, FichCible As String
'ChDir "c:pdfout"
ChDrive "p:"
FichSource = Dir("*.pdf")
Do While FichSource <> ""
FichCible = "w:Documents" & Left(FichSource, 2) & "" &
Left(FichSource, 5) & "" & _
Mid(FichSource, 6, 4) & "" & FichSource
'FichSource = "c:pdfout" & FichSource
FichSource = "p:" & FichSource
FileCopy FichSource, FichCible
'Kill FichSource
FichSource = Dir
Loop
End Sub
Alors aux dernières nouvelles, je me débat avec le code suivant :
Function IsFileOpen(filename As String) Dim filenum As Integer, errnum As Integer
On Error Resume Next filenum = FreeFile() Open filename For Input Lock Read As #filenum Close filenum errnum = Err On Error GoTo 0 Select Case errnum Case 0 IsFileOpen = False Case 70 IsFileOpen = True Case Else Error errnum End Select End Function
Sub CallDemands() Dim Msg, Style, Title If IsFileOpen("d4600aapubliccar2005car.txt") Then MsgBox "Fichier en cours d'utilisation ou machine éteinte" & Chr(13) & "Recommencez plus tard" Else ' copy source, dest FileCopy "d4600aapubliccar2005car.txt", "c:aapubliccar2005car.txt" End If End Sub
Pour simuler une machine arrêtée, je ne partage pas le dossier source. J'ai un message d'erreur msgbox qui stoppe la macro, car il ne trouve pas le chemin. Et il ne part pas en hors temps. Pour une première approche, c'est suffisant. Si je trouve mieux, cela fera l'objet d'une autre version. Adaptation d'après Michdenis.
à+twinley
twinley wrote:
Bonjour à tous,
En continuation de la question d'Eric, déplacer des fichier en fonction du nom.
Je vais adapter sa macro pour allez chercher un seul fichier sur un autre poste réseau, sans tuer l'original donc juste une copie.
Je partais sur la base assez simplissime : FileCopy "M:ficsourceFile.txt", "C:ficdestFile.txt"
Mais si la machine à l'autre bout n'est pas allumée, comment gérer les erreurs ? Ce sera l'occasion d'envoyer un message ( ça c'est ok), mais c'est surtout comment ne pas bloquer le process dans un hors temps ?
Sub Deplacefichier() Dim FichSource As String, FichCible As String 'ChDir "c:pdfout" ChDrive "p:" FichSource = Dir("*.pdf") Do While FichSource <> "" FichCible = "w:Documents" & Left(FichSource, 2) & "" & Left(FichSource, 5) & "" & _ Mid(FichSource, 6, 4) & "" & FichSource
'FichSource = "c:pdfout" & FichSource FichSource = "p:" & FichSource FileCopy FichSource, FichCible 'Kill FichSource FichSource = Dir Loop End Sub