Je voudrais, après l'ouverture du fichier Excel, faire une mise à jour et une copy dans un autre répertoire.
Pour tester les données, j'utilise la formule =aujourd'hui().
Quand j'ouvre le fichier copier, je n'ai pas de mise à jour.
Mon code est :
VB:
Option Explicit
Public Duree As Date
Function FichierExiste(FPath As String) As Boolean
Dim NomF As String
NomF = Dir(FPath)
If NomF <> "" Then FichierExiste = True _
Else: FichierExiste = False
End Function
Sub Fermer()
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Application.DisplayAlerts = False
With ThisWorkbook
.RefreshAll
.Save
.Close
Application.DisplayAlerts = False
Call
oFSO.CopyFile("\\XXXX\Dossier_avant\Fichier.xlsm", "\\XXXX\Dossier_apres\", True)
End With
End Sub
Sub StartHeure()
Duree = Now + TimeValue("01:00:30")
Application.OnTime Duree, "Fermer"
End Sub
Et dans ThisWorkbook :
Code:
Option Explicit
Private Sub Workbook_Open()
If FichierExiste("\XXXX\Dossier_apres\Fichier.xlsm") = False Then
Call StartHeure
Else
ActiveWorkbook.Close True
End If
End Sub
Mettez l'instruction "Stop" dans votre code pour permettre le débogage et vous verrez ce qui se passe
VB:
Private Sub Workbook_Open()
Stop ' ICI stop l'éxécution pour Pas à pas avec F8
If FichierExiste("\XXXX\Dossier_apres\Fichier.xlsm") = False Then
Call StartHeure
Else
ActiveWorkbook.Close True
End If
End Sub
Bonjour
Si tu mettais ton copyfile avant de fermer ça devrait aller mieux non ?
car j'ai testé ton code forcément qu'avec le .CLOSE je vois pas comment on peut continuer le code ?
Sinon en l'exécutant en entier , et si j'ai bien compris c'est bien Fichier.xlsm ci dessous que tu ouvres ? parce que si ta fonction renvoie True donc "Fichier.xlsm" existe , tu le fermes immédiatement ??
VB:
Call oFSO.CopyFile("\\XXXX\Dossier_avant\Fichier.xlsm", "\\XXXX\Dossier_apres\", True)
With ThisWorkbook
.RefreshAll
.Save
.Close
Application.DisplayAlerts = False
end with
Sinon je pige pas ton process ? : Après 1h et 30sec : tu quittes automatiquement ton prog ?
Bonjour
Si tu mettais ton copyfile avant de fermer ça devrait aller mieux non ?
car j'ai testé ton code forcément qu'avec le .CLOSE je vois pas comment on peut continuer le code ?
Sinon en l'exécutant en entier , et si j'ai bien compris c'est bien Fichier.xlsm ci dessous que tu ouvres ? parce que si ta fonction renvoie True donc "Fichier.xlsm" existe , tu le fermes immédiatement ??
VB:
Call oFSO.CopyFile("\\XXXX\Dossier_avant\Fichier.xlsm", "\\XXXX\Dossier_apres\", True)
With ThisWorkbook
.RefreshAll
.Save
.Close
Application.DisplayAlerts = False
end with
Sinon je pige pas ton process ? : Après 1h et 30sec : tu quittes automatiquement ton prog ?
Merci Herve62,
Oui, c'est un fichier xlsm.
Je voudrais faire un refresh des données et copier le fichier après.
Si le fichier existe déjà dans le dossier destinataire, je ne copie pas.
En fait, c'est 30 sec )) j'ai ajouté 1h pour pouvoir modifier le code ))
tu ne copies pas quoi ?
Ce n'est pas clair , donne le fichier avec lequel tu travailles , quel fichier veux tu copier après 1h ? (et 30sec ???)
le même ?
moi je parle du NOM , il s'appelle Fichier.xlsm ? comme dans ton code ?
tu ne copies pas quoi ?
Ce n'est pas clair , donne le fichier avec lequel tu travailles , quel fichier veux tu copier après 1h ? (et 30sec ???)
le même ?
Oups désolée, mon fichier s’appelle Fichier oui. En fait, je disais que s’il y a déjà un fichier dans le dossier Après je fais aucune action (car je ne sais si on peut écraser ce fichier en copiant). Oui, 30 secondes.
Voilà enfin j'ai pigé , donc voilà la solution , j'ai testé avec un rep "save" ( le APrès) chez moi le Fichier était sous c:\DATA ( Avant)
Donc si Fichier.xlsm présent dans save le prog ferme le fichier ( donc celui de Avant) sinon après 30sec il le copie dans save puis enregistre et quitte
J'ai laissé 30sec pour tester
Voilà enfin j'ai pigé , donc voilà la solution , j'ai testé avec un rep "save" ( le APrès) chez moi le Fichier était sous c:\DATA ( Avant)
Donc si Fichier.xlsm présent dans save le prog ferme le fichier ( donc celui de Avant) sinon après 30sec il le copie dans save puis enregistre et quitte
J'ai laissé 30sec pour tester