XL 2016 Enregistrer sous? Pourquoi mon code ne fonctionne pas?

Linda42

XLDnaute Occasionnel
Bonjour,

Je souhaite mettre une macro sur un documents qui est enregistrer en Xlsb (modèle excel avec macro) qui permettrait que l'enregistrement de l'utilisateur lui ouvre la boîte de dialogue avec un nom pré rempli.
Je souhaite que l'enregistrement se fasse sous ses documents (il devra choisir les sous dossier en fonction de son organisation et que le radical du nom de fichier soit "Fiches Stratégie_Choix_Performance_" & "Feuil1.Cells(12, 38)" & ".xlsm"

Mon code qui ne fonctionne pas : (la boîte de dialogue s'ouvre bien mais pas de nom)

Private Sub Enregistrer_sous()

Application.Dialogs(xlDialogSaveAs).Show ("Fiches Stratégie_Choix_Performance_" & "Feuil1.Cells(12, 38)" & ".xlsm")

End Sub

Merci pour votre aide.
Linda
 
Solution
Bonjour à tous,

Essayez sans l'extension dans le nom. L'extension étant définie par le deuxième argument.
VB:
Private Sub Enregistrer_sous()
   Application.Dialogs(xlDialogSaveAs).Show "Fiches Stratégie_Choix_Performance_" & Feuil1.Cells(12, 38), xlOpenXMLWorkbookMacroEnabled
End Sub

Ou en plus lisible:
VB:
Private Sub Enregistrer_sous()
Dim Nom$, TypeFormat&
   Nom = "Fiches Stratégie_Choix_Performance_" & Feuil1.Cells(12, 38)
   TypeFormat = xlOpenXMLWorkbookMacroEnabled   '(ou à la place la valeur 52 -> TypeFormat = 52)
   Application.Dialogs(xlDialogSaveAs).Show Nom, TypeFormat
End Sub

Deux liens :
Listes d'arguments de boîte de dialogue intégrée
et
Worksheet.SaveAs method (Excel) - XlFileFormat enumeration...
C

Compte Supprimé 979

Guest
Bonjour Linda42

Le dev. serait si simple, les indépendants arrêteraient de travailler 😜

VB:
    ' En cas d'erreur
    On Error Resume Next
    ' Chemin de Mes Documents
    sPath = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
    ' Nom du fichier à créer
    sFic = "Fiches Stratégie_Choix_Performance_" & "Feuil1.Cells(12, 38)" & ".xlsm"
    ' Demander à l'utilisateur, l'emplacement et le nom du fichier
    sPathFic = Application.GetSaveAsFilename(sPath & sFic, "Microsoft Excel (*.xlsm), *.xlsm", , "CHOIX du DOSSIER d'ENREGISTREMENT...")
    ' Sauvegarder en classeur binaire si non existe
    If UCase(sPathFic) <> "FAUX" Then
      ' https://docs.microsoft.com/fr-fr/office/vba/api/excel.xlfileformat
      ThisWorkbook.SaveAs sPathFic, FileFormat:=xlOpenXMLWorkbookMacroEnabled
    End If
    ' Gestion normale des erreurs
    On Error GoTo 0

A+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Essayez sans l'extension dans le nom. L'extension étant définie par le deuxième argument.
VB:
Private Sub Enregistrer_sous()
   Application.Dialogs(xlDialogSaveAs).Show "Fiches Stratégie_Choix_Performance_" & Feuil1.Cells(12, 38), xlOpenXMLWorkbookMacroEnabled
End Sub

Ou en plus lisible:
VB:
Private Sub Enregistrer_sous()
Dim Nom$, TypeFormat&
   Nom = "Fiches Stratégie_Choix_Performance_" & Feuil1.Cells(12, 38)
   TypeFormat = xlOpenXMLWorkbookMacroEnabled   '(ou à la place la valeur 52 -> TypeFormat = 52)
   Application.Dialogs(xlDialogSaveAs).Show Nom, TypeFormat
End Sub

Deux liens :
Listes d'arguments de boîte de dialogue intégrée
et
Worksheet.SaveAs method (Excel) - XlFileFormat enumeration (Excel)

nota : sans précision, j'ai considéré que les guillemets autour de Feuil1.Cells(12, 38) étaient superfétatoires (mais peut-être pas o_O).
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Utiliser la boite de dialogue intégrée sous forme de fonction permet de savoir si le fichier a été enregistré ou non et autorise l'utilisateur de faire d'autres tentatives:
VB:
Private Sub Enregistrer_sous()
Dim Nom$, TypeFormat&, OK As Boolean
   Nom = "Fiches Stratégie_Choix_Performance_" & Feuil1.Cells(12, 38)
   TypeFormat = xlOpenXMLWorkbookMacroEnabled   'ou la valeur 52)
   Do
      OK = Application.Dialogs(xlDialogSaveAs).Show(Nom, TypeFormat)
      If Not OK Then
         MsgBox Space(15) & "Attention !" & vbLf & vbLf & "Vous n'avez pas enregistré le classeur ! ", vbCritical
         If MsgBox("Voulez-vous ABANDONNER la sauvegarde du classeur ?", vbQuestion + vbYesNo + vbDefaultButton2) = vbYes Then Exit Do
      Else
         MsgBox Space(15) & "Bravo !" & vbLf & vbLf & "Vous avez bien enregistré le classeur ! ", vbInformation
      End If
   Loop Until OK
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 145
Membres
112 669
dernier inscrit
Guigui2502