Exporter Excel comme image (jpg) 24


Vous aussi vous trouvez qu'il est assez pénible de faire des captures d'écran de vos tableaux et vos graphiques en Excel? Que cela prend du temps? Alors continuez à lire car je vais vous expliquer comment facilement automatiser cette tâche.

Le code qui suit a encore un grand avantage: il est possible d'exporter une image qui, normalement, dépasserait la taille de l'écran! Ce qui n'est pas possible avec un simple capture d'écran – à moins de commencer à jouer avec le Zoom de la Feuille. Mais cela a un impact négatif sur la lisibilité.

Le code que je vous propose est donc beaucoup plus pratique qu'une capture d'écran classique!

VBA: exporter une partie de fichier Excel vers un fichier image

Il est tout à fait possible d'exporter un fichier Excel (.xls ou .xlsx etc.) ou une partie de celui-ci en tant qu'image (.jpg). Ceci peut considérablement économiser le temps (vous ne devez pas passer par un logiciel de capture d'écran) et surtout apporter de la précision: vous ne devez pas "essayer de couper la sélection au mieux". Le code suivant va exporter EXACTEMENT la partie du fichier Excel dont vous avez besoin. Au millimètre près!

Comment cela fonctionne?

Tout d'abord, on doit sélectionner une plage des cellules que l'on veut "exporter". La "plage" sélectionnée est copié à l'intérieur d'un graphique temporaire. Ce graphique est exporté en tant qu'image et ensuite, il est supprimé du fichier Excel. Tout cela se déroule à l'arrière plan et l'utilisateur ne remarquera rien.

Deux variantes de fonction VBA pour exporter vers un fichier .jpg:

  • La première variante a un seul paramètre (de type Range): la plage de cellules à exporter. Le choix de l'emplacement et du nom du fichier image se fait via le dialogue Excel "Sauvegarder sous…" (Variante A)
  • La deuxième variante, plus complexe mais également plus flexible, utilise toutes les informations nécessaires comme paramètres: la plage à exporter (argument de type Range), l'affichage (ou pas) des lignes de grilles (argument de type Boolean) et l'emplacement et le nom du fichier exporté (argument de type String). (variante B)

Le code VBA de la fonction (variante A)

 

Le code VBA de la fonction (variante B)

Et voici la version qui vous permet d'utiliser les informations nécessaires en tant que arguments.

Remarque pratique: Notez que l'on stocke dans la mémoire (variable LignesDeGrilleOriginal) l'état actuel d'affichage de grilles avant l'export. Une fois l'export effectué, on remets l'affichage dans l'état de départ. Ceci est important car le but n'est pas de modifier les réglages de l'utilisateur. La meilleure pratique est de "restituer" l'Excel à son utilisateur sans aucun changement qu'il n'a pas demandé…

 

L'exemple d'utilisation de la fonction d'export vers fichier JPG (variante B)

Dans le code VBA qui suit, nous allons exporter la plage A1:Z100 de la Feuille "test" vers un fichier image MonImageExcel.jpg dans le dossier C:\temp\

 

Conclusion

Voici donc une astuce qui devrait pouvoir vous économiser du temps et de rendre votre travail plus efficace. N'hésitez pas à partager vos remarques et/ou suggestions dans les commentaires…

15 0

Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

24 commentaires sur “Exporter Excel comme image (jpg)

  • H. Simon

    Je suis étonné de ne voir que rarement (jamais ?) parler de outil Photo. Certes il est bien caché (accesible à ma connaissance seulement par la personnalisation du ruban) mais il permet cette capture d'image directemment.

    • excel-malin.com Auteur du billet

      Ici, il s'agit de la solution VBA qui a l'avantage d'être utilisable à l'intérieur des macros (et donc tout à fait automatisé).
      Pouvez-vous me dire, quelle est le nom exact de la fonctionnalité "Photo" que vous mentionnez? J'ai cherché dans la liste des fonctionnalités de Excel 2010 et Excel 2013 et je ne l'ai pas trouvé…

      Merci pour le tuyau.

  • Totofox

    Merci beaucoup!

    J'ai créé un petit jeu de la vie sur excel. Je voulais exporter certaines création en GIF et cette technique est parfaite pour enregistrer rapidement toutes les itérations dans l'ordre!

    Il ne me manque plus qu'à trouver un software permettant de compiler des images jpg en gif :)/

  • Dam

    Bonjour,

    Merci pour votre super travail. Cela aide vraiment.
    Par contre, j'ai un souci :

    La macro transforme le tableau en image même dans le fichier. je pensais qu'elle transformait cela en mémoire.

    Merci pour votre aide

    • Dam

      Une petite Précision:

      A l'intérieur de mon tableau, il y a une cellule sur laquelle je fais une boucle pour changer la valeur et donc les éléments de mon tableau changement ) chaque passe de la boucle.
      Et comme mon tableau se transforme en image (à la fin de macro) je ne peux pas faire remarcher la macro à moins de fermer le fichier sans l'enregistrer et de le rouvrir ( sinon tableau en image et la cellule sur laquelle je boucle est inaccessible).
      Merci

          • Dam

            Oui c'est vraiment très utile.
            Aujourd'hui j'ai un autre problème:

            .HTMLBody = .HTMLBody & "Disponibles à la location:" _
            & "" _
            & "Bonne lecture, CdG" _

            Dans mon code je fais une boucle pour choisir le bon fichier jpg. Je voudrais donc boucler sur ma colonne E où j'ai toto.jpg à la ligne1, toto2.jpg etc . FichierDisponible ( dans le code ci-dessus) étant une variable
            FichierDisponible = mainWB.Sheets("Mail").Range("E" & i).Value.
            Je ne sais pas comment taduire ça dans le code HTML.

            Merci pour votre aide

          • excel-malin.com Auteur du billet

            En fait, vous voulez inclure dans le code HTML les noms de fichiers ou les images?

            Si les noms de fichiers, cela pourrait être comme suit:
            Sub exemple1()
            ListeImages = ""

            For i = 1 To 10
            ListeImages = ListeImages & mainWB.Sheets("Mail").Range("E" & i).Value & "<br>"
            Next i

            .HTMLBody = .HTMLBody & "Disponibles à la location:<br>" _
            & ListeImages _
            & "<br>Bonne lecture, CdG"

            End Sub

            Si vous voulez afficher les images, il faut utilizer le tag "<img>". Par exemple comme ça:
            Sub exemple2()
            ListeImages = ""

            For i = 1 To 10
            ListeImages = ListeImages & "<img src=""C:\MesImages\" & mainWB.Sheets("Mail").Range("E" & i).Value & """><br>"
            Next i

            .HTMLBody = .HTMLBody & "Disponibles à la location:<br>" _
            & ListeImages _
            & "<br>Bonne lecture, CdG"

            End Sub

          • Dam

            En réalité, je veux adapter le code ci-dessous pour qu'il boucle sur les colonnes et choisir l'image. Dans ce code, le nom des images sont constants. Mon objectif c'est de boucler sur mes colonnes E ( Disponibles) et colonnes F (Taux).
            .Subject = Subject
            .Attachments.Add "U:\Disponibles.jpg", olByValue, 0
            .Attachments.Add "U:\Taux.jpg", olByValue, 0

            .HTMLBody = .HTMLBody & "Disponibles à la location:" _
            & "" _
            & "Bonne lecture, CdG" _
            & "Taux d'utilisation:" _
            & "" _
            & "Bonne lecture, CdG"

            Merci d'avance

          • Dam

            J'ai l'impression que me copier coller de mon code n'affiche pas tout ??

          • Dam

            J'ai pensé à ça :
            .Attachments.Add "U:\" & mainWB.Sheets("Mail").Range("E" & i).Value, olByValue, 0
            .Attachments.Add "U:\" & mainWB.Sheets("Mail").Range("F" & i).Value, olByValue, 0
            .Attachments.Add "U:\" & mainWB.Sheets("Mail").Range("G" & i).Value, olByValue, 0

            je n'ai pas encore testé car je ne sais pas reprendre ça dans le HTML

            .HTMLBody = .HTMLBody & "Disponibles à la location:" _
            & "" _ (cette ligne correspond au nom du fichier jpg contenu dans la colonne E voir les premieres lignes du code .Attachement
            & "Bonne lecture, CdG" _
            & "Départs & Retours:" _
            & "" _ (cette ligne correspond au nom du fichier jpg contenu dans la colonne F voir les premieres lignes du code .Attachement
            & "Bonne lecture, CdG" _
            & "Taux d'utilisation:" _
            & "" _ (cette ligne correspond au nom du fichier jpg contenu dans la colonne G voir les premieres lignes du code .Attachement
            & "Bonne lecture, CdG"

          • Dam

            Théoriquement je vois ce que vous voulez dire mais j'avoue que j'ai du mal à mettre en pratique:
            Du coup, ci-après ma macro complète:

            Sub Envoi()
            Dim mainWB As Workbook
            Dim SendID
            Dim CCID
            Dim Subject
            Dim Body
            Dim olMail As MailItem
            Dim FichierDisponible As Variant

            Set otlApp = CreateObject("Outlook.Application")
            Set olMail = otlApp.CreateItem(olMailItem)
            Set Doc = olMail.GetInspector.WordEditor
            'Dim colAttach As Outlook.Attachments
            Dim oAttach As Outlook.Attachment

            Set mainWB = ActiveWorkbook

            For i = 2 To ThisWorkbook.Worksheets("Mail").Range("A" & Rows.Count).End(xlUp).Row

            FichierDisponible = mainWB.Sheets("Mail").Range("E" & i).Value
            FichierDepartsRetours = mainWB.Sheets("Mail").Range("F" & i).Value
            FichierTaux = mainWB.Sheets("Mail").Range("G" & i).Value

            SendID = mainWB.Sheets("Mail").Range("B" & i).Value
            CCID = mainWB.Sheets("Mail").Range("C" & i).Value
            Subject = mainWB.Sheets("Mail").Range("D" & i).Value
            Body = mainWB.Sheets("Mail").Range("B4").Value
            With olMail
            .To = SendID
            If CCID "" Then
            .CC = CCID
            End If
            .Subject = Subject
            'add the image in hidden manner, position at 0 will make it hidden
            .Attachments.Add "U:\" & FichierDisponible, olByValue, 0
            .Attachments.Add "U:\" & FichierDepartsRetours, olByValue, 0
            .Attachments.Add "U:\" & FichierTaux, olByValue, 0

            .HTMLBody = .HTMLBody & "Disponibles à la location:" _
            & "" _

            ici le fichier Disponibles est renté en dur, je veux récupérer la valeur de ma variable FichierDisponible.

            & "" _

            ici le fichier DepartsRetours est rentée en dur, je veux récupérer la valeur de ma variable FichierDepartsRetours

            & "" _
            ici le fichier FichierTaux est rentée en dur, je veux récupérer la valeur de de ma variable FichierTaux

            & "Bonne lecture, CdG"
            .Display
            .Send

            End With

            Next i

            end sub

            merci

          • Dam

            les tags HtmL passent pas
            je vais essayer une méthode
            HTMLBody = .HTMLBody & "Embedded Image:" _
            & "" _
            & "Best Regards, Sumit"

          • Dam

            Non ca ne fonctionne pas . Mais J'ai juste repris le code de la page que vous m'avez suggérez et j'ai changé (img src='cid:city.jpg' ) le nom de l'image par ma variable.

            Merci

          • Dam

            Bonjour,

            Non cela ne fonctionne. Je guettais votre aide depuis mais j'imagine que vous devez être très pris. 😉
            C'est déjà coché. En fait la macro fonction bien pour envoyer des mails avec les mêmes images dans le corps du mail mais moi mon souhait c'est de choisir l'image en fonction de la boucle.

  • François JAUNAY

    Bonjour,

    je trouve votre variante B bien intéressante, mais débutant en VBA je bute sur une erreur. A l'exécution de la macro cela bug sur
    ExporterPlageCommeImage2
    et j'avoue ne pas comprendre car je n'ai changé que le nom de fichier, la feuille et la zone.
    Merci par avance

    François

    • excel-malin.com Auteur du billet

      Bonjour François,
      vous avez bien copié les deux parties du code dans votre Classeur?
      Il faut que vous mettiez les codes n°2 et n°3 sur cette page en même temps.
      Le n°2 (fonction ExporterPlageCommeImage2) fait l'export en soi, la partie n°3 (procédure ExempleExportImage) lance la fonction en lui transmettant les arguments nécessaires à son exécution (ici la plage, si oui/non pour la grille et le nom de fichier).

      Si vous n'avez copié que le code n°3, il va essayer de lancer la fonction ExporterPlageCommeImage2 mais ne réussira pas car il ne va pas la trouver…
      Bàv,
      Martin