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 :

Parcours des contrôles ActiveX d'un document Word [WD-2016]


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Parcours des contrôles ActiveX d'un document Word
    Bonjour,

    Je cherche à parcourir l'ensemble des contrôles ActiveX que j'ai inséré dans un simple document Word, pour afficher leur nom en cliquant sur un bouton ActiveX.
    Pour le moment, j'ai simplement un bouton se nommant "CommandButton1" et deux TextBox se nommant "Titre1" et "SousTitre".
    Ils ont été inséré directement dans un document Word 2016.
    Mon document Word se nomme "TEST.docm" et le code VBA se trouve dans Project(TEST) -> Microsoft Word Objets -> ThisDocument


    Pour se faire, j'ai essayé cette première méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
        Dim mesctl As InlineShape
        For Each mesctl In ActiveDocument.InlineShapes
            MsgBox mesctl.OLEFormat.Object.Name
        Next mesctl
    End Sub
    Ici, je n'obtiens l'affichage que d'un seul MsgBox qui m'affiche "CommandButton1" mais pas les deux autres noms de mes ActiveX de type TextBox


    Deuxième méthode utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
        Dim Ctrl As OLEObject
        For Each Ctrl In Me.OLEObjects
            MsgBox Ctrl.Name
        Next Ctrl
    End Sub
    Ici j'obtiens une erreur de compilation "Type défini par l'utilisateur non défini" et qui me surligne "Ctrl As OLEObject"


    Troisième méthode utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
        Dim ctl As Control
        For Each ctl In Me.Controls
            If TypeName(ctl) = "TextBox" Then
                MsgBox ctl.Name
            End If
        Next ctl
    End Sub
    Puis ici j'obtiens l'erreur de compilation "Membre de méthode ou de données introuvable" et qui me surligne ".Controls"


    Merci par avance pour votre aide, car j'ai beau chercher du coté de l'insertion de référence de library, je ne trouve pas la solution (ou pas la bonne?) .

  2. #2
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Bonjour carlitolemito, le forum,

    Normalement, ce code devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub CommandButton1_Click()
    Dim curField As Field
     
        For Each curField In ThisDocument.Fields
            Debug.Print curField.OLEFormat.Object.Name
        Next curField
     
    End Sub
    A+

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Bonjour mromain
    Merci pour ton retour.

    Avec ce code j'obtiens le message d'erreur suivant "Variable objet ou variable de bloc With non définie" et lorsque je place un espion sur "curField.OLEFormat" sa valeur est Nothing.

    Petites précisions :
    1. A essayer de trouver la bonne library à ajouter, j'en ai maintenant plein dans mon projet. Je ne sais pas si cela peu avoir un impact en créant des conflits ?
    2. Les variables ThisDocument, ThisDocument.Fields, et curField sont bien définies quant à elles

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Re-bonjour,

    Peut-être en rajoutant ce contrôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub CommandButton1_Click()
    Dim curField As Field
     
        For Each curField In ThisDocument.Fields
            If curField.Type = wdFieldOCX Then
                Debug.Print curField.OLEFormat.Object.Name
            End If
        Next curField
     
    End Sub
    A+

  5. #5
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Re,

    Avec ce code, je n'ai plus d'erreur d’exécution.
    Par contre, le seul contrôle ActiveX renvoyé correspond au bouton que j'ai dans mon document Word.
    En gros, j'obtiens le même comportement qu'avec le premier bout de cote noté dans mon premier post, celui parcourant la collection InlineShapes.

    Voici le document à toutes fins utiles :
    http://www.partage-fichiers.com/upload/cl5djsq7

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Re,

    Voici un code qui a l'air de fonctionner sur ton doc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim curShape As Shape
        For Each curShape In ThisDocument.Shapes
            If curShape.Type = msoOLEControlObject Then
                MsgBox curShape.OLEFormat.Object.Name
            End If
        Next curShape
    A+

  7. #7
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Re,

    Je confirme mromain, merci beaucoup !!!



    Une explication pour mourir moins bête ?

  8. #8
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Bonjour carlitolemito,

    Apparemment, les contrôles ActiveX peuvent se trouver soit dans la collection Document.Fields, soit dans la collection Document.Shapes.
    Cela semble venir de l’habillage de la forme.
    Clic droit sur le champ > Format de contrôle... > onglet Habillage

    Si l’habillage de la forme est alignée sur le texte, elle apparait dans la collection Document.Fields, sinon, dans la collection Document.Shapes.

    A+

  9. #9
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour mromain,

    merci pour ces précisions !

    Bonne fin de journée

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

Discussions similaires

  1. [POI] Générer des images à partir d'un document Word
    Par adil_vpb dans le forum Documents
    Réponses: 0
    Dernier message: 22/03/2010, 01h20
  2. [XL-2003] Macro pour utiliser des données Excel dans un document Word
    Par Jeremy0269 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/07/2009, 18h58
  3. Recherche des mots spécifiques dans le document Word
    Par quangdao dans le forum VBA Word
    Réponses: 8
    Dernier message: 04/12/2008, 16h00
  4. Réinitialiser les n° de versions des contrôles activex
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/08/2007, 16h10
  5. Réponses: 1
    Dernier message: 21/02/2006, 17h13

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