2
votes

Identification et modification du type de puce dans PowerPoint à l'aide de VBA

J'essaye de comprendre comment identifier le type de balle et le changer, i. e. Vérifiez si les puces utilisées dans toute la présentation sont des puces de forme carrée. Sinon, une macro devrait changer le type de puce en carré.

Exemple: Dans cette image, je voudrais changer les puces de forme ronde en puces de forme carrée dans tout le jeu de diapositives.

Bullet conversion


0 commentaires

3 Réponses :


0
votes

Ils ne facilitent pas les choses. Vous devez remplacer la propriété BulletFormat.Character par le numéro Unicode de la forme souhaitée. Voici ce que j'ai fait: j'ai une présentation où la deuxième diapositive est le titre et le contenu (deux formes). Dans la section Contenu, j'ai quatre puces. J'ai changé la première de la forme qu'elle est à la forme que je veux et j'exécute ceci:

 111          Reality    
 9642         Consistency
 9642         No Shortcuts
 9642         The Right Tool

Cela parcourt les quatre puces (para) dans la deuxième forme de la deuxième diapositive et imprime sur la fenêtre immédiate le caractère de la puce suivi d'un peu de texte (pour être sûr que j'étais là où je pense que j'étais). Cela a produit:

Public Sub ChangeBullets()

    Dim para As TextRange

    For Each para In ActivePresentation.Slides(2).Shapes(2).TextFrame.TextRange.Paragraphs
        Debug.Print para.ParagraphFormat.Bullet.Character, Left(para.Text, 20)
    Next para

    ActivePresentation.Slides(2).Shapes(2).TextFrame.TextRange.Paragraphs(1).ParagraphFormat.Bullet.Character = 9642

End Sub

Cela me dit que la puce était 9642 (la même que ses frères) et je l'ai changée manuellement en 111. Maintenant que je connais le numéro Unicode, Je pourrais parcourir chaque diapositive, chaque forme, chaque paragraphe et changer le numéro de puce.

Dans la dernière ligne, je change la puce en 9642 juste pour m'assurer que je peux (et cela a fonctionné).


0 commentaires

0
votes

Vous pouvez jouer avec ceci pour voir les paramètres de vos puces.

J'ai ajouté quelques exemples pour expliquer comment définir la police, le caractère, la couleur, etc.

Private Sub UnderstandAndChangeBullets()
    Dim i As Integer

    ' loop through paragraphs of a shape:
    With Application.ActivePresentation.Slides(5).Shapes(1).TextFrame
        For i = 1 To .TextRange.Paragraphs.Count
            With .TextRange.Paragraphs(i).ParagraphFormat.Bullet
                If .Type = ppBulletUnnumbered Then
                    Debug.Print "Size: " & .RelativeSize,    ' 1, 1.25, ...
                    Debug.Print "Color: " & .Font.Color.RGB, ' 0, RGB(255, 0, 0), vbRed, ...
                    Debug.Print "Font: " & .Font.Name,       ' Arial, Wingdings, Symbol, ...
                    Debug.Print "Character: " & .Character   ' 8226, 111, 167, 118, ...
                End If
            End With
        Next i
    End With

    ' ... or work with selected text:
    With Application.ActiveWindow.Selection
        If .Type = ppSelectionText Then
            For i = 1 To .TextRange.Paragraphs.Count
                ' ... like above
            Next i
        End If
    End With
End Sub

p >


0 commentaires

1
votes

Les 2 autres réponses sont adéquates si les puces ont été créées en utilisant uniquement un formatage local. Si la présentation est normale, où les puces sont placées dans le masque des diapositives, ces puces rondes continueront de revenir comme une mauvaise odeur. Au lieu de cela, changez les puces en carré sur le masque des diapositives, puis réinitialisez toutes les diapositives pour forcer une mise à jour. Cela définit les niveaux 1, 3 et 5 sur des puces carrées:

Sub ChangeSomeBullets()
  Dim oSlide As Slide
  Dim oShape As Shape

  For Each oShape In ActivePresentation.Designs(1).SlideMaster.Shapes
    If oShape.Type = msoPlaceholder Then
      If oShape.PlaceholderFormat.Type = ppPlaceholderBody Then
        For X = 1 To oShape.TextFrame2.TextRange.Paragraphs.Count
          Select Case X
            Case 1, 3, 5
              With oShape.TextFrame2.TextRange.Paragraphs(X).ParagraphFormat.Bullet
                .Font.Name = "Wingdings"
                .Character = 167
              End With
          End Select
        Next X
      End If
    End If
  Next oShape
  For Each oSlide In ActivePresentation.Slides
    oSlide.CustomLayout = oSlide.CustomLayout
  Next oSlide
End Sub


2 commentaires

Penser au masque des diapositives est une bonne idée (+1 pour cela), mais réinitialiser chaque puce et réaffecter chaque CustomLayout peut-être pas.


oSlide.CustomLayout = oSlide.CustomLayout ne réaffecte pas les mises en page. C'est l'équivalent VBA de cliquer sur le bouton Réinitialiser dans l'interface utilisateur. Après avoir apporté des modifications à un masque, vous devez normalement réinitialiser les diapositives pour mettre à jour la diapositive avec la nouvelle mise en forme.