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

Macros et VBA Excel Discussion :

trouver le msocontroltype d'un control en ayant son ID [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut trouver le msocontroltype d'un control en ayant son ID
    rebonjours a tous

    dans la ligné de mon projet (utilisant des control existant d'une autre barre)
    je cherche a connaitre le msocontroltype)d'un control dont j'ai le id

    du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub typeMSO()
    Set ctrl = Application.CommandBars.FindControl(ID:=1645)
    msgbox  ctrl.MsoControlType
    end sub
    typename donne commandbarcontrolbutton mais je ne sais pas comment récupérer le type du genre "msoControlPopup" ou "msoControlbutton" etc.....

    une idée??? de comment récupérer ce type
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour Patrick,

    Une piste en énumérant les CommandBarControl
    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
    42
    43
    44
    45
    46
    47
    48
    49
    Sub TypeMSO()
    Dim Ctrl As CommandBarControl
    Dim cpt&
    Dim h&
    Dim i&
    Dim T()
    Dim S As Worksheet
    Dim R As Range
    Dim MsoTypes As Variant
    Dim MsoNames As Variant
    Dim Titres As Variant
    '---
    MsoTypes = Array(22, 26, 1, 5, 12, 4, 0, 3, 2, 16, 19, 8, 20, _
          9, 11, 18, 15, 24, 7, 21, 10, 23, 14, 13, 6, 17, 25)
    MsoNames = Array("msoControlActiveX", "msoControlAutoCompleteCombo", "msoControlButton", "msoControlButtonDropdown", _
          "msoControlButtonPopup", "msoControlComboBox", "msoControlCustom", "msoControlDropdown", "msoControlEdit", _
          "msoControlExpandingGrid", "msoControlGauge", "msoControlGenericDropdown", "msoControlGraphicCombo", _
          "msoControlGraphicDropdown", "msoControlGraphicPopup", "msoControlGrid", "msoControlLabel", "msoControlLabelEx", _
          "msoControlOCXDropdown", "msoControlPane", "msoControlPopup", "msoControlSpinner", "msoControlSplitButtonMRUPopup", _
          "msoControlSplitButtonPopup", "msoControlSplitDropdown", "msoControlSplitExpandingGrid", "msoControlWorkPane")
    Titres = Array("ID", "Name", "Description", "Type", "MsoControlType")
    '--- Des propriétés CommandBarControl ---
    For i& = 1 To 3000
      Set Ctrl = Application.CommandBars.FindControl(ID:=i&)
      If Not Ctrl Is Nothing Then
        cpt& = cpt& + 1
        ReDim Preserve T(1 To 5, 1 To cpt&)
        T(1, cpt&) = Ctrl.ID
        T(2, cpt&) = Ctrl.accName
        T(3, cpt&) = Ctrl.accDescription
        T(4, cpt&) = Ctrl.Type
        For h& = LBound(MsoTypes) To UBound(MsoTypes)
          If Ctrl.Type = MsoTypes(h&) Then
             T(5, cpt&) = MsoNames(h&)
            Exit For
          End If
        Next h&
      End If
    Next i&
    '--- Inscription des résultats dans une nouvelle feuille ---
    Sheets.Add after:=Sheets(Sheets.Count)
    Set S = ActiveSheet
    Set R = S.Range(S.Cells(2, 1), S.Cells(UBound(T, 2) + 1, UBound(T, 1)))
    R = Application.WorksheetFunction.Transpose(T)
    '--- Titres des colonnes ---
    Set R = S.Range("a1:e1")
    R = Titres
    R.Font.Bold = True
    End Sub
    PS
    Chez moi et sous Excel 2007 le CommandBarControl ayant l'ID 1645 est introuvable.

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Je crois qu'il va pas l'aimer ta solution

    Elle demeure cependant la "moins pire" au vu de la quantité astronomique de propositions

    Patrick veut pouvoir récupérer le msocontroltype sans passer par des transco, j'ai essayé pendant 1h mais sans succès (ça m'étonne pas )

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour à tous,

    ou bien (j'ai copié la liste de PMO) :
    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
    Dim dictMsoTypes
    Sub init()
        Dim MsoTypes, MsoNames, i As Long
        MsoTypes = Array(22, 26, 1, 5, 12, 4, 0, 3, 2, 16, 19, 8, 20, _
                         9, 11, 18, 15, 24, 7, 21, 10, 23, 14, 13, 6, 17, 25)
        MsoNames = Array("msoControlActiveX", "msoControlAutoCompleteCombo", "msoControlButton", "msoControlButtonDropdown", _
                         "msoControlButtonPopup", "msoControlComboBox", "msoControlCustom", "msoControlDropdown", "msoControlEdit", _
                         "msoControlExpandingGrid", "msoControlGauge", "msoControlGenericDropdown", "msoControlGraphicCombo", _
                         "msoControlGraphicDropdown", "msoControlGraphicPopup", "msoControlGrid", "msoControlLabel", "msoControlLabelEx", _
                         "msoControlOCXDropdown", "msoControlPane", "msoControlPopup", "msoControlSpinner", "msoControlSplitButtonMRUPopup", _
                         "msoControlSplitButtonPopup", "msoControlSplitDropdown", "msoControlSplitExpandingGrid", "msoControlWorkPane")
        Set dictMsoTypes = CreateObject("Scripting.Dictionary")
        For i = 0 To UBound(MsoTypes)
            dictMsoTypes(MsoTypes(i)) = MsoNames(i)
        Next i
    End Sub
     
    Sub test()
        Dim Ctrl
        init
        Set Ctrl = Application.CommandBars.FindControl(ID:=1)
        MsgBox dictMsoTypes(Ctrl.Type)
    End Sub
    eric

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour a tous les 3
    Pmo,eriic,joe

    ok encore une fois on passe par des moulinette

    mais ca fait rien je garde

    je suis en train de me faire un outils pour justement récupérer les caracteristuque des controls

    afin de pouvoir m'en servir quand je me sert d'un control existant dans une de mes commandbars

    mais depuis hiers j'avais reussi a trouver les controls que je cherchais

    votre solution va s'introduire dans mon outils de liste de controls dispo

    merci a tous les 3

    et si ca me plait quand meme car la ca n'est pas pour une application c'est juste un outils qui me servira quand je chercherais un control en particulier
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Re,

    Une piste qui pourrait t'intéresser :
    http://access.developpez.com/faq/?pa...s#ConstantName
    Reste plus qu'à trouver dans quel fichier se trouve cette énumération maintenant.

    eric

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2010, 00h15
  2. Comment Trouver un tableau comme avec Control->Find
    Par TrollTop dans le forum C++/CLI
    Réponses: 11
    Dernier message: 25/03/2009, 14h31
  3. Trouver les DependencyProperty d'un control
    Par ChrisDeStras dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 03/03/2009, 13h22
  4. Réponses: 5
    Dernier message: 23/01/2007, 18h11
  5. Controller CheckBoxes ayant le même nom.
    Par JFKen dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/08/2006, 10h19

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