Choisir un dossier pour la sauvegarde de la feuille active en la recopiant dans un fichier sans les autres feuilles
But : Tout est dans le titre - alors qu'est ce qui veut le monsieur ?
Situation de départ classique, j'ai un classeur avec 3 feuilles, dont une a été renommée
Seule la feuille "Hello" m'intéresse , les feuilles "Sheet2" et "Sheet3" ne m'intéresse pas, elles sont vides par exemple
Je vais donc la recopier dans un nouveau classeur et la sauver suivant 2 méthodes différentes
- en faisant apparaître la boîte de dialogue de sauvegarde de fichier avec le code suivant :
Sub CopieSauvegarde() ActiveSheet.Copy ' crées le nouveau fichier Application.Dialogs(xlDialogSaveAs).Show ' montre la boîte de dialogue End Sub
J'obtiens alors la fenêtre suivante, il me reste à donner un nom au fichier
- On peut aller plus loin, en utilisant une autre boîte de dialogue et en sauvant le fichier sous un nom que l'on construit à partir du nom de la feuille. C'est assez mnémotechnique comme procédé et ceci avec le code
Option Explicit -------------------------- Public Type BROWSEINFO hOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type '32-bit API declarations Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long Function GetDirectory(Optional Msg) As String Dim bInfo As BROWSEINFO Dim path As String, Dossier As String Dim r As Long, x As Long, pos As Integer bInfo.pidlRoot = 0& If IsMissing(Msg) Then bInfo.lpszTitle = "Choisissez un dossier de destination pour les sauvegardes." Else bInfo.lpszTitle = Msg End If bInfo.ulFlags = &H1 x = SHBrowseForFolder(bInfo) path = Space$(512) r = SHGetPathFromIDList(ByVal x, ByVal path) If r Then pos = InStr(path, Chr$(0)) GetDirectory = Left(path, pos - 1) Dossier = GetDirectory & "" Else GetDirectory = "" End If End Function
Sub LancerSauvegarde() Dim reponse As String reponse = GetDirectory ActiveSheet.Copy 'fais la copie de la feuille active ActiveSheet.SaveAs (reponse & "\" & ActiveSheet.Name) End Sub
-
Je ne vous cache pas que je me suis largement inspiré de la page d' Excelabo qui eux-mêmes l'ont empruntée à John Walkenbach
Mais qu'est ce qu'on en fait ? il nous suffit de lancer la macro intitulée "LancerSauvegarde" et de pointer le répertoire souhaité dans la boîte de dialogue qui apparaît et qui ressemble à ceci - le flou en moins 🙂
Cliquez ici pour télécharger le fichier exemple SauvegardeAvecRepertoire