IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA PowerPoint Discussion :

Suppression de SHAPE identifier sur chaque SLIDE


Sujet :

VBA PowerPoint

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Suppression de SHAPE identifier sur chaque SLIDE
    Salut à tous,
    j'ai réalisé une barre d'outils qui permet de créer une forme définie au préalable sur une diapo : un carré rouge nommé "V_xxx" dont xxx n'incrémente à chaque fois qu'on créé un nouveau carré.
    Je voudrais avoir un 2ème bouton qui permettrait de supprimer tout ces carré dans chaque slide de la présentation, j'ai éssayé ça mais ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub Supprimer_les_carrés()
    For Each Diapo In ActiveWindow.Presentation.Slides
        Diapo.Select
        For Each forme In ActiveWindow.Selection.SlideRange.Shapes
            If Mid(forme.Name, 1, 1) = "V" Then
                forme.Select
                forme.Delete
            End If
        Next forme
    Next Diapo
    End Sub
    Quelqu'un peut m'aider, merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Où et comment sont déclarés tes objets ?

    De plus le V est en majuscule dans les deux cas ?

    J'ai testé ton code sous PPT 2007 il fonctionne très bien à condition que le V soit en majuscule dans les deux cas.

    Philippe

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton aide mais je comprends pas ta question :
    - Où et comment sont déclarés tes objets ? tu parles de Diapo et forme, nulle part, la solution ?
    - De plus le V est en majuscule dans les deux cas ? je n'ai qu'un seul cas, ou vois-tu 2 cas ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Il faut absolument déclaré correctement les variables

    Dans ce truc de la FAQ : Comment renommer les objets d'un diaporama ? qui ressemble beaucoup à ton code (à part le delete), il y a une déclaration de variables.

    Pour les 2 cas, c'est que c'est moi qui ai testé avec des casses différentes.

    De plus quelle est ta version de PowerPoint ?

    Philippe
    Dernière modification par Invité ; 20/01/2009 à 17h17.

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Ok merci mais ça ne fonctionne toujours pas, voici le message d'erreur lorsque je passe à la 2ème diapo :

    Erreur d’exécution ‘-2147188160 (80048240)’ :

    Shape (unknow member) : Invalid request. To select a shape, its view must be active.

    Ma version : PPT 2000 SP3.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Je n'ai pas PowerPoint 2000, il se peut qu'il y ait des méthodes qui n'existent pas sous cette version, je ne travailles q'avec PPT 2002 et PPT 2007

    Deux choses :

    Peux-tu remettre le code complet avec la déclaration des variables.
    On est d'accord tu lances cela lorsque tu es en mode normal, et non quand le diaporama est lancé.
    Où as-tu trouvé le code ?

    Philippe

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    A la place des carrés rouge, je créé un objet "OK" par macro à l'aide d'un bouton dans la barre d'outils PPT en mode normal qui pointe sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub OK()
    Dim num As String
    num = Identifier_forme
    ActiveWindow.Selection.SlideRange.Shapes.AddTextEffect(msoTextEffect1, "OK le " & Date, "Arial Black", 30#, msoFalse, msoFalse, 309.75, 227.62).Select
    With ActiveWindow.Selection.ShapeRange
        .Fill.ForeColor.RGB = RGB(51, 204, 51)
        .Fill.Visible = msoTrue
        .Fill.Solid
        .Name = "V_" & num
        .Align msoAlignCenters, True
        .Align msoAlignMiddles, True
    End With
    End Sub

    avec la fonction associée :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function Identifier_forme() As String
    Dim forme As Shape
    Dim nom As String
    num = 1
    For Each forme In ActiveWindow.Selection.SlideRange.Shapes
        If Mid(forme.Name, 1, 1) = "V" Then
            If Mid(forme.Name, 3, 10) > num Then
                num = Mid(forme.Name, 3, 10) + 1
            End If
        End If
    Next forme
    Identifier_forme = num
    End Function
    Et enfin l'autre code pour supprimer les "OK" sur la présentation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Sub Supprimer_les_annotations()
    Dim Diapo As Slide
    Dim forme As Shape
    For Each Diapo In ActivePresentation.Slides
        Diapo.Select
        MsgBox Diapo.Name
        For Each forme In Diapo.Shapes
            forme.Select
            MsgBox forme.Name
            'If Mid(forme.Name, 1, 1) = "V" Then
                'forme.Delete
            'End If
        Next forme
    Next Diapo
    End Sub
    Le code est perso.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re

    Deux trucs rapide, je suis short en temps

    Tu déclares ta variable num dans ta première routine, et tu l'utilises dans ta deuxième aussi

    Je te conseille de déclarer une autre variable dans la fonction.

    J'ai fait la même chose sous PPT 2002

    J'ai juste changer la deuxième fonction avec une autre variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function Identifier_forme() As String
    Dim forme As Shape
    Dim nom As String
    Dim cpt As Integer
    cpt = 1
    For Each forme In ActiveWindow.Selection.SlideRange.Shapes
        If Mid(forme.Name, 1, 1) = "V" Then
            If Mid(forme.Name, 3, 10) > cpt Then
                cpt = Mid(forme.Name, 3, 10) + 1
            End If
        End If
    Next forme
    Identifier_forme = cpt
    End Function
    et la dernière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Sub Supprimer_les_annotations()
    Dim Diapo As Slide
    Dim forme As Shape
    For Each Diapo In ActivePresentation.Slides
        Diapo.Select
        MsgBox Diapo.Name
        For Each forme In Diapo.Shapes
            forme.Select
            MsgBox forme.Name
            If Mid(forme.Name, 1, 1) = "V" Then
                forme.Delete
            End If
        Next forme
    Next Diapo
    End Sub
    Je lance la première routine, c'est bon cela écrit OK et la date, et la dernière cela la supprime.

    On est bien d'accord, tu lances cela en mode normal, et non en diaporama.

    Philippe

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton aide Philipe, finalement j'ai relu le code et j'ai finis par en arriver là (voir ci-dessous). Seul "hic", lors de la suppression, la macro me laisse des shapes sur les diapo :

    slide n°1 : 3 shapes V_1, V_2, V_3
    slide n°2 : 4 shapes V_1, V_2, V_3, V_4
    slide n°3 : 10 shapes V_1, V_2, V_3, V_4, ... , V_10

    1ere éxecuation de la macro suppression, résultat :
    slide n°1 : 1 shape V_2
    slide n°2 : 2 shapes V_2, V_4
    slide n°3 : 4 shapes V_2, V_4, V_6, V_8, V_10

    2eme éxecuation de la macro suppression, résultat :
    slide n°1 : 0 shape
    slide n°2 : 1 shape V_4
    slide n°3 : 2 shapes V_4, V_8

    Bizard ?

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Public Function Identifier_forme() As String
    Dim forme As Shape
    Dim cpt As String
    cpt = 1
    For Each forme In ActiveWindow.Selection.SlideRange.Shapes
        If Mid(forme.Name, 1, 2) = "V_" Then
            If Mid(forme.Name, 3, 10) > cpt Then
                cpt = Val(Mid(forme.Name, 3, 10))
            End If
            cpt = cpt + 1
        End If
    Next forme
    Identifier_forme = cpt
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub OK()
    Dim num_ok As String
    num_ok = Identifier_forme
    ActiveWindow.Selection.SlideRange.Shapes.AddTextEffect(msoTextEffect1, "OK le " & Date, "Arial Black", 30#, msoFalse, msoFalse, 309.75, 227.62).Select
    With ActiveWindow.Selection.ShapeRange
        .Fill.ForeColor.RGB = RGB(51, 204, 51)
        .Fill.Visible = msoTrue
        .Fill.Solid
        .Name = "V_" & num_ok
        .Align msoAlignCenters, True
        .Align msoAlignMiddles, True
    End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub Supprimer_les_annotations()
    Dim Diapo As Slide
    Dim Forme_suppr As Shape
    For Each Diapo In ActivePresentation.Slides
        Diapo.Select
        For Each Forme_suppr In Diapo.Shapes
            If Mid(Forme_suppr.Name, 1, 2) = "V_" Then
                Forme_suppr.Delete
            End If
        Next Forme_suppr
    Next Diapo
    End Sub

  10. #10
    Invité
    Invité(e)
    Par défaut
    Re

    En effet, j'ai déjà noté ce phénomène, ce qu'il faut c'est modifier un peu ton code de suppression.

    Il faut avant déterminer le nombre de Shapes, et faire une boucle For en fonction du nombre de shape pour lancer la suppression.

    Philippe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression lignes et caractères sur chaque ligne
    Par YLKweb dans le forum VBScript
    Réponses: 59
    Dernier message: 07/07/2015, 09h02
  2. Suppression de la marge sur la première slide
    Par mattato dans le forum Beamer
    Réponses: 8
    Dernier message: 19/03/2014, 16h13
  3. [XL-2007] Copier / Supprimer shape sur chaque sheet, comportement étrange
    Par mattlovelara dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/03/2014, 12h07
  4. [VB6][ListView] Tri sur chaque colonne
    Par frlap dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 26/05/2004, 11h20
  5. n INDEXs sur chaque champ ou 1 seul INDEX sur n ch
    Par fourchette dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/04/2004, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo