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

VBA Discussion :

Comment sauvegarder un fichier dans un dossier inexistant ?


Sujet :

VBA

  1. #21
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Déjà, dans ton premier code de bloc, supprime le Exit Sub. C'est une mauvaise habitude de mettre des Exit Sub dans ton code. Il te suffit, à la ligne 131, de changer le vbNo en vbYes et de supprimer les lignes 132 et 133.

    Comme je l'avais suggéré précédemment, tu devrais découper ton code en procédures qui ne font qu'une chose! A minima, l'ouverture, le traitement et la sauvegarde du fichier sont trois choses différentes et doivent donc être placées dans trois procédures différentes. Le code tel que tu le proposes nous met dans l'impossibilité de tester ta macro.

    Après la ligne 131, je ne vois pas d'appel aux procédures de test d'existence et de création du dossier. Je ne vois donc pas comment tu pourrais avoir un problème sur la ligne MKDIR. Tu devrais avoir une procédure qui sauvegarde (ou pas) ton fichier, et qui remplacerait les lignes 131 et suivantes... Ici, pour simplifier le code, j'ai laissé tomber les procédures que je t'ai données précédemment. Perso, je préfère les utiliser pour mieux découper le code (la création du dossier pourrait s'avérer plus complexe si le dossier parent du dossier à créer n'existe pas, mais on va faire simple dans un premier temps).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub SaveFile()
      Dim Filename As String
      Dim Path As String
     
      If MsgBox("Do you want...", vbQuestion + vbYesNo, "Confirmation Request") = vbYes Then
        Filename = "FOLLOW_UP_TESTIA_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xlsm"
        Path = InputBox("Select...", "Backup Folder", "C:\Backup_NDT_TESTIA\")
        If Dir(Path, vbDirectory) = "" Then MkDir Path
        ActiveWorkbook.SaveCopyAs Path & Filename
      End If
     
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  2. #22
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Tu pourrais aussi utiliser les FileDialog. L'utilisateur pourrait alors choisir son dossier, voire le créer, en déléguant la création à Windows...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub SaveFile1()
      Dim Filename As String
     
      If MsgBox("Do you want...", vbQuestion + vbYesNo, "Confirmation Request") = vbYes Then
        Filename = "FOLLOW_UP_TESTIA_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xlsm"
        With Application.FileDialog(msoFileDialogSaveAs)
          .Title = "Save File as"
          .InitialFileName = Filename
          .Show
        End With
      End If
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #23
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Points : 79
    Points
    79
    Par défaut
    Merci pour tes conseils éclairés. En effet découper en plusieurs procédures me semble très bien celà permet de tester procédure par procédure. Je vais essayer de mettre cela en pratique. Je n ai ceci dit qu une vague idée de la mise en oeuvre. Comment naviguer entre procédures ? Je suppose via "call ..." ?
    Cdlt.
    Jérôme

  4. #24
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Points : 79
    Points
    79
    Par défaut
    Je vais tester le filedialog cette approche me semble intéressante. Merci bcp pour toutes ces infos. Impressionné par la maîtrise du vba....
    Cdlt
    Jérôme

  5. #25
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    En toute fin de ma procédure je fais appel à la procédure SaveFile que tu me proposes (instruction : call SaveFile).

    1- Y a t-il moyen de proposer un dossier par défaut ?
    2- Lorsque je déroule la macro tout se passe sans problème sauf que le fichier n'est pas enregistré (je lui demande d'enregistrer le fichier sur le bureau) ?
    3- Il m'a propôsé d'enregistrer un fichier avec l'extension .xlsx alors qu'il est noté .xlsm dans la macro ?

    Pourrais-je avoir tes éclairages ? Merci par avance.

    Cdlt.
    Jérôme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub SaveFile1()
      Dim Filename As String
     
      If MsgBox("Do you want...", vbQuestion + vbYesNo, "Confirmation Request") = vbYes Then
        Filename = "FOLLOW_UP_TESTIA_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xlsm"
        With Application.FileDialog(msoFileDialogSaveAs)
          .Title = "Save File as"
          .InitialFileName = Filename
          .Show
        End With
      End If
    End Sub

  6. #26
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Des suggestions sur mon message précédent ? Merci par avance.

    Cdlt.
    Jérôme.

Discussions similaires

  1. Comment copier le fichier dans le dossier interne JSF
    Par zikyoubi dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 20/05/2018, 10h19
  2. Réponses: 1
    Dernier message: 16/05/2017, 14h13
  3. Comment copier un fichier dans un dossier de mon choix
    Par sebac dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 20/05/2010, 12h25
  4. Comment sauvegarder un fichier dans une table sqlite?
    Par Hamdi Hedhili dans le forum SQLite
    Réponses: 2
    Dernier message: 13/11/2008, 09h28
  5. Comment copier un fichier dans le dossier temporaire ?
    Par zaydoun_391 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 28/12/2007, 05h42

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