Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 ).
 
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
 

Linda42

XLDnaute Occasionnel
Merci à tous.
Ça fonctionne.
Feuil1.Cells(12, 38) : je souhaitais que le contenu de cette cellule fasse parti du nom de la feuille, mais je me suis trompée, la bonne correspondance dans mon fichier c'est Feuil7.Cells(38,12)

Merci encore
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…