SaveAs en restant sur le classeur ?
Bonjour,
Je cherche à pouvoir enregistrer un classeur via macro ;
Je voulais utiliser la fonction workbook.saveAs, voici ce que j'ai pondu :
Sub SAV_Workbook()
Dim wbAct As Workbook
Dim nameWbAct As String
'stocke le classeur actif pour le reactiver
Set wbAct = ThisWorkbook
nameWbAct = ThisWorkbook.Name
Debug.Print("Nom classeur actif ? : " & wbAct.Name & vbCrLf & " et nom du classeur actif : " & nameWbAct)
ThisWorkbook.SaveAs _
fileName:=CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\SAV " & ThisWorkbook.Name, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled
'A PARTIR D'ICI, CA NE MARCHE PLUS
'fermeture du classeur sauvegarde
'ActiveWorkbook.Close --> ca ferme le NOUVEAU et unique classeur encore actif... Donc plus de VBA lisible apres cette ligne, tel qu'écrit ici
wbAct.Activate
End SubAlors déjà, j'ai compris que l'affectation à une variable, du classeur actif ... Etait dynamique, en quelques sortes ?
Via des debugs, j'ai vu qu'après avoir créé le deuxième classeur, ma variable wbAct ne contenait plus la valeur du premier classeur, initialement actif ?!
Je ne savais pas que VBA pouvait avoir des variables dynamiques,
Ce point m'intéresse si vous avez des explications
Ensuite, mon classeur se sauvegarde bien sur le bureau, avec SAV + nom du classeur initial,
Seulement le classeur initial se ferme, et l'actif devient la sauvegarde.
Comment éviter cela ?
J'ai tenté pas mal de choses, sans succès. Je butte toujours sur un soucis...
En particulier, c'est pour ça que j'ai créé wbAct et nameWbAct.
Je souhaitais faire du wbAct.activate (impossible, classeur fermé, variable réinitialisée) ;
J'ai pensé aussi à stocker le chemin du fichier en début de macro, et aller l'open dela ensuite, puis cfermer la sauvegarde,
M'enfin bon ... J'ai laissé tomber, ça me semble trop coûteux, pas du tout intéressant, il y a forcément mieux !
J'ai pensé à créer un nouveau classeur, recopier une à une les feuilles et les noms, supprimer les feuilles inutiles, mais idem -> vraiment nulle comme réponse. Embarassant.
J'ai résolu mon soucis en utilisant SaveCopyAs,
Mais j'ai tout de même besoin de réponses !!
Voici le code (easy) :
Sub SAV_Workbook_SansFermer()
Dim chemin As String
chemin = CreateObject("WScript.Shell").SpecialFolders("Desktop") & _
"\SAV " & ThisWorkbook.Name & ".xlsm"
ActiveWorkbook.SaveCopyAs chemin
'SaveAs fileName:=CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\SAV " & ThisWorkbook.Name, _
' FileFormat:=xlOpenXMLWorkbookMacroEnabled
End SubN'hésitez pas, si vous avez déjà planché sur le sujet, je suis très curieux
J'ai trouvé un topic décrivant le soucis ici, intéressant.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
ThisWorkBook est le classeur où s'exécute le code.
ActiveWorkbook est le classeur actif qui peut être différent de ThisWorkBook.
Le nouveau classeur indiqué via la méthode ".SaveAs" devient automatiquement le classeur où s'exécute le code (donc ThisWorkBook)quelque soit son extension (.xlsx par exemple).
Ce n'est évidemment pas le cas avec la méthode ".SaveCopyAs"
Bonjour,
ThisWorkBook est le classeur où s'exécute le code.
ActiveWorkbook est le classeur actif qui peut être différent de ThisWorkBook.
Le nouveau classeur indiqué via la méthode ".SaveAs" devient automatiquement le classeur où s'exécute le code (donc ThisWorkBook)quelque soit son extension (.xlsx par exemple).
Ce n'est évidemment pas le cas avec la méthode ".SaveCopyAs"
Merci bien, tu confirmes ce que la pratique m'avait enseigné
Mais donc, est-il possible de laisser actif le classeur où a été lancé le SaveAs, après ledit SaveAs ?
Est-ce tout simplement impossible ?
Merci pour ton aide !
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
est-il possible de laisser actif le classeur où a été lancé le SaveAs, après ledit SaveAs ?
Non, car il est fermé automatiquement. La seule possibilité est d'utiliser le SaveCopyAS.
Eh bien tu réponds parfaitement à ma question,
C'est dommage mais c'est bien ce qu'il me semblait !
SaveCopyAs ira très bien pour l'utilisation que je veux de ma macro,
En soit VBA est un vieux langage pas mis à jour, j'ai bien compris ? Ou n'est-ce vrai qu'en partie ?
J'ai fais mes premières lignes de code dessus, j'aime beaucoup VBA
Je clique sur RESOLU !
Merci