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 :

Enregistrement de fichier via boite de dialogue [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Points : 153
    Points
    153
    Par défaut Enregistrement de fichier via boite de dialogue
    Bonjour,

    J'ai un modèle Excel avec macros (.xltm) et je souhaiterai que lorsque l'utilisateur clique sur enregistrer (première sauvegarde) il propose un nom de sauvegarde par défaut dans la boîte de dialogue Save As avec un répertoire par défaut. Mais qui puisse si l'utilisateur le désir modifier ces valeurs par défaut

    Voici ce que j'ai déjà réalisé :

    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
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
     
        Dim Enreg, Repertoire, Nom As String
     
     'par défaut (ouverture du XLTM le fichier est nommé Fichier_Source1.xlsm)
     
    Repertoire = "C:\Users\Bob\Desktop\" 'répertoire par défaut
     
     
        If Feuil1.Range("B4") <> "" Then
            Nom = (Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 1) & "_" & Format(Date, "yymmdd") & "_" & Feuil1.Range("B4").Value & ".xlsm")
        Else
            Nom = (Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 1) & "_" & Format(Date, "yymmdd") & "_SN.xlsm")
        End If
     
    End Sub
    Par contre j'ignore comment attribuer ces valeurs à la boite de dialogue enregistrer sous. Merci d'avance de votre aide.
    Bonne journée,

    Cordialement,

    Vincent

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Essaie comme ceci pour voir
    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
        Dim Repertoire As String, Nom As String
        Dim Fichier As String
     
        Repertoire = "C:\Users\Bob\Desktop\"
        If Feuil1.Range("B4") <> "" Then
            Nom = (Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 1) & "_" & Format(Date, "yymmdd") & "_" & Feuil1.Range("B4").Value & ".xlsm")
        Else
            Nom = (Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 1) & "_" & Format(Date, "yymmdd") & "_SN.xlsm")
        End If
     
        ChDrive "C"
        ChDir Repertoire
        Fichier = Application.GetSaveAsFilename(Nom)
        If Fichier = "Faux" Then
            Exit Sub
        Else
            ThisWorkbook.SaveCopyAs Fichier & ".xlsx"
        End If
    MPi²

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Points : 153
    Points
    153
    Par défaut
    Merci de cette réponse malheureusement elle ne fonctionne pas

    Elle m'ouvre l'onglet fichier enregistrer sous je choisis un chemin par défaut dans la liste proposée puis m'ouvre la boite de dialogue enregistrer sous où le champs fichier est vide et le type est à tous les formats (sans autre choix possible). Si je valide en l'état il ne se passe rien. Si j'entre un nom de fichier alors il enregistre le fichier avec le nom de fichier renseigné puis m'ouvre une seconde fois la boite de dialogue enregistrer sous avec comme titre de fichier toujours le Fichier_Source1.xlsm.

    Peut être devrais je sortir cette procédure de : Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ?
    Bonne journée,

    Cordialement,

    Vincent

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il y a de nombreuse boites de dialogue "Enregistrer Sous" en VBA.
    Entre autre :
    https://msdn.microsoft.com/library/2...ice.15%29.aspx
    https://msdn.microsoft.com/library/0...ice.15%29.aspx

    Mais toutes ont un point commun : elles n'enregistrent pas le fichier.
    Elles se contentent de récupérer (suivant celles choisies) un chemin et un nom.

    Pour enregistrer, il faut utiliser ces informations dans un SaveAs.
    https://msdn.microsoft.com/fr-fr/vba...s-method-excel
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Dans mon code j'ai mis SaveCopyAs pour enregistrer une copie du fichier source tout en conservant le source en son état, mais tu pourrais utiliser SaveAs pour enregistrer le fichier tel quel.
    Les exemples de Menhir, que je salue, sont très clairs.
    MPi²

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Points : 153
    Points
    153
    Par défaut
    Ok merci pour ces retours mais je ne pige pas (désolé je comprends vite mais il faut m'expliquer longtemps) :

    J'utilise le code proposé par parmi :

    1°) Je déclare mes variables : Répertoire, Nom et Fichier en string
    2°) Je défini les valeurs suivantes :
    a) Repertoire = "C:\Users\Bob\Desktop\"
    b) Nom = (Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 1) & "_" & Format(Date, "yymmdd") & "_" & Feuil1.Range("B4").Value & ".xlsm") 'pour info Feuil1.Range("B4").Value= 4 digits

    c) Fichier = Application.GetSaveAsFilename(Nom) (j'ai également essayé Fichier = Application.GetSaveAsFilename(CVar(Nom))
    Mais la proposition du nom de fichier dans la boîte de dialogue est vide alors que si je propose Application.GetSaveAsFilename("BOB") ça fonctionne. J'ai également essayé de déclaré mes variables en variant mais ça ne fonctionne pas mieux. J'avoue que je sèche et que je suis à court d'idées !
    Bonne journée,

    Cordialement,

    Vincent

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Points : 153
    Points
    153
    Par défaut
    EUREKA ! J'ai trouvé il n'aime pas mais alors pas du tout le .xlsm à la fin das la variable nom !
    Bonne journée,

    Cordialement,

    Vincent

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Vincent32 Voir le message
    c) Fichier = Application.GetSaveAsFilename(Nom) (j'ai également essayé Fichier = Application.GetSaveAsFilename(CVar(Nom))
    Regarde la syntaxe et l'exemple : https://msdn.microsoft.com/library/2...ice.15%29.aspx
    Au passage, je ne vois pas trop pourquoi tu as utilisé un CVar.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

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

Discussions similaires

  1. Inserer du texte via boite de dialogue
    Par jeromer64 dans le forum Powerpoint
    Réponses: 9
    Dernier message: 30/08/2008, 07h16
  2. Enregistrement de fichier via un lien
    Par solorac dans le forum Débuter
    Réponses: 7
    Dernier message: 09/06/2008, 10h11
  3. Comment exporter et enregistrer un fichier via IdHttp
    Par DevBel dans le forum Web & réseau
    Réponses: 2
    Dernier message: 21/01/2008, 17h57
  4. VBA Choisir un fichier par boite de dialogue
    Par benjiprog dans le forum IHM
    Réponses: 6
    Dernier message: 08/08/2007, 16h52
  5. recupérer le chemin de fichiers de boite de dialogue
    Par hijodelanoche dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2005, 13h30

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