Copier les textes d'une diapositive powerpoint sauf les espaces réservés

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 049 fois - Téléchargée 18 fois


Contenu du snippet

Ne vous est-il pas arriver de vouloir copier/coller les textes d'une diapositive PowerPoint ?
En général, on fait copier puis on colle, toute la diapositive est collée à destination. Mais si on ne veut que les textes, il faut recopier à la main ou copier/coller le texte de chacune des formes une par une.
S'il y en a peu c'est faisable mais quand il y en a beaucoup c'est fastidieux et on risque d'en oublier.
Cette macro copie dans le presse papier tous les textes contenus dans les formes de la diapositive courante sauf les formes réservées (le titre, le texte...).
Elle utilise une fonction récursive pour parcourir les formes groupées.

Mode d'emploi :
Ajouter le source ci-dessous aux macros de Powerpoint : copier le source ici, faire "outil/macro/visual basic editor" (ou alt-F11) insérez un module et coller
Pour exécuter la macro, faire outil/macro choisir "CopierLeContenueDesFormes" puis cliquez "exécuter"

Trucs et astuces :
Il est possible d'inclure les formes réservées en remplaçant dans la macro 'FormeCourante.Type <> msoPlaceholder' par 'true'.
Le séparateur entre les textes est " - " il peut facilement être modifié en changeant dans la macro la constante 'SeparateurTextes'
Pour conserver de la cohérence dans les textes copiés, vous pouvez grouper les formes, ils seront collés proches les uns des autres.

Source / Exemple :


Option Explicit
Const SeparateurTextes = " - "
'Permet de copier le textes de toutes les formes de diapositive courante excepté les formes réservées (titre...)
Sub CopierLeContenueDesFormes()
'
' Macro créé le 22/02/2010 par Guy Marty
'
Dim FormeCourante As Shape 'Forme en cours de traitement
Dim ToutLeTexte As String 'Tout le texte en cours d'assemblage
Dim TexteCourant As String 'Texte de la forme courante
'L'utilisation du presse papier nécessite la référence Microsoft Form 2.0 (C:\WINDOWS\system32\fm20.dll)
Dim PressePapier As New DataObject 'Un objet presse papier, le code est plus simple à lire avec ça

ToutLeTexte = ""

'On travaille que sur une seule diapositive
If ActiveWindow.Selection.SlideRange.Count <> 1 Then Exit Sub

'Parcours de toutes les formes de la diapositive
For Each FormeCourante In ActiveWindow.Selection.SlideRange.Shapes
    If FormeCourante.Type <> msoPlaceholder Then 'La forme n'est pas une forme réservée
        TexteCourant = TexteDeLaForme(FormeCourante) 'Texte de la forme courante
        If TexteCourant <> "" Then 'Il n'est pas vide on peut l'ajouter aux autres textes
            If ToutLeTexte = "" Then
                ToutLeTexte = TexteCourant  'C'est le premier texte, il n'y a pas de séparateur
            Else
                ToutLeTexte = ToutLeTexte & SeparateurTextes & TexteCourant 'Le texte courant est ajouté avec un séparateur
            End If
        End If
    End If
Next

'Copie dans le presse papier
With PressePapier
    .SetText ToutLeTexte
    .PutInClipboard
End With

MsgBox "Texte copié : " & ToutLeTexte

End Sub

'Fonction récursive permettant d'assembler le texte de la forme passée en paramètre
Function TexteDeLaForme(Forme As Shape) As String
Dim FormeCourante As Shape
Dim ToutLeTexte As String
Dim TexteCourant

ToutLeTexte = ""
If Forme.Type <> msoGroup Then 'La forme n'est pas un groupe
    If Forme.HasTextFrame Then 'La forme contient une fenêtre de texte
        If Forme.TextFrame.HasText Then 'Il y a effectivement du texte
            TexteDeLaForme = Forme.TextFrame.TextRange
        End If
    End If
Else 'La forme est un groupe, on récupère le texte de chaque forme du groupe
    For Each FormeCourante In Forme.GroupItems
        TexteCourant = TexteDeLaForme(FormeCourante)
        If TexteCourant <> "" Then
            If ToutLeTexte = "" Then
                ToutLeTexte = TexteCourant
            Else
                ToutLeTexte = ToutLeTexte & SeparateurTextes & TexteCourant
            End If
        End If
    Next
    TexteDeLaForme = ToutLeTexte
End If
End Function

Conclusion :


Testé avec powerpoint mais après adaptation pourrait fonctionner avec d'autres programmes d'office dont word (en passant une collection shapes en paramètre).

Autre améliorations possibles :
- Faire choisir le séparateur par l'utilisateur
- Faire choisir d'inclure ou non les espaces réservés.

A voir également

Ajouter un commentaire

Commentaires

dedederidiny
Messages postés
43
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
15 mai 2011
-
bonjour,
je connais tres peu powerpoint,
peux tu svp donner un mode operatoire,
ce code vba est a implanter où, dans word, excel ou powerpoint
merci d'avance
GMY
Messages postés
6
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
24 juin 2013
-
Bonjour,

Complément au mode d'emploi, pour conserver de la cohérence entre les textes copiés, vous pouvez grouper les formes entre elles.

GM

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.