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 :

GetSaveAsFilename et type de fichier (xls ou xlsx) [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut GetSaveAsFilename et type de fichier (xls ou xlsx)
    Bonjour à tous,

    Voilà, j'ai un souci avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.GetSaveAsFilename(NomDuFichier)
    Mon fichier d'origine est ouvert comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Workbooks.Open ThisWorkbook.Path & "\" & NomDuFichier.xls
    Mon problème est que lorsqu'il lance la fenêtre de dialogue "Enregistrer Sous", il ne propose pas d’extension, mon fichier d'origine est ouvert en mode "compatibilité"

    Le fait est que, rien ne s'enregistre. Pas de fichier, ni XLS ni XLSX ni rien... Le type de fichier par défaut est réglé sur "Tous les fichiers (*.*)"

    Le but est de proposé un nom de fichier à l'utilisateur et de le laisser saisir le répertoire de destination...

    Comment faire pour proposer un type de fichier.

    Merci pour votre aide.

    Denis...

  2. #2
    Membre confirmé
    Profil pro
    ERP + Oracle + VBA Excel
    Inscrit en
    Juin 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : ERP + Oracle + VBA Excel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2005
    Messages : 58
    Par défaut
    Bonjour,

    il faut utiliser le paramètre fileFilter dans GetSaveAsFilename

    comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.GetSaveAsFilename(Nomdufuchier,  fileFilter:="Excel  (*.xls), *.xls")

  3. #3
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    J'ai essayé avec çà, mais VBA me demande un "=" ? 'Erreur compilation). Je n'ai pas compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.GetSaveAsFilename (ActiveWorkbook.ActiveSheet.Range("CommuneAffaire").Value & " " & ActiveWorkbook.ActiveSheet.Range("ZNC").Value,fileFilter:="Excel (*.xls), *.xls")
    J'ai bien regardé l'aide en ligne mais je ne vois pas où est l'erreur...

    Denis...

  4. #4
    Membre confirmé
    Homme Profil pro
    Humoriste raté
    Inscrit en
    Janvier 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Humoriste raté

    Informations forums :
    Inscription : Janvier 2015
    Messages : 21
    Par défaut
    Application.DefaultSaveFormat = 51

  5. #5
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Merci de bien vouloir m'aider.
    Maintenant mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Application.DefaultSaveFormat = 56 'xlWorkbookNormal ne fonctionne pas 
      Application.GetSaveAsFilename (ActiveWorkbook.ActiveSheet.Range("CommuneAffaire").Value & " " & ActiveWorkbook.ActiveSheet.Range("ZNC").Value)
    Mais le type de fichier reste "Tous les fichier (*.*)"

    Je cherche sur la toile, mais je n'ai pas trouvé grand chose...

    Et merci encore,

    Denis...

  6. #6
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.DefaultSaveFormat = 56
      Application.GetSaveAsFilename ActiveWorkbook.ActiveSheet.Range("CommuneAffaire").Value & " " & ActiveWorkbook.ActiveSheet.Range("ZNC").Value,fileFilter:="Excel (*.xls), *.xls"

  7. #7
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Merci rdurupt,

    C'est exactement çà, il me propose bien d'enregistrer un XLS. Le problème, c'est qu'il n'enregistre rien, et le nom de mon XLS est toujours celui d'origine...

    Je n'y comprend plus rien ;-)

    Mon fichier n'est pas en lecture seule, il est dans un répertoire dans lequel j'ai tous les droits... Bref, rien.

    Si je fais le "Enregister Sous" manuellement, tout fonctionne parfaitement...

    Je cherche mais ne trouve rien...

    Merci pour l'aide... Car là, on est hors de mes piètres compétences...

    Denis...

  8. #8
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Re bonjour à tous,
    J'ai fais, a force de chercher, un peu évolué mon Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      NomDuFichierCible = ActiveWorkbook.ActiveSheet.Range("CommuneAffaire").Value & " " & ActiveWorkbook.ActiveSheet.Range("ZNC").Value
      Application.DefaultSaveFormat = 56
      Application.GetSaveAsFilename NomDuFichierCible, fileFilter:="Classeur Excel 97 - 2003 (*.xls), *.xls"
    Mais Excel n'enregistre rien... Pourtant, j'ai bien çà :
    Pièce jointe 166738
    Je clique sur "Enregistrer" mais Rien, kedal...
    Comprend pas...

    Le fait que mon classeur "origine" soit un XLS et qu'il soit ouvert en "Mode de Compatibilité" ne peut pas poser de problèmes en faisant un "Enregistrer Sous" ?

    Non, ça ne change rien, je suis passé avec que des XLSX et rien de changé...

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    GetSaveAsFilename ne te renvoie que le nom du fichier, tu dois enregistrer le fichier par la suite.
    Plus d'infos sur MSDN: http://msdn.microsoft.com/fr-fr/libr...ffice.15).aspx

  10. #10
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Merci deedolith pour cette réponse, mais j'ai bien la fenêtre "Enregistrer sous" qui s'affiche avec le bon nom de fichier XLSX. Il ne reste plus qu'à sélectionner le bon répertoire...

    Mon problème c'est que, même en cliquant sur "Enregistrer", il n'enregistre rien...

    Je dois faire la manipulation à la main, ce que je voudrais éviter, car les nom de fichiers sont assez "complexes"

    Denis...

  11. #11
    Membre confirmé
    Homme Profil pro
    Humoriste raté
    Inscrit en
    Janvier 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Humoriste raté

    Informations forums :
    Inscription : Janvier 2015
    Messages : 21
    Par défaut
    Relis le message de deedolith

    Rajoute un saveas

  12. #12
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Bonsoir à tous, et merci de vous pencher sur mon problème...

    Je re-testerais mon code demain avec un SaveAs... Mais je ne comprend toujours pas l'apparition de cette fenêtre si elle est inopérante...

    Bonne soirée à tous...

    Denis...

  13. #13
    Membre confirmé
    Homme Profil pro
    Humoriste raté
    Inscrit en
    Janvier 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Humoriste raté

    Informations forums :
    Inscription : Janvier 2015
    Messages : 21
    Par défaut
    Relis une troisième fois alors, ou va sur le lien de notre ami... Il te donne le nom de fichier sous la forme d'un string!

  14. #14
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Bon, çà me préoccupe trop quand quelque chose ne fonctionne pas comme je le voudrais...

    J'ai bien lu est je suis bien allé sur le lien de deedolith.

    J'ai donc fais ce bout de Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      NomDuFichierCible = ActiveWorkbook.ActiveSheet.Range("CommuneAffaire").Value & " " & ActiveWorkbook.ActiveSheet.Range("ZNC").Value
      ActiveWorkbook.SaveAs Filename:=NomDuFichierCible
    Ca m'enregistre bien mon fichier, mais dans le répertoire active de ActiveWorkBook, ce qu'il faudrait, c'est que l'utilisateur range le fichier dans un emplacement spécifique, qui change pour chaque dossier et qui n'est pas "normalisé"...

    Sur ce, encore merci à tous et bonne soirée à tous...

    Mais je continu de chercher..

    Denis...

  15. #15
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Bonjour à tous,

    Voilà, j'ai refais mon code dans un nouveau fichier, pour ne pas vous envoyer mes fichiers complets et pour que ce soit plus simple pour vous de m'aider, si vous le désirez.

    Le code qui suit est dans "Test_Base.xlsm", il charge "Test_Facture.xlsx" et propose un nom de fichier dans une fenêtre "Enregistrer sous". J'ai choisi "GetSaveAsFilename " car il me permet de demander le répertoire de destination à l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub Facture()
      fichier = "Test_Facture.xlsx"
      Application.Workbooks.Open ThisWorkbook.Path & "\" & fichier
     
     
      ActiveWorkbook.ActiveSheet.Range("CommuneAffaire").Value = ThisWorkbook.ActiveSheet.Range("CommuneAffaire").Value
      ActiveWorkbook.ActiveSheet.Range("ZNC").Value = ThisWorkbook.ActiveSheet.Range("ZNC").Value
     
     
      NomDuFichierCible = ActiveWorkbook.ActiveSheet.Range("CommuneAffaire").Value & " " & ActiveWorkbook.ActiveSheet.Range("ZNC").Value
      'ActiveWorkbook.SaveAs Filename:=NomDuFichierCible
      Application.GetSaveAsFilename NomDuFichierCible, fileFilter:="Classeur Excel (*.xlsx), *.xlsx"
    End Sub
    C'est exactement ce que je cherche à faire, pour que l'utilisateur n'ai plus qu'à choisir l'emplacement de cette facture.

    Mon problème, c'est qu'en cliquant sur "Enregistrer", Excel n'enregistre rien... Et je ne sais pas pourquoi...

    Je vous joint mes fichiers allégés pour que vous puissiez me corriger...

    Amicalement, Denis...

  16. #16
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Citation Envoyé par DenHen Voir le message
    [...]
    Mon problème, c'est qu'en cliquant sur "Enregistrer", Excel n'enregistre rien... Et je ne sais pas pourquoi...
    Bonjour !

    Peux tu relise le post MSDN une quatrième fois alors ? =)

    Nom : Capture.PNG
Affichages : 3242
Taille : 14,8 Ko

    Voilà voilà, Si tu ne code pas la fonction "Enregistrer" (et coder est un bien grand mot, vu qu'elle existe déjà), ça n'enregistre pas.

    Il faut que tu combine ta fonction avec SaveAs, comme ça a été judicieusement précisé plus haut !

    Un peu d'aide ici.

    Bonne chance pour la suite !

  17. #17
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Re bonjour,

    Je vous jure que j'ai lu les aides sur GetSaveAsFilename et sur SaveAs, mais j'ai un peu de mal (en plus, je la trouve généralement en anglais)...

    Si j'ai bien compris, j'utiliserai GetSaveAsFilename pour connaitre l'arborescence du fichier pour faire un SaveAs ensuite.

    C'est çà ? Si oui, je ne sais pas comment récupérer le chemin...

    Merci encore pour vos aides...

    Denis...

  18. #18
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Bonjour,

    C'est exactement ça.

    Essaie de faire comme ça, comme le suggère LaTeXLover précédemment, afin de récupérer le nom du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
     
    Dim strtest
     
    strtest = Application.GetSaveAsFilename(, "Classeur Excel (*.xlsm), *.xlsm")
    Msgbox strtest
     
    end sub
    Tu va voir que la variable strtest contient le nom du fichier ET le chemin sélectionné par l'utilisateur.
    J'ai remis des .xlsm en filtre, parceque si tu sauvegarde un classeur avec macro en xlsx, tu va supprimer toutes les macros.

    Ensuite, un simple SaveAs strtest suffit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
     
    Dim strtest
     
    strtest = Application.GetSaveAsFilename(, "Classeur Excel (*.xlsm), *.xlsm")
    ThisWorkbook.SaveAs strtest
     
    End Sub
    Une petite remarque : si tu travail avec plusieurs classeurs, méfie toi du ActiveWorkbook, ça prend en compte le classeur actif, et pas forcément celui ou il y a le code. Pour être sûr de bien cibler le bon classeur, utilise ThisWorkbook, ou alors assigne des variable Workbook a tes classeurs, puis travaille avec.

    Bon courage pour la suite !

  19. #19
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    J'ai enfin compris...

    Merci à tous pour vos aides... A toutes fins utiles, je poste mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      NomDuFichierCible = ActiveWorkbook.ActiveSheet.Range("CommuneAffaire").Value & " " & ActiveWorkbook.ActiveSheet.Range("ZNC").Value
      FichierComplet = Application.GetSaveAsFilename(InitialFileName:=NomDuFichierCible, fileFilter:="Classeur Excel (*.xlsx), *.xlsx")
      If FichierComplet = False Then Exit Sub
      ActiveWorkbook.SaveAs FichierComplet
    J'ai gardé mon filtre XLSX car mon fichier cible (la facture) ne comporte pas de code.

    @Nico Chg : je jongle effectivement entre ActiveWorkbook et ThisWorkbook car c'est la seule solution que je connaisse. Mais l'utilisation de mes programmes est calculée pour.

    Merci encore à tous pour l'aide reçue.

    Denis (très content)...

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

Discussions similaires

  1. [XL-2010] Convertir un fichier xls en xlsx
    Par Ginette54 dans le forum Excel
    Réponses: 8
    Dernier message: 17/10/2013, 19h50
  2. Lire et écrire sur les fichiers xls et xlsx avec POI
    Par LILIFA dans le forum Documents
    Réponses: 4
    Dernier message: 23/07/2013, 22h33
  3. Réponses: 1
    Dernier message: 06/09/2012, 21h53
  4. [PHPExcel] Fichiers XLS ou XLSX
    Par Friksstyle dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 04/06/2012, 13h57
  5. [XL-2010] OUverture fichier .xls ou .xlsx impossible
    Par morti dans le forum Excel
    Réponses: 0
    Dernier message: 30/01/2011, 19h09

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