Abonnement à ma liste de contacts

PJ1: exemple_pour_IG.pptx
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives
 

Je vous partage ici une recherche que j'ai effectuée pendant de nombreuses heures là aussi. Vous connaissez ma présence sur les réseaux sociaux, notamment sur Instagram. Si vous ne saviez pas que je partage aussi mes informations sur Instagram, vous pouvez toujours vous abonner à mon compte à cette adresse. Mais là n'est pas la question de faire de la publicité, cet article a pour but de répondre à la question suivante : comment générer des images que j'utilise sur mes réseaux sociaux, qui vont contenir quasiment toujours du texte, à des endroits prè-déterminés, et quasiment toujours sur la même architecture de l'image ?

 Un peu de modernisme

Je ne vous cacherai pas qu'avant de trouver cette solution, je me suis réorienté sur mes compétences anciennes que j'avais, à savoir générer des images en mode ligne de commande. Oui oui vous avez bien lu. Une petite parenthèse, c'est comme ça que nous faisons en PHP lorsque nous utilisons des bibliothèques graphiques comme GD exemple.
Toutefois, je voulais plutôt travailler en "mode graphique" (je suis un homme moderne moi :) ), et surtout de manière relativement simple. C'est la raison pour laquelle j'ai utilisé un outil que je pense vous connaissez tous : PowerPoint

Non mais tu codes (aussi) en PowerPoint ?

 Cette question me rappelle une longue discussion philosophique avec mon professeur d'algorithmique. Il m'a toujours soutenu des paroles que, avec l'expérience, je comprends de mieux en mieux:
"Professionnellement, tu coderas avec les outils qu'on te donnera"
Bon j'avoue, ici j'adapte un petit peu sa phrase : pour m'amuser, je code avec les outils que j'ai sous la main.

Le principe d'utilisation de mon outil

J'utilise l'outil PowerPoint pour générer une image au format JPEG, en détournant l'utilisation de PowerPoint, à savoir pouvoir enregistrer une diapositive au format JPEG. Il faut plutôt parler d'export qu'enregistrement, car nous allons, au travers de ce code, récupérer l'objet diapositive avec l'ensemble de son contenu, à savoir ses propriétés, ses méthodes comme on pourrait et avoir en programmation objet. A la seule différence avec un langage de programmation "classique", une diapositive PowerPoint ne possède pas de méthodes qui lui sont propres (ou je ne les ai pas vu).
En revanche, le framework de PowerPoint propose la possibilité de travailler sur un objet slide, un objet diapositive en bon français, cet objet pouvant avoir des méthodes tout à fait particulières, et nous allons utiliser l'une d'entre elles : export

Revenons sur le code de ma Macro

Bien entendu vous pourrez récupérer le code de ma macro pour le réutiliser. Mais je tiens avant tout à le commenter un petit peu.
Cette macro propose, dans un premier temps, de récupérer dans un objet de type Slide, diapositive sur laquelle j'ai "posé" l'ensemble de mes objets graphiques et textuels sur lesquels seront les informations que je souhaite afficher. Une fois ces objets instanciés en mémoire, je vais changer quelques propriétés de type textrange. Et comme ces propriétés sont le résultat d'une interaction avec l'utilisateur, j'utilise des boîtes de messages qui vont demander les informations à l'utilisateur que je souhaite modifier.
 Lorsque toutes les interactions utilisateurs terminées, je déclare le chemin où je souhaite enregistrer mon image finale, je déclare aussi une variable du nom que je souhaite donner à mon image, bien entendu je déclare un objet de type slide qui va contenir l'ensemble de la diapositive.
Une fois toutes ces déclarations effectuées, (je passe sur le Onerror goto qui est propre à vba et qui permet de sortir de la boucle en cas d'erreur via le label err_imageSave) je défini  dans une variable le chemin où je souhaite enregistrer mon image, et à l'issue de cette déclaration, à l'aide d'une boucle foreach qui est dans ce cas complètement inutile, je vais pour chacune des diapositives du fichier, les enregistrer sur mon disque dur.
Inutile je le disais, mais je l'ai volontairement gardé car elle peut vous permettre, si vous avez plusieurs diapositives à exporter de votre présentation PowerPoint en plusieurs images JPEG représentant chacune de vos diapositives, de sauvegarder en un clic, l'ensemble du fichier.
Sub Auto_open()
Dim oSld As Slide
Dim oShp As Shape

Set oSld = Application.ActivePresentation.Slides(1)
ActivePresentation.Slides(1).Shapes(2).TextFrame.TextRange = InputBox("Quel titre donner (en haut en gras) ?", "")

ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange = InputBox("Il fait quoi ce code,ce que tu présentes", "ce code permet de...")



Dim sImagePath As String
Dim sImageName As String
Dim oSlide As Slide '* Slide Object
On Error GoTo Err_ImageSave

sImagePath = "C:\Users\33651\Desktop\"
For Each oSlide In ActivePresentation.Slides
sImageName = ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange & ".jpg"
oSlide.Export sImagePath & sImageName, "JPG"
Next oSlide

Err_ImageSave:
If Err <> 0 Then
MsgBox Err.Description
End If

End Sub

Intégration du script dans un fichier PowerPoint

Ce paragraphe rajouté à la relecture de l'article, cela m'étant totalement logique, j'avais oublié d'en parler.
Pour réintégrer ce script dans votre fichier Powerpoint, vous devez créer une macro de type auto_open, c'est son nom. Le fait de l'appeler ainsi joue un rôle important car à cette macro va être automatiquement lancé au chargement du fichier PowerPoint. Cela permet de ne pas avoir une interaction utilisateur via un bouton, mais dans mon fichier powerpoint que je joins à cet article, vous devriez aussi voir apparaître un bouton de lancement, car il est possible que j'ai à corriger le contenu de cette diapositive.
En effet, si je me rends compte une fois le fichier généré qu'une faute de frappe a été faite, il me suffit de recruter sur le bouton pour corriger le contenu. Ce n'est pas tout à fait une correction, c'est plutôt un écrasement du contenu texte de la diapositive

Le code

Sub Auto_open()
Dim oSld As Slide
Dim oShp As Shape

Set oSld = Application.ActivePresentation.Slides(1)
ActivePresentation.Slides(1).Shapes(2).TextFrame.TextRange = InputBox("Quel titre donner (en haut en gras) ?", "")

ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange = InputBox("Il fait quoi ce code,ce que tu présentes", "ce code permet de...")






Dim sImagePath As String
Dim sImageName As String
Dim oSlide As Slide '* Slide Object
'Dim lScaleWidth As Long '* Scale Width
'Dim lScaleHeight As Long '* Scale Height
On Error GoTo Err_ImageSave

sImagePath = "C:\Users\33651\Desktop\"
For Each oSlide In ActivePresentation.Slides
sImageName = ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange & ".jpg"
oSlide.Export sImagePath & sImageName, "JPG"
Next oSlide

Err_ImageSave:
If Err <> 0 Then
MsgBox Err.Description
End If

End Sub



Vous retrouverez ici tous mes articles explicatifs de mes concepts, mes résultats d'analyses techniques m'ayant permi d'aboutir à un fonctionnement de mes applicatifs très fonctionnel

Rapport sondage marche

Voici le rapport statistique du sondage (auquel vous pouvez toujours répondre) que j'ai lancé sur le sujet