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 :

Macro Enregistrer sous [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Par défaut Macro Enregistrer sous
    Bonsoir,

    Je suis occupé à faire une macro pour "Enregistrer sous" mon fichier qui est .xlsm en .xlsm.
    Le fichier doit s'enregistrer dans un dossier qui porte le nom de la cellule G5, si le dossier n'existe pas nous le créons.
    Je nomme le fichier en concaténant les valeurs de différentes cellules.
    Quand j’exécute la macro: la boite de dialogue "Enregistrer sous' s'ouvre convenablement, le nom du fichier est bien nommé.
    J'appuie sur enregistrer, tout se ferme, pas d'erreur qui apparait.
    Jusque là tout se passe bien.

    Lorsque je vais regarder dans le dossier qui a bien été créé, le fichier n'est pas dedans. il ne s'est pas enregistré.

    Je ne comprends pas mon erreur. Ça fait quelques heures que je suis dessus...
    Pourriez-vous m'aider?
    Ci-dessous le code...

    Merci pour votre aide


    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
     
     
    Public Sub Enregistrer_sous()
     
    Dim Chemin As String
    Dim mondossier As String
    Dim Fichier As String
     
    ' Nom du chemin
    Chemin = "C:\Users\relaa\Desktop"
     
    'Nom du dossier
    mondossier = Range("G5").Value
     
    'nom du fichier
    Fichier = Range("B9") & "_" & Range("C13") & "_" & Range("C12") & "_" & Range("G12") & ".xlsm"
    'MsgBox Fichier
     
    'teste de la présence du dossier
    If Dir(Chemin & mondossier, 16) = "" Then MkDir Chemin & mondossier
     
    ChDrive "C:"
    myFullName = Chemin & "\" & mondossier & "\" & Fichier
     
    MsgBox myFullName
     
    Application.GetSaveAsFilename myFullName, "Classeur Excel (*.xlsm), *.xlsm"
     
     
    End Sub

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pourquoi utiliser Application.GetSaveAsFilename ?
    cette méthode n'enregistre pas le fichier, je crois même que c'est explicitement indiqué dans l'aide

    utilises plutôt la méthode SaveAs de l'objet Workbook, consulter l'aide si besoin

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    pourquoi utiliser Application.GetSaveAsFilename ?
    cette méthode n'enregistre pas le fichier, je crois même que c'est explicitement indiqué dans l'aide

    utilises plutôt la méthode SaveAs de l'objet Workbook, consulter l'aide si besoin
    J'utilise Application.GetSaveAsFilename pour laisser le choix à l'utilisateur de modifier le chemin pour enregistrer son fichier.
    Ce n'est pas la bonne méthode...

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Disons que cette méthode va te permettre de récupérer le chemin qu'a choisi l'utilisateur...et uniquement ça

    faut ensuite enregistrer le fichier

    tiens :
    remplace ta dernière ligne de code par ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    reponse = Application.GetSaveAsFilename(myFullName, "Classeur Excel (*.xlsm), *.xlsm")
     
    MsgBox reponse
    tu fais exprès de changer de répertoire dans la boite de dialogue, tu valides le bouton "enregistrer" de la boite de dialogue
    et regarde ensuite le contenu du message "reponse" par rapport au contenu de myFullName, tu vas comprendre

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Par défaut
    Ok le GetSaveAsFilename récupère uniquement le chemin.
    Ensuite je dois l'enregistrer, j'ai jouté cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveWorkbook.SaveAs Filename:=myFullName, FileFormat:=52 _
    , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
    , CreateBackup:=False
    Le fichier s'enregistre dans le dossier créer et même si je désire lui changer de chemin il l'enregistre dans le dossier créé... CA se complique..

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    tu as compris mon exemple, mais tu ne l'utilises pas, c'est dommage

    myFullName = le chemin que tu prédéfinis
    reponse = le chemin qu'a choisi l'utilisateur

    si l'utilisateur n'a pas changé de répertoire : myFullName = reponse

    mais s'il a changé de répertoire ... il n'y a plus égalité

    tu vois ce qu'il faut changer dans ta ligne de code SaveAs maintenant ?

  7. #7
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voir Manipulation des fichiers en VBA pour FSO.CreateFolder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim sChemin As String
    Const sNomDossier As String = "Dossier copies"
     
    Private Sub CreationDossier()
    Dim FSO As Object
        Set FSO = CreateObject("Scripting.FileSystemObject")
        sChemin = ThisWorkbook.Path & "\" & sNomDossier
        If Not FSO.FolderExists(sChemin) Then FSO.CreateFolder (sChemin)
        Set FSO = Nothing
    End Sub
    Tester la validité des noms de dossiers/fichiers :
    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
    Private Function NomFichierValide(sChaine As String) As Boolean
    Dim i As Long
    Const CaracInterdits As String = """*/:<>?[\]|"
        NomFichierValide = True
        If Len(sChaine) = 0 Then
            NomFichierValide = False
            Exit Function
        End If
        For i = 1 To Len(CaracInterdits)
            If InStr(sChaine, Mid$(CaracInterdits, i, 1)) > 0 Then
                NomFichierValide = False
                Exit Function
            End If
        Next i
    End Function
    Utiliser l'enregistreur de macros, ce qui donnera ( c'est juste un exemple à adapter )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ChDir "C:\Transfert"
        ActiveWorkbook.SaveAs Filename:="C:\Transfert\Classeur1.xlsm", FileFormat:= _
            xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

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

Discussions similaires

  1. [XL-2007] Améliorer ma macro "enregistrer sous"
    Par Gualino dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/07/2011, 18h50
  2. [OpenOffice][Tableur] [calc] macro "enregistrer sous"
    Par chegerg dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 24/03/2009, 06h00
  3. macro enregistrer sous
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/02/2008, 18h43
  4. Macro "enregistrer sous et mise à jour"
    Par Jonathan Raucy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/01/2008, 09h37
  5. Macro enregistrer sous
    Par lara008 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/08/2007, 14h15

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