Enregistrement à partir de "Workbook_BeforeSave"

Fermé
marccruz Messages postés 1 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 9 mars 2021 - 9 mars 2021 à 03:55
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 9 mars 2021 à 12:05
Bonjour,

Quand j'enregistre mon dossier excel, je veux que ce dernier ouvre un autre fichier excel, enregistre une copie de ma feuille dans ce dernier et referme le fichier de manière automatique.

J'ai essayé mon code dans les Sub Workbook_AfterSave ou Workbook_BeforeSave et rien n'y fait

voici le code:

Range("B3:P27").Select
Selection.Copy
Workbooks.Open Filename:= _
"WEB Test.xls"
Range("B3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("B3").Select
ActiveWorkbook.Save
ActiveWindow.Close
Windows("Liste de patients TEST.xls").Activate
Range("B3").Select

Le code ouvre et ferme le dossier mais ne semble pas enregistrer la modification.
Par contre si je met ce code dans une macro et que je l'appelle, tout ce fait nickel.

J'ai besoin d'aide Merci!

Configuration: Windows / Chrome 81.0.4044.113

1 réponse

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié le 9 mars 2021 à 12:07
Bonjour Marc, bonjour le forum,

Quelques petites confusions et des manques de précision pour que ton code fonctionne correctement...
Tout d'abord tu écris Dossier pour parler de Fichier. Ça prête à confusion.
Ensuite pour éviter les bugs il te faut être plus rigoureux dans tes codes. On ne copie pas d'un classeur (ou fichier) vers un autre classeur mais d'un onglet d'un classeur vers un onglet d'un autre classeur.

Si j'ai bien compris ton code, la proposition ci-dessous (à adapter et à placer dans le fichier Liste de patients TEST.xls) devrait convenir :
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)

Set CS = ThisWorkbook 'définit la classeur source CS
Set OS = CS.ActiveSheet 'définit l'onglet source OS [il serait préférable de le nommer du style : OS = CS.Worksheets("Feuil1")]
CA = CS.Path & "\" 'définit la chemin d'accès CA (si ce n'est pas le même il faudra le spécifier du style : CA = "C\blabla\bloblo\blibli\"
Set CD = Workbooks.Open(CA & "WEB Test.xls") 'définit le classeur destination CD en l'ouvrant
Set OD = CD.Worksheets(1) 'définit l'onglet source OS [il serait préférable de le nommer du style : OD = CD.Worksheets("Feuil1")]
OS.Range("B3:P27").Copy OD.Range("B3") 'copie la plage B3:P27 de l'onglet source et la colle dans B3 de l'onglet destination
CD.Close True 'ferme le classeur destination CD en enregistrant les modification
OS.Range("B3").Select 'sélectionne B3 de l'onglet source OS
End Sub


0