Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Fichier excel : open, update et copy

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

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

Merci beaucoup pour votre aide !
 
C

Compte Supprimé 979

Guest
Bonjour MarieParis

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

@+
 

herve62

XLDnaute Barbatruc
Supporter XLD
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 ?
 
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
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 ))
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
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.
 

herve62

XLDnaute Barbatruc
Supporter XLD
En fait, je disais que s’il y a déjà un fichier dans le dossier Après je fais aucune action
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
 

Pièces jointes

  • Fichier.xlsm
    16.2 KB · Affichages: 8

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Merci beaucoup herve62, ça marche très bien !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…