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 :

Recupérer le nom des labels des userforms


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut Recupérer le nom des labels des userforms
    Bonjour à tous,

    Alors voilà, dans un fichier Excel qui est un questionnaire, sur la feuille 1, selon la cellule cliquée, j’affiche un userform qui aide à répondre aux questions (avec des checkbox, option bouton, des labels, ...)
    J’ai quelques userforms (environ 40, eh oui !)
    J’aimerais dans une seconde feuille (la feuil2) récupéré le nom complet de tout les labels de tout les userforms pour que dans l’avenir (plus ou moins proche) ce questionnaire soit bilingue, et donc en fonction d’une OptionButton1.Value, je puisse affecter une value français ou anglaise (relative à une colonne).

    Bon commençons par le début, récupéré les noms complets de tous les labels*:
    Alors voici le code est les explications des problèmes :

    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
    Public Sub recup_label()
    Dim feuille As String
    Dim LaForm As Object
     
    Sheets("Feuil2").Activate
     
        For Each LaForm In ThisWorkbook.VBProject.VBComponents
            If LaForm.Type = 3 Then 'Permet de récupérer les noms
                                    'des userforms du classeur actuel
                MsgBox LaForm.Name 'pour vérifier que les noms
                                    'de tous les userforms sont bien récupérés
            End If
     
            If LaForm.Type = 3 Then
            With A1_01 ' A1_01 est le nom d'un userform particulier et ca marche
            ' si je change A1_01 par la variable LaForm (par exemple)
            ' pour afficher dans la feuille 2 les noms de tout les labels (et plus
            ' uniquement les la bels du userform A1_01),
            ' le compteur ci-dessous ne fonctionne pas !
                For i = 0 To .Controls.Count - 1 ' là ca merde avec la variable LaForm
                ' mais ca fonction avec un userform clairement décrit
                    If Left(.Controls.Item(i).Name, 5) = "Label" Then
                        Cells(i, 1) = .Controls.Item(i).Name 'recup du nom
                        Cells(i, 2) = .Controls.Item(i).Caption 'recup du caption
                    End If
                Next i
            End With
            End If
     
        Next
     
    End Sub
    Là je bloque (et mes collègues aussi !). Pouvez-vous m’aider ? (en espérant avoir été assez clair)
    Par avance merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, 1) = .Controls.Item(i).Name
    Et si i=0 tu crois que ça donne quoi d'après toi?

    Sinon attention! LaForm est de type Variant avant d'être de type Formulaire: déclare explicitement une variable de type formulaire (comme CopieLaForm), et dès le début de ta boucle tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each LaForm In ThisWorkbook.VBProject.VBComponents
        Set CopieLaForm=LaForm
    Et tu ne travailles plus qu'avec CopieLaForm.

    J'ai déjà personnellement eu de gros dysfonctionnements simplement parce qu'une variable n'était pas strictement du type souhaité.

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut
    merci pour les pistes de travail.

    Je pense que la variable laform est mal déclarée. Elle n'est pas déclarée en tant que userform.
    De plus, sauf erreur de ma part, un userform à un nom mais n'a pas de codename.

    Je vais tester ta soluce dès demain (au travail).

    Pour i = 0 --> l'erreur est juste (lol) - bonne remarque

    Encore merci

    PS : j'aime bien ta phylosophie de donner des idées et non des solutions.

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir


    Tu peux utiliser :

    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
    Dim VBCmp As VBComponent
    Dim Ctrl As Control
     
    For Each VBCmp In ThisWorkbook.VBProject.VBComponents
        If VBCmp.Type = 3 Then
            Debug.Print VBCmp.Name
            For Each Ctrl In VBCmp.Designer.Controls
            If TypeName(Ctrl) = "Label" Then _
                Debug.Print Ctrl.Name & " / " & Ctrl.Caption
            Next Ctrl
     
            Debug.Print "-----"
        End If
     
    Next VBCmp

    bonne soirée
    michel

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut
    Bonjour Michel,

    Vbcomponent n'est pas un type de variable "connu"
    (Dim VBCmp As VBComponent)

    Je dois donc d'abord définir VBComponent dans une instruction Type...End Type dans une bibliothèque de types pour que ca fonctionne ?
    Là, je ne sais pas faire !!

    Merci pour l'interet porté sur mon sujet

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Non ce type existe bel et bien, c'est juste qu'il n'apparaît pas dans l'explorateur d'objets.
    Pourquoi, je sais pas, mais en tout cas c'est bien pénible pour pouvoir s'en servir.

    Tu n'as aucune référence à ajouter ou de variable à déclarer ni quoi que ce soit.

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour


    dans l'éditeur de macros :
    Menu Outils
    Références
    coche la ligne "Microsoft Visual Basic for Applications Extensibility 5.3 "
    Clique sur le bouton OK pour valider


    bon week end
    michel

  8. #8
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut
    Bon, ben voilà une solution qui fonctionne (pour qui a besoin) :

    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
    Public Sub recher_toto()
     
    Dim VBCmp As VBComponent
    Dim Ctrl As Control
    Dim i As Integer
    Dim colon As Integer
     
     
        If Worksheets("Questionnaire FNR").OptionButton1.Value = True Then
        colon = 5
        End If
        If Worksheets("Questionnaire FNR").OptionButton2.Value = True Then
        colon = 6
        End If
     
    i = 1
     
    For Each VBCmp In ThisWorkbook.VBProject.VBComponents
        If VBCmp.Type = 3 Then
            For Each Ctrl In VBCmp.Designer.Controls
                If VBCmp.HasOpenDesigner = True Then
                    If Left(Ctrl.Name, 5) = "Label" Or _
                    Left(Ctrl.Name, 8) = "CheckBox" Or _
                    Left(Ctrl.Name, 5) = "Frame" Or _
                    Left(Ctrl.Name, 12) = "OptionButton" Then
                    j = 1
    debut:
                        Sheets("Feuil1").Activate
                        If Cells(j, 2) = VBCmp.Name And Cells(j, 3) = Ctrl.Name Then
                        Ctrl.Caption = (Cells(j, colon))
                        Else: j = j + 1
                            If j < 500 Then
                            GoTo debut
                            Else:
                            MsgBox "Probleme"
                            Exit Sub
                            End If
                        End If
                    End If
                End If
            Next Ctrl
        End If
    Next VBCmp
    Worksheets("Questionnaire FNR").Activate
    End Sub

    Il reste à optimiser le code car avec 50 userforms et donc 440 labels, checkbox, options boutons, frame, ca rame terrible !!!

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/05/2015, 19h24
  2. aide pour les changement des labels des icones de mon menu
    Par Invité dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 15/08/2009, 01h45
  3. nom par défaut des étiquettes des contrôles
    Par s.rais dans le forum IHM
    Réponses: 3
    Dernier message: 03/12/2007, 23h55
  4. Réponses: 1
    Dernier message: 06/07/2007, 13h46
  5. Gestion des majuscules des miniscules des accent
    Par issam16 dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 14h21

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