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 :

enregistrer des graphiques sous format vectoriel (.emf par exemple)


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 542
    Points : 187
    Points
    187
    Par défaut enregistrer des graphiques sous format vectoriel (.emf par exemple)
    Bonjour,

    Afin d'insérer dans un article des graphiques réalisées en Excel de meilleure qualité, j'aimerais insérer ces graphiques au format vectoriel.
    Est-ce que vous sauriez comment on peut enregistrer un graphique excel au format vectoriel (fichier .emf par exemple) et sans lien avec les données ?
    Merci pour vos idées.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Salut,

    choppe sur staskoverflow
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Option Explicit
     
    Private Declare Function OpenClipboard _
        Lib "user32" ( _
            ByVal hwnd As Long) _
    As Long
     
    Private Declare Function CloseClipboard Lib "user32" () As Long
     
    Private Declare Function GetClipboardData _
        Lib "user32" ( _
            ByVal wFormat As Long) _
    As Long
     
    Private Declare Function EmptyClipboard Lib "user32" () As Long
     
    '// CreateMetaFileA DeleteEnhMetaFile
    Private Declare Function CopyEnhMetaFileA _
        Lib "gdi32" ( _
            ByVal hENHSrc As Long, _
            ByVal lpszFile As String) _
    As Long
     
    Private Declare Function DeleteEnhMetaFile _
        Lib "gdi32" ( _
            ByVal hemf As Long) _
    As Long
     
    'la fonction en question
    Public Function fnSaveAsEMF(strFileName As String) As Boolean
    Const CF_ENHMETAFILE As Long = 14
     
    Dim ReturnValue As Long
     
        OpenClipboard 0
     
        ReturnValue = CopyEnhMetaFileA(GetClipboardData(CF_ENHMETAFILE), strFileName)
     
        EmptyClipboard
     
        CloseClipboard
     
        '// Release resources to it eg You can now delete it if required
        '// or write over it. This is a MUST
        DeleteEnhMetaFile ReturnValue
     
        fnSaveAsEMF = (ReturnValue <> 0)
     
    End Function
    Et le code d'enregistrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub SaveIt()
    Charts.Add
        ActiveChart.ChartArea.Select
        Selection.Copy
        If fnSaveAsEMF("C:\Excel001.emf") Then
            MsgBox "Saved", vbInformation
        Else
            MsgBox "NOT Saved!", vbCritical
        End If
     
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 542
    Points : 187
    Points
    187
    Par défaut
    Salut,

    Merci pour ton aide. Mais, ta réponse est loin d'être une solution clé en main.
    Est-ce que tu pourrais m'apporter des précisions sur comment utiliser cette technique ?
    Visiblement, il faut installer une macro? Pourquoi alors il y a deux codes vba?
    Merci pour vos complements d'infos

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Bonjour,

    je n'ai pas vocation a te donner une solution cle en main non plus tu sais

    Le code VBA est la solution que je te propose, mais si tu trouves sans passer par du code, aucun soucis

    Pour la partie en VBA en question, tu peux lire quelques elements pour commencer :
    http://fauconnier.developpez.com/tut...istreur-macro/

    Il te faudra recopier les lignes que je t'ai donnees dans un module.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pas une solution clé en main ? Il te manque quoi du coup, quelqu'un qui fait le copier coller à ta place de ces deux procédures ?

    Le premier code, c'est le moteur qui permet la création
    Le second code, c'est un exemple complet pour utiliser le moteur

    Tu copies TOUT ça dans un module standard de ton projet VBA et tu adaptes Sub SaveIt() avec tes propres paramètres

    Si tu veux que les contributeurs aillent encore plus loin dans le clé en main, va falloir que tu leur donnes une partie de ta rémunération, car ça devient clairement un "travail fait à ta place"

    Sans animosité, mais il faut parfois dire les choses telles qu'elles se présentent ....

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 542
    Points : 187
    Points
    187
    Par défaut
    Et bien je crois qu'il me manquait ce que tu viens de m'apporter à savoir comment utiliser ces modules.

    Le premier code, c'est le moteur qui permet la création
    Le second code, c'est un exemple complet pour utiliser le moteur

    Tu copies TOUT ça dans un module standard de ton projet VBA et tu adaptes Sub SaveIt() avec tes propres paramètres
    Là, çà se précise. Désolé pour le mot "clé en main" qui n'était peut-être pas approprié. En tout cas, quelques phrases explicatives étaient à mon sens bien utile.

    Merci pour votre aide

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    You're Welcome

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 542
    Points : 187
    Points
    187
    Par défaut
    Bonjour,

    Merci pour vos conseils.

    J'ai crée un projet et, dans ce projet, un module contenant ce code :

    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
    31
    32
    Public Function fnSaveAsEMF(strFileName As String) As Boolean
    Const CF_ENHMETAFILE As Long = 14
     
    Dim ReturnValue As Long
     
        OpenClipboard 0
     
        ReturnValue = CopyEnhMetaFileA(GetClipboardData(CF_ENHMETAFILE), strFileName)
     
        EmptyClipboard
     
        CloseClipboard
     
        '// Release resources to it eg You can now delete it if required
        '// or write over it. This is a MUST
        DeleteEnhMetaFile ReturnValue
     
        fnSaveAsEMF = (ReturnValue <> 0)
     
    End Function
     
    Sub SaveIt()
    Charts.Add
        ActiveChart.ChartArea.Select
        Selection.Copy
        If fnSaveAsEMF("C:\Users\boudon.b\Desktop\courbe.emf") Then
            MsgBox "Saved", vbInformation
        Else
            MsgBox "NOT Saved!", vbCritical
        End If
     
    End Sub
    Ensuite, je sélectionne un graphique et lance la macro SaveIt qui est apparut dans la fenetre Macros.

    Par contre, celà ne fonctionne pas et j'obtiens le message d'erreur suivant :

    Impossible d'executer en mode arret
    Est-ce que vous auriez des idées afin que j'arrive à faire fonctionner ce module VBA correctement ?

    Merci d'avance pour votre aide et vos conseils.

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Salut,

    une rapide recherche donne des exemples de solutions :

    http://www.developpez.net/forums/d44...de-mode-arret/

    1/ tu retires tous les points d'arret
    2/ tu compiles le code
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

Discussions similaires

  1. [XL-2007] Macro Xl Enregistrement des classeurs sous un format Excel 4.0
    Par Rcomte1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/12/2012, 12h39
  2. afficher des bytes sous format hex
    Par zantar dans le forum MFC
    Réponses: 2
    Dernier message: 21/12/2005, 12h54
  3. XP "enregistrer l'image sous" : formats disparus !
    Par NEXUS6 dans le forum Windows XP
    Réponses: 7
    Dernier message: 18/12/2005, 11h08
  4. Comment enregistrer des graphiques pour le web?
    Par pepe2006 dans le forum Access
    Réponses: 1
    Dernier message: 11/10/2005, 20h08

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