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 :

FileFormat Excel 2013


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut FileFormat Excel 2013
    Bonjour,

    dans ce fil

    http://www.developpez.net/forums/d12...-excel-2010-a/

    vous expliquez comment enregistrer correctement un fichier avec les nouvelles versions d'Excel.

    J'ai pris l'exemple suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveWorkbook.SaveAs Filename:="C:\Transfert\Test.xlsb", _
                              FileFormat:=xlExcel12
    et l'ai adapté à mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveAs FileName:=Fichier & ".xlsb", FileFormat:=xlExcel12
    Tout cela fonctionne très bien.

    Mais si j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveCopyAs FileName:=Fichier & ".xlsb", FileFormat:=xlExcel12
    j'obtiens l'erreur "argument nommé introuvable" (FileFormat:=).

    La seule différence est le "SaveCopyAs".

    J'ai lu, par ailleurs, qu'il n'était pas possible de changer l'extension si l'on utilise le SaveCopyAs, ce qui peut paraître logique de prime abord. Par contre, je peux bien faire un .PDF sans rencontrer les mêmes problèmes. Là je suis coincé, car si je fais un SaveAs tout court, je me retrouve avec un classeur ouvert au nouveau nom, ce qui ne correspond pas à mon objectif. Le nouveau classeur généré par VBA doit porter un autre nom et ne contenir qu'une seule feuille contenant les résultats des opérations (pas de formules).

    Si j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveCopyAs FileName:=Fichier & ".xlsb"
    j'obtiens bien un fichier Fichier.xlsx ou xlsb, mais il est impossible à ouvrir Excel ne reconnaissant tout simplement pas son extension.

    En définitive, mon objectif est le suivant :

    Partant du classeur A qui contient une base de donnée
    - je fais une recherche sur la base d'un fichier .txt importé
    - le produit de la recherche est stocké dans la feuil2 du même classeur
    - Cette feuil2 doit être sauvegardée sous un nom contenu dans une variable (Fichier) avec l'extension .xls (à voir si c'est encore nécessaire) ou .xlsb
    - tout cela en laissant le Classeur A actif

    Est-ce possible et si oui comment ? Je précise que je suis novice en VBA.

    Merci d'avance de votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    "SaveCopyAs" n'a qu'un argument et c'est "FileName" et le nom dit bien ce qu'il veux dire c'est une copie du fichier et donc, tu ne peux pas en modifier le type mais juste changer son nom.
    J'ai lu, par ailleurs, qu'il n'était pas possible de changer l'extension si l'on utilise le SaveCopyAs, ce qui peut paraître logique de prime abord. Par contre, je peux bien faire un .PDF sans rencontrer les mêmes problèmes.
    Oui, mais le .pdf tu ne l'ouvre pas avec Excel puisque c'est un tout autre genre fichier !
    Si cette feuille (Feuil2) n'est pas obligée de rester dans le classeur, tu peux utiliser la propriété "Move" sans argument pour la déplacer dans un nouveau classeur :
    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
     
    Sub DeplacerFeuille()
     
        Dim Cls As Workbook
     
        Application.ScreenUpdating = False
     
        'extrait de l'aide :
        'Si vous ne spécifiez ni l'argument Before ni l'argument After, Microsoft Excel crée un nouveau classeur contenant la feuille déplacée.
        Worksheets("Feuil2").Move 'ici, pas d'argument donc, déplacée dans un nouveau classeur
     
        Set Cls = ActiveWorkbook
     
        Cls.SaveAs "C:\Users\Delta-Calor\Downloads\Silve-Herve-Theze.xls"
        Cls.Close
     
        Application.ScreenUpdating = True
     
    End Sub
    Hervé.

    Re,

    Ceci bien évidemment est pour le test et j'ai oublié de le modifier, adapte à tes besoins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cls.SaveAs "C:\Users\Delta-Calor\Downloads\Silve-Herve-Theze.xls"
    Hervé

  3. #3
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Bonjour Hervé,

    merci pour le code. Je l'ai adapté et ça marche.
    Si cette feuille (Feuil2) n'est pas obligée de rester dans le classeur, tu peux utiliser la propriété "Move" sans argument pour la déplacer dans un nouveau classeur
    Il eût été bien qu'elle restât dans le classeur d'origine, mais ce n'est pas grave, je la recrée en début de programme.

    Voici mon bout de code adapté si ça peut servir à quelqu'un d'autre :
    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
    'Enregistre le fichier excel
        Application.DisplayAlerts = False 
     
        MsgBox "Attention ce processus peut durer quelques minutes ! Ne l'interrompez pas."
        Sheets("Liste").Activate
     
        Dim Cls As Workbook
     
        Application.ScreenUpdating = False
     
        Worksheets("Liste").Move
     
        Set Cls = ActiveWorkbook
     
        Cls.SaveAs FileName:=Fichier & ".xlsx"
        Cls.Close
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True  
     
       MsgBox "Le fichier a été créé ici : " & Chr(13) & Fichier _
       & Chr(13) & "Vous avez ainsi la possibilité de le modifier/compléter."
     
       MsgBox "Fin de l'opération de création" _
       & Chr(13) & "de la liste pour votre activité " _
       & Chr(13) & Chr(13) & Act
    Ce qui m'énerve un peu c'est la lenteur de l'enregistrement du nouveau classeur et de son ouverture. Mais bon, on fera avec !

    Encore merci et bonne journée.
    Pascal

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    Il eût été bien qu'elle restât dans le classeur d'origine...
    il suffit de la copier juste avant le déplacement :
    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
     
    Sub DeplacerFeuille()
     
        Dim Cls As Workbook
        Dim Fichier As String
     
        Fichier = "C:\Dossier\Mon classeur"
     
        Application.ScreenUpdating = False
     
        'la feuille est dabords copiée
        Worksheets("Feuil2").Copy Worksheets(Worksheets.Count)
     
        'extrait de l'aide :
        'Si vous ne spécifiez ni l'argument Before ni l'argument After, Microsoft Excel crée un nouveau classeur contenant la feuille déplacée.
        Worksheets("Feuil2").Move 'ici, pas d'argument donc, déplacée dans un nouveau classeur
     
        Set Cls = ActiveWorkbook
     
        Cls.SaveAs Fichier & ".xlsx"
     
        Cls.Close
     
        Application.ScreenUpdating = True
     
    End Sub
    Hervé.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Partant du classeur A qui contient une base de donnée
    - je fais une recherche sur la base d'un fichier .txt importé
    - le produit de la recherche est stocké dans la feuil2 du même classeur
    - Cette feuil2 doit être sauvegardée sous un nom contenu dans une variable (Fichier) avec l'extension .xls (à voir si c'est encore nécessaire) ou .xlsb
    - tout cela en laissant le Classeur A actif
    Autre façon, tu peux faire Sheets("Feuil2").Copy
    Ca te la copie dans un nouveau classeur où tous les formats d'enregistrements te sont accessibles.
    Tu termines avec ActiveWorkbook.Close pour te retrouver dans l'ancien classeur intact.

    eric

  6. #6
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Merci à tous pour vos conseils.

    Il eût été bien qu'elle restât dans le classeur d'origine...
    il suffit de la copier juste avant le déplacement :
    C'est non-seulement souhaitable, mais indispensable, parce qu'après la création d'un nouveau classeur, je crée un .PDF pour la distribution des résultats. Le nouveau classeur Excel est juste là pour apporter des modifications éventuellement nécessaires. Libre ensuite à l'utilisateur de créer un .PDF pour la distribution. J'vais pas vous embêter avec les détails. Il est vrai que cet aspect pourrait également être couvert par le programme. Mais comme tout le monde ne possède pas Excel au moins dans sa version standard, je recherche actuellement une solution indépendante.

    Je me suis d'abord essayé à VB.Net et Sql, mais le temps me manquait pour une approche correcte de la programmation et je me suis lamentablement planté ! J'y retourne pendant les vacances, mais je vais aussi faire un tour du côté de Python. Vu le temp qu'il fait généralement sur la côte d'Opale, ce sera une saine occupation.

    Cordialement
    Pascal

  7. #7
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    juste pour info :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Liste").Copy
    fait exactement ce que je désirais ! Quand on tient un bout du fil, suffit de tirer dessus pour qu'il se déroule ! ça passe ou ça casse !

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    C'est ce que je te proposais à 12h27 non ?
    eric

  9. #9
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    euh... ben oui. Suffisait d'avoir le courage de tester !

    Merci Eric

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

Discussions similaires

  1. [XL-2013] Macros xl ne marchent plus sous excel 2013
    Par burotic2009 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/09/2013, 20h21
  2. Excel 2013 - Add-Ins : Erreur "MetConv.txt"
    Par pikamout dans le forum Excel
    Réponses: 0
    Dernier message: 16/09/2013, 13h08
  3. [Débutant] Imports OXL = Microsoft.Office.Interop.Excel et Excel 2013
    Par Attila54 dans le forum VB.NET
    Réponses: 6
    Dernier message: 27/07/2013, 18h35
  4. [OpenGL 1.x] [Excel 2013] [64 bit]
    Par Invité dans le forum OpenGL
    Réponses: 3
    Dernier message: 26/07/2013, 12h24
  5. Réponses: 1
    Dernier message: 05/04/2013, 10h56

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