Sauvegarde XLSM - Plus de macro
Bonjour,
Premièrement je voulais tous vous remercier car grâce à vous j'ai eu beaucoup d'aide pour créer mon fichier VBA!!
Voici mon problème : J'ai un code pour copier ma feuille dans un nouveau classeur et l’enregistrer en VBA avec macro (XLSM).
Dim objWorkbookCible As Workbook
Dim objworkbooksource As Workbook
Chemin = Application.FileDialog(msoFileDialogFolderPicker).Show
Set objworkbooksource = ActiveWorkbook
Worksheets(1).Copy
Set objWorkbookCible = ActiveWorkbook
ActiveWorkbook.SaveAs Chemin & [A4].Value & "_" & [D4].Value & "_BMO" & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
ActiveWorkbook.save
Mes problèmes sont les suivants :
- Mon fichier ne va pas dans le dernier répertoire sélectionner mais celui en amont
- Il y a toujours un "-1" devant le nom de fichier
- Je n'ai plus une seule macro dans ce nouveau fichier
Merci de votre aide, et continuez comme ça!!
J'ai réussi à arriver dans le bon répertoire avec le code suivant :
Dim objWorkbookCible As Workbook
Dim objworkbooksource As Workbook
Dim Chemin As String
Dim Dossier
Chemin = Application.FileDialog(msoFileDialogSaveAs).Show
MsgBox Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
Set objworkbooksource = ActiveWorkbook
Worksheets(1).Copy
Set objWorkbookCible = ActiveWorkbook
ActiveWorkbook.SaveAs Filename:=Chemin & [A4].Value & "_" & [D4].Value & "_BMO" & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
ActiveWorkbook.save
ActiveWorkbook.Close
Mais j'ai toujours mon -1 devant le nom de fichier :
-1[A4].Value_[D4].Value_BMO.xlsm
Et toutes mes macro disparaissent mais pas mes boutons...
Merci de votre aide!
Salut et bienvenue sur le Forum,
Pour le -1, je ne sais pas trop, si tu lances ta macro au pas à pas, tu vois cette valeur dans la liste des variables. Je ne sais pas si tu fais une erreur ou …..
Tu pourrais essayer de remplacer cette ligne
ActiveWorkbook.SaveAs Chemin & [A4].Value & "_" & [D4].Value & "_BMO" & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
par
ActiveWorkbook.SaveAs Chemin & "\" & [A4].Value & "_" & [D4].Value & "_BMO" & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Sinon essaie cet autre code trouvé sur le net et modifié pour ton cas
Sub ChoixRepertoire()
Dim chemin As String
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
On Error GoTo Gesterr
Set oFolderItem = objFolder.Items.Item
chemin = oFolderItem.Path
ActiveWorkbook.SaveAs chemin & "\" & [A4].Value & "_" & [D4].Value & "_BMO" & ".xlsm"
Gesterr::
End Sub
Cordialement.
Merci Yvouille!
Ta deuxième méthode est juste parfaite!
Mais pense-tu que l'on peut garder que la première feuille (nommée "BMO") lors de la sauvegarde?
Car les autres feuilles contiennent des données confidentielles que je ne peux diffuser...
J'ai réussi avec :
Sheets("Biblio").Select
Application.DisplayAlerts = False
ActiveWorkbook.save
ActiveWorkbook.Close
Merci à toi!
Re,
J’étais en train de chercher une solution à ton problème.
Je suis un peu surpris par ta solution. Tu sélectionnes la feuille ‘Biblio’ alors que tu veux sauvegarder la feuille ‘BMO’ et tu enregistre quand même le classeur complet (ActiveWorkbook.save).
Mais bon, si ça te convient comme ça, tant mieux
Amicalement.
Oui car j'ai deux feuilles dans un fichier de base(BMO et Biblio). Je sauvegarde à partir de ce fichier mais je veux garder que la feuille BMO! Voici le code en entier pour ceux que ça aiderai!
Public Sub sauvegarde_BMO()
Dim chemin As String
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
On Error GoTo Gesterr
Set oFolderItem = objFolder.Items.Item
chemin = oFolderItem.Path
ActiveWorkbook.SaveAs chemin & "\" & [A4].Value & "_" & [D4].Value & "_BMO" & ".xlsm"
Gesterr::
' Supprimer feuille "Biblio"
Sheets("Biblio").Delete
Application.DisplayAlerts = False
ActiveWorkbook.save
ActiveWorkbook.Close
End Sub
Re,
Tu as modifié ton code entre deux. D’abord tu avais Sheets("Biblio").Select, maintenant tu as Sheets("Biblio").Delete.
Ensuite, si tu places ton instruction Application.DisplayAlerts = False après la ligne Sheets("Biblio").Delete, je ne comprends pas à quoi elle sert. Tu auras toujours une fenêtre qui va s’ouvrir pour te demander si tu veux vraiment effacer cette feuille après que tu aies refermé et rouvert ton application Excel (donc après que les Application.DisplayAlerts aient à nouveau automatiquement la valeur TRUE). Puis – tant que l’application Excel reste ouverte - c’est assez dangereux de ne pas réactiver ces alertes, car tu peux avoir d’autres occasions, éventuellement sur d'autres fichiers, où elles pourraient être nécessaires.
Selon moi, cette partie de ton code devrait donc plutôt être :
' Supprimer feuille "Biblio"
Application.DisplayAlerts = False
Sheets("Biblio").Delete
Application.DisplayAlerts = True
Amicalement.