Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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 à la
mé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,
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.