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 Word Discussion :

Récupérer Texte InlineShapes


Sujet :

VBA Word

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Récupérer Texte InlineShapes
    Bonjour,

    je souhaiterai récupérer le texte situé à l'intérieur d'un objet InlineShapes et que j'affiche dans une fenêtre avec le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim stri As String
    stri = ActiveDocument.InlineShapes(1).OLEFormat.Object
    MsgBox stri
    Ça commence sans doute par ActiveDocument.InlineShapes(1)....

    Merci d'avance pour votre aide.

    Cordialement,

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    L'objet provient d'un formulaire que j'ai copié à partuir d'une page HTML.

    Je dois peut-être convertir le InLineShape? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub convert()
    ActiveDocument.InlineShapes(1).ConvertToShape.OLEFormat.Activate
    End Sub
    Fic04.docx

    Comment puis-je récupérer ensuite le texte qu'y a à l'intérieur?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim stri As String
    stri = ActiveDocument.InlineShapes(1).OLEFormat.Object
    MsgBox stri
    Bonjour,

    La réponse, c'est stri.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Merci beaucoup. Je souhaitai remplacer l'objet InLineShape par son contenu, j'ai grâce à vous trouvé le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub replaceInlineShapeByText()
    Dim stri As String
    stri = ActiveDocument.InlineShapes(1).OLEFormat.Object
    ActiveDocument.InlineShapes(1).Select
    ActiveDocument.InlineShapes(1).Delete
    Selection.TypeText Text:=stri
    End Sub

    Lorsque on a plusieurs InLineShapes et qu'on veut tous les remplacer, il faut commencer par la fin :


    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
    16
    17
    18
    19
    Sub replaceAllInlineShapesOfDocumentByText()
     
    Dim i As Integer
    Dim stri As String
     
        With ActiveDocument
             If .InlineShapes.Count > 0 Then
                For i = .InlineShapes.Count To 1 Step -1
                    With .InlineShapes(i).OLEFormat
                        stri = ActiveDocument.InlineShapes(i).OLEFormat.Object
                        ActiveDocument.InlineShapes(i).Select
                        ActiveDocument.InlineShapes(i).Delete
                        Selection.TypeText Text:=": " & stri   
                    End With
                Next i
            End If
        End With
     
    End Sub

    Y'a quand même un problème qui subsiste. Lorsque je copie le formulaire de la page HTML dans Word, j'importe des InLineShapes qui ne sont pas visibles mais que je peux faire apparaitre en cliquant sur Developpeur puis sur mode Création. Je souhaiterai supprimer ces InLineShapes invisibles avant d'exécuter la macro pour pas que le texte qu'ils contiennent vienne s'inscruster dans la page.
    Sauriez-vous comment il faut faire svp?





    Nom : Pict.png
Affichages : 504
Taille : 96,7 Ko

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Bonjour,

    Je n'ai pas trouvé de propriété Visible sur ce genre d'objet. Mettez en ligne un document avec des objets visibles et invisibles pour voir comment on peut les distinguer.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    J'aurai du le joindre à la fin de mon message, veuillez m'excuser.

    Voici donc le fichier en question :

    monFic00.docx

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    A tester :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Option Explicit
     
    Sub IdentifierLesShapesDUnDocument()
     
    Dim DocEnCours As Document
    Dim I As Integer, NbSuppressions As Integer
     
        On Error GoTo Fin
     
        Set DocEnCours = ActiveDocument
        NbSuppressions = SupprimerLesInlineShapesInvisibles(DocEnCours)
        With DocEnCours
             For I = .InlineShapes.Count To 1 Step -1
                 MsgBox .InlineShapes(I).OLEFormat.Object
            Next I
        End With
        MsgBox "Nombre d'InlineShapes invisibles supprimées : " & NbSuppressions, vbInformation
     
        GoTo Fin
     
    Fin:
        Set DocEnCours = Nothing
     
    End Sub
     
    Function SupprimerLesInlineShapesInvisibles(ByVal DocEnCours2 As Document) As Integer
     
    Dim J As Integer
     
        SupprimerLesInlineShapesInvisibles = 0
        With DocEnCours2
             For J = .InlineShapes.Count To 1 Step -1
                 If InStr(1, .InlineShapes(J).OLEFormat.ClassType, "Hidden", vbTextCompare) > 0 Then
                    .InlineShapes(J).Delete
                    SupprimerLesInlineShapesInvisibles = SupprimerLesInlineShapesInvisibles + 1
                 End If
            Next J
        End With
     
    End Function

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Ça fonctionne uniquement si on exécute la macro avec le fichier en mode création. Sinon, une fenêtre s'affiche disant que les InLineShapes ont été supprimés mais c'est faux : si on clique sur le mode création, les InLineShapes réapparaissent.

    DEM1.docx

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ça fonctionne uniquement si on exécute la macro avec le fichier en mode création
    Non.

    Sinon, une fenêtre s'affiche disant que les InLineShapes ont été supprimés mais c'est faux : si on clique sur le mode création, les InLineShapes réapparaissent.
    Non, les InlineShapes cachés ont tous disparus. Il reste bien sûr les InlineShapes de type Text.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Chez moi, si je me mets pas en mode création, les InlineShapes ne sont pas supprimés. Je suis sur Word 2010 Enterprise.

    Si j'essaye de passer en mode Création au début de la macro avec ActiveDocument.ToggleFormsDesign, la macro s'arrête après avoir enclenché le mode Création.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Chez moi, si je me mets pas en mode création, les InlineShapes ne sont pas supprimés. Je suis sur Word 2010 Enterprise.
    De quels InlineShapes s'agit-il ?

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Les InlineShapes invisibles.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Les InlineShapes invisibles.
    Insérez un Debug.Print et activez la fenêtre exécution pour savoir ce que vous récupérez comme ClassType

    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
    16
    17
    18
     
     
    Function SupprimerLesInlineShapesInvisibles(ByVal DocEnCours2 As Document) As Integer
     
    Dim J As Integer
     
        SupprimerLesInlineShapesInvisibles = 0
        With DocEnCours2
             For J = .InlineShapes.Count To 1 Step -1
                 Debug.Print .InlineShapes(J).OLEFormat.ClassType
                 If InStr(1, .InlineShapes(J).OLEFormat.ClassType, "Hidden", vbTextCompare) > 0 Then
                    .InlineShapes(J).Delete
                    SupprimerLesInlineShapesInvisibles = SupprimerLesInlineShapesInvisibles + 1
                 End If
            Next J
        End With
     
    End Function

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Voici ce qu'il apparait dans la fenêtre d’exécution :

    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Text.1
    Forms.HTML:Hidden.1
    Forms.HTML:Text.1
    Forms.HTML:Hidden.1
    Forms.HTML:Text.1
    Forms.HTML:Hidden.1
    Forms.HTML:Hidden.1

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Voici ce qu'il apparait dans la fenêtre d’exécution :
    Et quand vous le refaites une deuxième fois ?

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Ça donne la même chose.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Ça donne la même chose.
    Vous pourriez mettre en ligne le code que vous utilisez ?

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Le voici :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Option Explicit
     
    Sub IdentifierLesShapesDUnDocument()
     
    Dim DocEnCours As Document
    Dim I As Integer, NbSuppressions As Integer
     
        On Error GoTo Fin
     
        Set DocEnCours = ActiveDocument
        NbSuppressions = SupprimerLesInlineShapesInvisibles(DocEnCours)
        With DocEnCours
             For I = .InlineShapes.Count To 1 Step -1
                 MsgBox .InlineShapes(I).OLEFormat.Object
            Next I
        End With
        MsgBox "Nombre d'InlineShapes invisibles supprimées : " & NbSuppressions, vbInformation
     
        GoTo Fin
     
    Fin:
        Set DocEnCours = Nothing
     
    End Sub
     
    Function SupprimerLesInlineShapesInvisibles(ByVal DocEnCours2 As Document) As Integer
     
    Dim J As Integer
     
        SupprimerLesInlineShapesInvisibles = 0
        With DocEnCours2
             For J = .InlineShapes.Count To 1 Step -1
                 Debug.Print .InlineShapes(J).OLEFormat.ClassType
                 If InStr(1, .InlineShapes(J).OLEFormat.ClassType, "Hidden", vbTextCompare) > 0 Then
                    .InlineShapes(J).Delete
                    SupprimerLesInlineShapesInvisibles = SupprimerLesInlineShapesInvisibles + 1
                 End If
            Next J
        End With
     
    End Function

  19. #19
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    OK. Ce code est bien sûr dans un .docm et vous l'appliquez sur le fichier actif dans la fenêtre Word.
    Le code montre toutefois qu'il est capable de discerner les deux types. Au lieu de supprimer les objets cachés, il vous suffirait de récupérer la valeur de ceux visibles à l'aide d'une matrice ou directement en changeant la nature de la fonction pour la rendre String et ajouter les contenus des objets visibles dans celle-ci.

  20. #20
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Avec le code suivant, la msgBox n'apparait que pour afficher le contenu des InLineShapes qui sont cachés :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Option Explicit
     
    Sub IdentifierLesShapesDUnDocument()
     
    Dim DocEnCours As Document
    Dim I As Integer, NbSuppressions As Integer
     
        On Error GoTo Fin
     
        Set DocEnCours = ActiveDocument
       ' NbSuppressions = SupprimerLesInlineShapesInvisibles(DocEnCours)
        With DocEnCours
             For I = .InlineShapes.Count To 1 Step -1
     
                 If InStr(1, .InlineShapes(I).OLEFormat.ClassType, "Hidden", vbTextCompare) > 0 Then
                 MsgBox .InlineShapes(I).OLEFormat.Object
                    ActiveDocument.InlineShapes(I).Delete
                 End If
     
            Next I
        End With
     
        GoTo Fin
     
    Fin:
        Set DocEnCours = Nothing
     
    End Sub
    Il n'y a plus qu'à les supprimer, y'a pas besoin d'ajouter une fonction supplémentaire. Mais le ActiveDocument.InlineShapes(I).Delete ne fonctionne pas.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PDE] Récupérer texte mis en surbrillance dans un éditeur
    Par simsky dans le forum Eclipse Platform
    Réponses: 20
    Dernier message: 10/07/2007, 12h03
  2. [DOM] [Débutant] Récupérer texte entre deux balises
    Par webrider dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/02/2007, 09h49
  3. Récupérer texte d'une TComboBox
    Par andreditdd dans le forum Delphi
    Réponses: 3
    Dernier message: 24/01/2007, 21h47
  4. [PDF] Récupérer texte pdf avec php
    Par nicerico dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/01/2007, 09h35
  5. Récupérer texte dans des variables
    Par Coussati dans le forum Langage
    Réponses: 8
    Dernier message: 12/11/2005, 18h26

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