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 :

Initialisation objet checkbox


Sujet :

VBA Word

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut Initialisation objet checkbox
    Bonjour,

    Je dispose de plusieurs dizaines de CheckBox ActiveX dans un document Word et je souhaite cocher certaines de ces cases depuis une procédure VBA executée depuis excel.

    Pour tester, les quelques lignes de codes exécutées dans un module Excel fonctionnent parfaitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For i = 1 To 5
       If tab_bruit(1, i) Then
          wordDoc.CB_Infr_rout.Value = True
          If i = 1 Then wordDoc.CB_Cat1.Value = True
          If i = 2 Then wordDoc.CB_Cat2.Value = True
          If i = 3 Then wordDoc.CB_Cat3.Value = True
          If i = 4 Then wordDoc.CB_Cat4.Value = True
          If i = 5 Then wordDoc.CB_Cat5.Value = True
       End If
    Next i
    Ayant pas mal d'éléments, je souhaiterais pouvoir initialiser un objet d'après le nom de la variable. Malgré pas mal de recherche je ne trouve pas de solution. Dans l'idéal, ça pourrait ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For i = 1 To 5
       If tab_bruit(1, i) Then
          wordDoc.CB_Infr_rout.Value = True
     
          Set chBx = checkbox("CB_Cat" & i) ' ???
          wordDoc.chBx.Value = True
     
       End If
    Next i
    En espérant avoir été clair, merci d'avance pour vos conseils.

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi,

    Il me semble que sous Word pour accéder à un contrôle AtiveX on ne peux pas faire autrement qu'en bouclant sur les InlineShapes.
    Je te propose une fonction qui permet de trouver un contrôle par son nom :
    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
    Function getControl(name As String) As OLEFormat
        Dim doc As Document
        Set doc = ActiveDocument
        Dim ish As InlineShape
     
        For Each ish In doc.InlineShapes
            If ish.Type = wdInlineShapeOLEControlObject Then
                If ish.OLEFormat.Object.name = name Then
                    Set getControl = ish.OLEFormat
                    Exit Function
                End If
            End If
        Next
        Set getControl = Nothing
    End Function
    Avec le retour de la fonction, par exemple pour cocher une checkbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        Dim obj As OLEFormat
     
        Set obj = getControl("CHK2")
        If Not obj Is Nothing Then
            obj.Object.Value = True
        End If
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut
    Bonjour cerede2000 et merci pour ta proposition !

    Ta fonction marche parfaitement dans Word.

    Lorsque j'essaye de l'adapter pour faire l’exécution depuis Excel par contre, une erreur se déclare...

    APPEL DE LA FONCTION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For i = 1 To 5
       If tab_bruit(1, i) Then
          wordDoc.CB_Infr_rout.Value = True
          Set obj = getControl("CB_cat" & i, wordDoc)
          If Not obj Is Nothing Then
             obj.Object.Value = True
          End If
       End If
    Next i
    FONCTION :
    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
     
    Function getControl(name As String, doc As Document) As OLEFormat
     
        Dim ish As InlineShape
     
        For Each ish In doc.InlineShapes
            If ish.Type = wdInlineShapeOLEControlObject Then
                If ish.OLEFormat.Object.name = name Then
                    Set getControl = ish.OLEFormat
                    Exit Function
                End If
            End If
        Next
     
        Set getControl = Nothing
     
    End Function
    "Erreur d’exécution 13 : incompatibilité de type" à la ligne 9...

    Auriez-vous une idée de la source potentielle de ce problème ?

    Merci d'avance !

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Nous sommes dans la section Word !
    Si tu cherche à faire ça sous Excel le code n'est pas le même et il faut aller dans la section Excel !

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut
    Je cherche à exécuter le code depuis Excel mais les objets concernés se trouvent dans Word... C'est la raison pour laquelle je tente ma chance dans cette section du forum

    EDIT : solution disponible sur le lien suivant : http://www.developpez.net/forums/d15...-activex-word/

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

Discussions similaires

  1. Initialisation html:checkbox
    Par lapin_hobbit dans le forum Struts 1
    Réponses: 16
    Dernier message: 23/06/2011, 14h29
  2. Initialiser objet dans un TableLayoutPanel
    Par guillaume40 dans le forum C#
    Réponses: 0
    Dernier message: 21/05/2011, 15h39
  3. Comment faire varier le nom d'un objet Checkbox
    Par ysibille dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2010, 20h38
  4. [ZedGraph] Initialiser objet
    Par afrodje dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/03/2008, 15h54
  5. Réponses: 4
    Dernier message: 29/07/2005, 11h47

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