IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

ouvrir fenêtre "Enregistrer sous" format xlsm forcé


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    chef de projet
    Inscrit en
    Mars 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet

    Informations forums :
    Inscription : Mars 2019
    Messages : 23
    Points : 15
    Points
    15
    Par défaut ouvrir fenêtre "Enregistrer sous" format xlsm forcé
    Bonjour à tous,
    J'aimerai sauvegarder mon fichier Excel en ouvrant une fenêtre "enregistrer sous" sous format "xlsm",
    Actuellement j'ai ce code qui fonctionne bien, SAUF que l'utilisateur peut choisir n'importe quel format d'enregistrement (ce que je ne souhaite pas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Pour enregistrer le fichier sous un nouveau nom et garder l'ancien
        Dim objSaveBox As FileDialog
        'Définit la fenêtre "Enregistrer sous"
        Set objSaveBox = Application.FileDialog(msoFileDialogSaveAs)
        With objSaveBox
            'Définit un nom par défaut dans le champ "Nom de fichier".
            .InitialFileName = "Nom fichier.xlsm"
            .FilterIndex = 4
            .Show
            'Enregistre
            .Execute
        End With
        Unload Me
    J'ai un autre code qui cette fois enregistre bien sous format xlsm mais ne m'ouvre pas la fenêtre d'enregistrer sous, or je voudrais que les utilisateurs puissent choisir eux même le chemin d'enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            ActiveWorkbook.SaveAs Filename:=chemin & nomfichier, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=True
    Je n'arrive pas à faire un mixte de ces deux codes pour que cela fonctionne, avez-vous des idées ?
    Merci d'avance pour vos réponses !

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Le code tel que je l'utilise en général (à adapter à ton besoin) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Sub Test()
       Call ProposerEnregistrement("Mon Classeur")
    End Sub
     
    Public Sub ProposerEnregistrement(nomClasseur As String, Optional strChemin As String = "")
    ' Propose l'enregistrement d'un classeur
    '
    ' Arguments : nomClasseur         [in]  Nom du classeur (sans extension)
    '             strChemin           [in]  Chemin de destination (répertoire)
    '
    ' 18/02/15    Patrice33740        V1-1-00  Création
    '
    Dim dlgSaveAs As FileDialog        'Boite de dialogue Office
    Dim ext As String                  'Extension du classeur
    Dim msg As String                  'Message pour boite de dialogue
    Dim formule As String              'Formule de calcul
    Dim rép As Integer                 'Réponse boite de dialogue
    Dim idx As Integer                 'Index
     
      ext = ".xlsm"
      nomClasseur = nomClasseur & ext
      'Proposer l'enregistrement du classeur
      Set dlgSaveAs = Application.FileDialog(msoFileDialogSaveAs)
      With dlgSaveAs
        ' nom du classeur
        If strChemin = "" Then
          .InitialFileName = ThisWorkbook.Path & "\" & nomClasseur
        Else
          .InitialFileName = strChemin & "\" & nomClasseur
        End If
        ' filtrer sur l'extension *.xls
        For idx = 1 To .Filters.Count
          If .Filters(idx).Extensions = "*" & ext Then
            .FilterIndex = idx
            Exit For
          End If
        Next idx
      End With
      Do
        ' afficher la boite de dialogue Enregistrer sous
        If dlgSaveAs.Show = 0 Then Exit Sub
        ' vérifier le nom du classeur
        formule = StrReverse(dlgSaveAs.SelectedItems.Item(1))
        formule = StrReverse(Mid(formule, 1, InStr(1, formule & "\", "\") - 1))
        If formule <> nomClasseur Then
          msg = "Confirmer le remplacement du nom normalement prévu : " & vbCr & _
                "«" & nomClasseur & "»" & vbCr & _
                "par le nom qui vient d'être saisi :" & vbCr & _
                "«" & formule & "»"
          rép = MsgBox(msg, vbExclamation + vbOKCancel)
          If rép = vbOK Then nomClasseur = formule
        End If
      Loop While formule <> nomClasseur
      'Enregistrer
      Application.ScreenUpdating = False
      On Error GoTo ErrorHandler
      Application.DisplayAlerts = False
      Application.EnableEvents = False
      dlgSaveAs.Execute
      Application.EnableEvents = True
      Application.DisplayAlerts = True
      On Error GoTo 0
      Application.ScreenUpdating = True
     
    Exit Sub
     
    ErrorHandler:          'Routine de gestion d'erreur.
    Select Case Err.Number
      Case 1004
        'Le classeur est déjà ouvert ou l'enregistrement à été annulé
        If Err.Description = "La méthode 'SaveAs' de l'objet '_Workbook' a échoué" Then
          Resume Next
        Else
          MsgBox "L'enregistrement à échoué :" & vbCr & vbCr & Err.Description, vbInformation
          Resume Next
        End If
      Case Else
        MsgBox Err.Description, vbCritical
        Stop
        Resume Next
    End Select
     
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Membre à l'essai
    Femme Profil pro
    chef de projet
    Inscrit en
    Mars 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet

    Informations forums :
    Inscription : Mars 2019
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Merci Patrice pour ta réponse rapide,
    Cela fonctionne nickel, mais saurais-tu comment faire pour que la liste de choix des autres formats (cf ci dessous) n'apparaissent pas ? Autrement dire, pour que les utilisateurs ne puissent pas choisir un autre format (et pas seulement que xlsm soit le format par défaut)


    Nom : enregistrer sous.png
Affichages : 2416
Taille : 44,3 Ko

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Je ne sais pas si on peut interdire cette liste mais en adaptant les lignes 43 à 52, tu peux rejeter ce qui ne te convient pas (dont une extension inadéquate). D'autre part le save s'effectue à part donc tu peux utiliser le nom que tu veux.
    Et sinon utilises une autre boite de dialogue (par exemple msoFileDialogFolderPicker), pour demander uniquement un répertoire
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    tu a la possibilité d'utiliser un autre dialog aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function enregistrer_sous_XLSM()
     
        fname = Application.GetSaveAsFilename(InitialFileName:=Environ("userprofile") & "\Desktop\" & ThisWorkbook.Name, filefilter:="Xlsm Files (*.xlsm), *.xlsm", Title:="ENREGISTREMENT DU CLASSEUR")
        enregistrer_sous_XLSM = fname
    End Function
    '
    Sub TEST()
    nom = enregistrer_sous_XLSM
    If nom <> False Then ThisWorkbook.SaveAs (nom)
     ActiveWorkbook.SaveAs Filename:=nom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
    End Sub
    tu peux même taper .truc .machin .xls .ce quetuveux tu aura toujours ".xlsm" a la fin
    et le choix des filtres est réduit a un seul "xlsm"


    cela dit Attention que ce soit l'une ou l'autre de dialogue une fois remplie et lancée le fichier macro est fermé et c'est le fichier sauvé qui est a l'ecran
    est ce bien ce que tu veux !!!??????

    ne serait ce pas plutôt une copie de ce fichier sous un autre nom !!!!???????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre à l'essai
    Femme Profil pro
    chef de projet
    Inscrit en
    Mars 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet

    Informations forums :
    Inscription : Mars 2019
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonjour Patrick,
    Merci pour ta réponse,
    Oui, je veux en effet que ce soit le fichier sauvé qui apparaisse à l'écran
    C'est top pour l'affichage de fichiers xlsm seulement, en revanche, la macro m'enregistre le fichier en amont, m'informe par la suite qu'un fichier du même nom existe déjà et si je clique sur "non" (cf image ci dessous), alors il y a un bug...
    Nom : Capture.JPG
Affichages : 2290
Taille : 20,7 Ko

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    ben c'est pas un bug c'est que le fichier existe
    si tu essaie plusieurs fois le dialog avec le même nom c'est sur que tu aura le message
    application.displayalerts=false en debut de sub si tu veux pas voir ce message
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Oupss!!autant pour moi

    je faisait une répétition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub TEST()
    nom = enregistrer_sous_XLSM
    If nom <> "" Then ActiveWorkbook.SaveAs Filename:=nom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre à l'essai
    Femme Profil pro
    chef de projet
    Inscrit en
    Mars 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet

    Informations forums :
    Inscription : Mars 2019
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Pourtant mon fichier n'existe pas sous le nom que je donne en enregistrement (J'ai bien vérifié)
    Mais du coup avec application.displayalerts=false tout fonctionne parfaitement !
    Encore une fois merci (à chaque fois, tes solutions données m'aident beaucoup )

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    de rien sans la repetition tu n'a pas besoins du displays alerts

    et surtout qu'avec le temps tu risque de plus te souvenir si un nom existe ou pas alors vaut mieux laisser l'alerte au cas ou
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre à l'essai
    Femme Profil pro
    chef de projet
    Inscrit en
    Mars 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet

    Informations forums :
    Inscription : Mars 2019
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    De nouveau moi !
    Quand la fenêtre enregistrer sous s'affiche et que je clique sur "enregistrer", tout fonctionne.
    En revanche, si je veux revenir en arrière et cliquer sur "annulez" ou la croix rouge en haut à droite, dans ces cas là mon fichier s’enregistre sous le nom FALSE (Or, j'aimerai qu'il ne s’enregistre tout simplement pas et que le fait de cliquer sur annuler, annule véritablement l'action de vouloir enregistrer).
    Savez-vous comment régler ce problème ?

  12. #12
    Membre à l'essai
    Femme Profil pro
    chef de projet
    Inscrit en
    Mars 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet

    Informations forums :
    Inscription : Mars 2019
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Si ça peut aider, voici le code final que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub CommandButton1_Click()
        nom = enregistrer_sous_XLSM
        If nom <> "" Then
        ActiveWorkbook.SaveAs Filename:=nom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
        Unload Me
    End Sub
     
    Function enregistrer_sous_XLSM()
        NDR = ActiveWorkbook.Path & "\" & nom_client
        FName = Application.GetSaveAsFilename(NDR & "Projet de vie " & nom_client & Format(Now(), "yyyymmdd_hhmm"), filefilter:="Xlsm Files (*.xlsm), *.xlsm", Title:="ENREGISTREMENT DU CLASSEUR")
        enregistrer_sous_XLSM = FName   
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Applet, ouvrir la fenetre "Enregistrer sous" sur u
    Par HopeLeaves dans le forum Applets
    Réponses: 4
    Dernier message: 26/04/2011, 11h38
  2. Problème enregistrer sous le format PDF
    Par dinier dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 17/05/2009, 23h23
  3. Réponses: 3
    Dernier message: 07/11/2008, 11h41
  4. [P-07] Enregistrer sous un format qui accepte les macros
    Par janobrasil dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 01/11/2008, 10h49
  5. [VBA-W]Enregistrer sous au format excel un document Word
    Par tazamorte dans le forum VBA Word
    Réponses: 3
    Dernier message: 20/03/2007, 22h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo