La diffusion de présentations Powerpoint passe généralement par une conversion en un fichier PDF pour les rendre inaltérables.
Afin de conserver les liens hypertexte fonctionnels (ce qu’une simple impression au format PDF ne permet pas), il faut exporter la présentation en passant par le menu Fichier, Exporter puis Créer un document PDF/XPS. Cette exportation gagne à être automatisée si elle doit être réalisée régulièrement ou porte sur des plages de vignettes (ou slides) importantes ou disjointes.
Le langage VBA comporte tous les outils nécessaires à cette automatisation. La sélection des vignettes est réalisée à l’aide de la commande .Slides.Range et l’exportation au format PDF avec la commande .ExportAsFixedFormat.
Le code VBA ci-après réalise cette tâche à merveille.
A noter, la ligne Tableau_String = Split(Transforme_Plage(“1-27;29-45;100;105-111; 114-116;118-119;206;300-325; 330;342-346;352-355;359-360;368”), “,”) permet d’indiquer le numéro des vignettes à exporter.
'Macro export Powerpoint vers fichier PDF avec conservation des liens hypertexte 'B. RIVIERE, 03/2021 Option Explicit Sub Export_PDF() 'Export d'une sélection de vignettes Powerpoint en PDF avec conservation des liens hypertexte 'Définition des variables '---La variable tableau Tableau_String stocke la sélection de vignettes à exporter au format chaîne de caractères (String) Dim Tableau_String() As String '---La variable tableau Tableau_Integer stocke la sélection de vignettes à exporter sous forme de nombres entiers (Integer) Dim Tableau_Integer() As Integer '---Utilisée pour la boucle compteur (For... To) Dim i As Integer 'Définition de la sélection des vignettes à exporter en PDF '---La fonction Split convertit la chaîne de caractères contenant la sélection de vignettes en une variable tableau de type chaîne de caractères Tableau_String = Split(Transforme_Plage("1-27;29-45;100;105-111;114-116;118-119;206;300-325;330;342-346;352-355;359-360;368"), ",") '---Redimensionne la variable tableau Tableau_Integer en fonction de la taille de Tableau_String ReDim Tableau_Integer(UBound(Tableau_String)) '---Boucle de conversion des données String en Integer For i = LBound(Tableau_String) To UBound(Tableau_String) Tableau_Integer(i) = CInt(Tableau_String(i)) Next i 'Sélection des vignettes (slides) à exporter ' Plus d'infos : https://docs.microsoft.com/fr-fr/office/vba/api/powerpoint.presentation.exportasfixedformat ' Plage définie manuellement (vignettes 1 et 2) : ActivePresentation.Slides.Range(Array(1, 2)).Select ActivePresentation.Slides.Range(Tableau_Integer()).Select 'Exportation des vignettes sélectionnées vers un fichier PDF ActivePresentation.ExportAsFixedFormat Path:="C:\Users\COLDIR01\Desktop\DOSSIERS BR\EXPORT POWERPOINT.pdf", _ FixedFormatType:=ppFixedFormatTypePDF, _ Intent:=ppFixedFormatIntentPrint, _ OutputType:=ppPrintOutputSlides, _ RangeType:=ppPrintSelection End Sub Function Transforme_Plage(Plage As String) 'Cette fonction transforme une plage au format "1-3;7" en une liste de vignettes (Array) "1,2,3,7" Dim Plage_A_Traiter As String 'Plage restant à traiter Dim Plage_En_Cours As String 'Plage en cours de traitement Dim Retour As String 'Plage convertie retournée par la fonction Dim i As Integer Dim Pos As Integer Plage_A_Traiter = Plage Retour = "" Do 'Recherche le séparateur de plages ; If InStr(1, Plage_A_Traiter, ";") = 0 Then 'En absence de séparateur de plage Plage_En_Cours = Plage_A_Traiter Plage_A_Traiter = "" Else: 'En présence de séparateur de plages Plage_En_Cours = Left(Plage_A_Traiter, InStr(1, Plage_A_Traiter, ";") - 1) Plage_A_Traiter = Right(Plage_A_Traiter, Len(Plage_A_Traiter) - InStr(1, Plage_A_Traiter, ";")) End If 'Position du séprateur d'extrémité de plage Pos = InStr(1, Plage_En_Cours, "-") If Len(Retour) > 0 Then Retour = Retour & "," Select Case Pos Case 0: Retour = Retour & Plage_En_Cours Case Else For i = Val(Left(Plage_En_Cours, Pos - 1)) To Val(Right(Plage_En_Cours, Len(Plage_En_Cours) - Pos)) If i > Val(Left(Plage_En_Cours, Pos - 1)) And Len(Retour) > 0 Then Retour = Retour & "," Retour = Retour & Trim(Str(i)) Next i End Select Loop While InStr(1, Plage_A_Traiter, ";") > 0 'Exécuter la boucle tant qu'un séparateur de plages est présent Transforme_Plage = Retour End Function
___
Pour aller plus loin : manipulation de chaînes de caractères / fonction Split et variables tableau / programmer en VBA
Derniers articles parBenoît RIVIERE (voir tous)
- Nouveautés de l’interpréteur de formules de calcul (v1.1) - dimanche 3 novembre 2024
- Dématérialisation de la facturation : nouvelles mentions obligatoires - lundi 28 octobre 2024
- Interpréteur de formules de calcul en Python - dimanche 13 octobre 2024
- Les données de la facturation électronique - mercredi 9 octobre 2024
- VBA/SQL vs Power Query : deux solutions complémentaires - mercredi 2 octobre 2024