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 :

Imprimer feuille Excel en JPG


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
    Enseignant Chercheur
    Inscrit en
    Novembre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2019
    Messages : 11
    Par défaut Imprimer feuille Excel en JPG
    Bonjour à tous,

    Je suis un grand débutant dans le mode de la macro (je n'en ai jamais fait), mais j'ai exceptionnellement un besoin qui nécessite ce type d'outil. J'ai bien conscience que l'idéal serait de me former à la programmation, ou à minima à la compréhension du code VBA, mais le temps m'en empêche pour ce besoin précis.

    A partir d'un classeur excel comprenant plusieurs feuilles, je souhaiterais sur chacune d'entre elles avoir un bouton permettant d'enregistrer automatiquement la feuille dans un dossier défini au format JPG. Le nom devrait être celui du classeur, et s'il peut être suivi par celui de la feuille ça serait parfait.

    A ce niveau, ce que je sais, c'est qu'il est possible d'insérer une forme, cliquer droit dessus et mettre associer à une macro. Je sais aussi que PDFcreator permet d'enregistrer sous forme JPG. Mais mes connaissances s'arrêtent là. En cherchant sur le forum, j'ai trouvé plusieurs codes permettant d'enregistrer ne serait-ce qu'en pdf. Mais je dois mal m'y prendre pour l'insérer dans un fichier excel car quand j'appuie sur le petit bouton play de "Visual Basic pour Applications", il me met systématiquement une erreur. Par exemple, "Un composant ActiveX ne peut pas créer d'objet".

    Bref, je m'en excuse, mais il me faudrait de l'aide pour intégrer ça à partir du début, car j'ai peur qu'un "simple" code ne me permette pas d'arriver à une solution fonctionnelle.

    Je vous remercie d'avance.

  2. #2
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 215
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous,

    Sinon, peut-être installer une imprimante virtuelle qui fait ça ?
    https://code-industry.net/imageprinter/

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonsoir,

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
          Répertoire & NomFichier & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, _
          IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False
    Boisgontier
    Fichiers attachés Fichiers attachés

  4. #4
    Membre habitué
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2019
    Messages : 11
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Bonjour à tous,

    Sinon, peut-être installer une imprimante virtuelle qui fait ça ?
    https://code-industry.net/imageprinter/
    Tout à fait!

    C'est pourquoi j'ai pdfcreator qui me permet justement cet export en jpg, et qui me convient parfaitement en terme de rendu obtenu. C'est juste l'automatisation qui me manque. En gros je voudrais qu'en cliquant sur un bouton, pdfcreator soit automatiquement sollicité pour imprimer la zone d'impression de la feuille active en jpg avec les profils par défaut de pdfcreator. Ca me permettrait d'éviter la démarche manuelle qui me prend beaucoup de temps sur chacune des feuilles.

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 215
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous,

    C'est pourquoi j'ai pdfcreator qui me permet justement cet export en jpg
    De la lecture proposée, alors... : https://www.developpez.net/forums/d1...interface-com/

  6. #6
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Septembre 2019
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Septembre 2019
    Messages : 151
    Par défaut
    Bonjour à tous

    si çà peut intéresser
    Nota: la plage des feuilles est à adapter


    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 SauvegardeJPG()
     
    Dim Plage As Range, Feuille As String
    Dim NomFeuille As String
    Dim NBfeuille As Integer
    Dim i As Integer
     
    NBfeuille = Worksheets.Count
        For i = 1 To NBfeuille
            Worksheets(i).Activate
            Feuille = ActiveSheet.Name
            Set Plage = Range("A1:D20") ' à adapter
     
            Application.ScreenUpdating = False
            Workbooks.Add
            Plage.CopyPicture
            ActiveSheet.Paste
                With ActiveSheet.ChartObjects.Add(0, 0, _
                    Selection.Width, Selection.Height).Chart
                    .Paste
                    .Export ThisWorkbook.Path & Application.PathSeparator & ThisWorkbook.Name & "-" & Feuille & ".jpg", "JPG"
                End With
            ActiveWorkbook.Close False
        Next
     
    End Sub

  7. #7
    Membre habitué
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2019
    Messages : 11
    Par défaut
    Merci TonyNiort79.

    Ce code reprend celui de Curt qui fonctionne très bien (mais ne répond pas parfaitement à mon besoin).

    Il faut que je prenne le temps de lire le lien de tototiti2008 en espérant comprendre un minimum pour l'appliquer chez moi, et je reviens vers vous :-)

    Merci

  8. #8
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Bonjour M1k3_38,
    une petite recherche renvoi ce lien... L'as-tu déjà testé ?

    https://excel-malin.com/vba-astuces/excel-vers-jpg/
    Curt

  9. #9
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Et au cas où tu ne t'en sortes pas :

    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
    Public Function ExporterPlageCommeImage(PlageAExporter As Range)
     
    On Error GoTo FonctionErreur
     
        'cacher ou afficher les lignes de grille
        ActiveWindow.DisplayGridlines = False ' or True
     
        'Copier la PlageAExporter comme image dans le Presse-papier
        PlageAExporter.CopyPicture Appearance:=xlScreen, Format:=xlPicture
     
        'Créer un nouveau  "graphique" temporaire qui servira de support - avec la taille exacte de la plage à exporter
        With ActiveSheet.ChartObjects.Add(Left:=PlageAExporter.Left, Top:=PlageAExporter.Top, _
            Width:=PlageAExporter.Width, Height:=PlageAExporter.Height)
            .Name = "ExportImage"
            .Activate
        End With
     
        'Copier l'image dans le graphique, ouvrir le dialog de "Sauvegarder sous", sauvegarde le fichier et supprime le graphique temporaire
        ActiveChart.Paste
        FichierImage = Application.GetSaveAsFilename(InitialFileName:="*.jpg", FileFilter:="Image file (*.jpg), *.jpg")
        If FichierImage = False Then Exit Function
        ActiveSheet.ChartObjects("ExportImage").Chart.Export FichierImage
        ActiveSheet.ChartObjects("ExportImage").Delete
     
    Exit Function
     
    FonctionErreur:
     
        MsgBox "Une erreur est survenue..."
     
    End Function
     
    Sub test()
     
        ExporterPlageCommeImage (ActiveSheet.UsedRange)
     
    End Sub
    Et comme disait DEGAULLE : des Chercheurs on en trouve - Des Trouveurs on en cherche
    Curt

  10. #10
    Membre habitué
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2019
    Messages : 11
    Par défaut
    Merci beaucoup curt pour ton aide!

    Le code parait plus simple que d'essayer de passer par pdf creator! Et en essayant au boulot ce matin, il se trouve que ça fonctionne! Arès avoir bataillé un moment, j'ai trouvé que pour identifier une plage de cellules il fallait utiliser Range("A1:I52") par exemple, à la place de PlageAExporter.

    Ce que je n'ai pas encore réussi, c'est à donner un nom à mon fichier. J'ai tenté de remplacer les * devant les .jpg du code par test par exemple, mais ça me renvoi une erreur lorsque j'execute la macro. Idéalement en fait, j'aimerais que ça me reprenne le texte d'une cellule. Vu que je n'ai pas encore réussi à intégrer dans le code un texte simple, je ne me suis pas encore aventuré à essayer d'intégrer des choses que j'ai pu trouver sur le forum pour reprendre le texte d'une cellule...

    Merci encore!

  11. #11
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Bonjour M1k3_38,

    à priori, tu ne maitrises pas VBA (mais ce n'est pas grave)
    La procédure TEST permettait une approche générique de faire une photo de l'ensemble de la plage de la feuille utilisée. Tu préfères fixer la plage dans le code, pourquoi pas sus réserve qu'elle ne change jamais.
    Pour fixer un nom au fichier jpg, il faut déclarer une variable est l'alimenter avec le contenu d'une cellule (ou autre chose comme le nom de la feuille, ou le nom du fichier Excel)
    Le forum ne manque pas d'exemple sur le sujet.

    Curt

  12. #12
    Membre habitué
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2019
    Messages : 11
    Par défaut
    Re bonjour curt,

    Merci pour tes encouragements. En effet je n'y connais rien. Quand j'aurai le temps il faudra que j'apprenne les bases. En attendant je me casse les dents.

    J'ai fixé une plage de cellules car je souhaite restreindre l'enregistrement à la zone d'impression (ce qui se passait quand je passais manuellement par pdfcreator). Ma plage varie d'une feuille à une autre, mais s'il n'y a pas la possibilité de le faire en fonction de la zone d'impression je ferai comme ça.

    Concernant l'enregistrement en prenant le nom d'une cellule, en cherchant un peu, j'ai vu qu'il fallait créer et définir une variable. J'ai donc rajouté, après la ligne Public Function, les deux lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim NomComplet
    NomComplet = Range("L9").Value
    Mais comment dire à ma macro d'utiliser ensuite cette variable comme nom de fichier avant le .jpg?

    Merci d'avance pour votre patience!

Discussions similaires

  1. [XL-2003] imprimé feuille excel directement d'un userform avec combobox
    Par tazko dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/01/2011, 23h35
  2. imprimer feuille excel bouton/macro
    Par shaku dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/02/2009, 15h47
  3. [POI][JDIC] Imprimer plusieurs "feuilles" Excel
    Par Invité dans le forum Documents
    Réponses: 2
    Dernier message: 22/02/2008, 12h27
  4. Réponses: 21
    Dernier message: 18/05/2007, 09h44
  5. imprimer feuille excel depuis access
    Par Jean Bonnisme dans le forum Access
    Réponses: 3
    Dernier message: 18/11/2004, 08h46

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