formateur informatique

Transformer une plage de cellules en image en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Transformer une plage de cellules en image en VBA Excel
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Plage de cellules en image

Avec cette nouvelle astuce VBA Excel, nous allons voir comment-il est possible d'exporter sous forme d'images, des plages de cellules présélectionnées. Cette technique peut s'avérer intéressante lors d'un processus automatisé d'importation de données externes pour réaliser des instantanés périodiques relatant les étapes du procédé.

Classeur Excel à télécharger
Pour la démonstration, nous suggérons d'appuyer l'étude sur un classeur offrant des données à photographier ainsi qu'un bouton prêt à être lié à un code VBA. Nous découvrons un tableau des activités de sorties. Il est constitué de plusieurs centaines de lignes, de quoi donner l'opportunité de photographier de nombreuses zones différentes.

Bouton de feuille Excel pour photographier des plages de cellules en VBA

Sur la droite, vous notez la présence d'un bouton. Il est déjà associé à une procédure VBA. Certes, elle est encore vierge de code. Il est destiné à photographier la plage de cellules sélectionnée pour en faire une image à enregistrer sur le disque.
  • Cliquer droit sur ce bouton,
  • Dans le menu contextuel, choisir la commande Affecter une macro,
  • Dans la boîte de dialogue qui suit, cliquer sur le bouton Modifier,
Nous basculons ainsi dans l'éditeur VBA Access entre les bornes de la procédure exportImg. Son code se déclenchera au clic sur ce bouton.

Les variables
Pour commencer, nous avons besoin de variables, notamment pour piloter la feuille et ses éléments mais aussi les objets graphiques.
  • Dans les bornes de la procédure, ajouter les déclarations suivantes :
...
Dim zoneGraph As ChartObject: Dim laFeuille As Worksheet
Dim chemin As String
...


Nous déclarons tout d'abord un objet (zoneGraph) représentant une zone graphique (ChartObject) destinée à réceptionner la plage de cellules photographiée. Nous déclarons ensuite un autre objet (laFeuille As Worksheet) dont la vocation sera de représenter la feuille active au moment de la demande de la capture. Enfin, la dernière variable (chemin) typée comme un texte (As String) doit servir à mémoriser le chemin dans lequel il sera question d'enregistrer l'instantané. Nous le stockerons à la racine du dossier de l'application.

Les affectations
Maintenant que les variables existent, nous allons pouvoir affecter deux d'entre elles. Il s'agit du chemin d'accès et de la feuille à piloter.
  • Après la déclaration des variables, ajouter les affectations suivantes :
...
chemin = ThisWorkbook.Path & "\" & Replace(Replace(Replace(Now, " ", "-"), "/",""), ":", "") & ".jpg"
Set laFeuille = ActiveSheet
...


L'objet ThisWorkbook désigne le classeur actif. Sa propriété Path renvoie son chemin d'accès. Nous lui concaténons (& "\" &) la date, à la seconde près, purgée de tous les caractères interdits pour un nom de fichier, grâce à de multiples imbrications de la fonction Replace. Nous remplaçons les slashs, les symboles deux points et les espaces, pour un nom de fichier normalisé et unique. Puis, nous initialisons (Set) notre objet laFeuille sur la feuille active au moment de la sélection grâce à l'objet VBA Excel ActiveSheet. Nous allons donc enregistrer chaque capture instantanée dans le dossier du classeur actif.

La sélection en image
L'objet Selection qui désigne la plage sélectionnée, offre de nombreuses propriétés et méthodes. L'une des ses méthodes permet de transformer la plage de cellules sélectionnée en zone graphique.
  • Après les affectations, ajouter les instructions VBA suivantes :
...
Selection.CopyPicture xlScreen, xlBitmap
Set zoneGraph = laFeuille.ChartObjects.Add(0, 0, Selection.Width, Selection.Height)
zoneGraph.Activate
...


Grâce à laméthode CopyPicture de l'objet Selection, nous réalisons une photographie de la plage de cellules sélectionnée. Cette méthode attend deux paramètres. En premier argument, la valeur xlScreen indique de prélever l'apparence comme elle est présentée à l'écran. Avec la valeur xlPrinter, nous aurions prélevé l'apparence comme elle aurait été à l'impression. Il n'y a pas grande différence. En second argument, la valeur xlPicture permet de capturer la plage au format vectoriel (emf, wmf) tandis que la valeur xlBitmap permet d'obtenir une image pixélisée (bmp, jpg, png...). Il reste encore à définir le format précis, ce que nous allons faire.

Ensuite, nous initialisons (Set) l'objet zoneGraph grâce à la collection ChartObjects de la feuille active (laFeuille). La méthode Add permet de créer une nouvelle zone graphique en haut à gauche (0,0) sur la largeur (Width) et la hauteur (Height) de la sélection. Puis, nous activons cette zone graphique (Activate) pour pouvoir l'implémenter par la suite.

Exporter la plage en image
Notre objet graphique zoneGraph offre de nouvelles méthodes dérivées pour construire l'image à partir de la plage et ensuite pour l'exporter au format image sur le disque.
  • A la suite du code VBA, ajouter le bloc With suivant :
...
With zoneGraph.Chart
.Paste
.Export chemin, "JPG"
End With
...


La méthode Paste permet de coller la plage sélectionnée dans la zone Graphique ainsi créée à la volée. Dès lors, la méthode Export permet de sauvegarder l'image ainsi convertie à l'emplacement désigné (chemin) au format jpg, ici en l'occurrence.

Supprimer la zone de graphique
Pour parachever la solution et pour que la zone de graphique ayant servi à exporter l'image ne reste pas visible sur la feuille du classeur, nous devons la supprimer.
  • Pour cela, ajouter l'instruction VBA suivante à la suite du code, après le bloc With :
...
zoneGraph.Delete
...
  • Enregistrer les modifications (CTRL + S) et revenir sur la feuille Excel (ALT + Tab),
  • Sélectionner une plage de cellules et cliquer sur le bouton de macro,
Exporter une plage de cellules en image en VBA Excel

En apparence, rien ne se produit car tout va très vite. Mais si vous vous rendez dans le dossier du classeur, vous constatez la présence d'une image, nommée de façon unique. Et si vous choisissez de l'ouvrir, vous constatez que la plage sélectionnée depuis la feuille Excel a parfaitement été exportée au format image, sur le disque dur.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn