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 :

Extraire tous les Name contenus dans tous les UserFom présents dans une Macro VBA afin de les renommer


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Août 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 9
    Par défaut Extraire tous les Name contenus dans tous les UserFom présents dans une Macro VBA afin de les renommer
    Bonjour,
    Je suis devant un problème qui dépasse mes maigres connaissances.

    But:
    Je cherche à extraire tous les « name » associé aux divers CommandButton, Label, ComboBox... ou « control » de tous les Userform contenu ou present dans une Macro afin de les renommer par la suite de façon approprié.

    Question:
    Pourriez-vous m'orienter dans ma démarche.

    Info:
    J'ai déjà extrait la liste de tout les éléments contenus de la Macro, ex. Objets, Feuil UserForm, Modul....

    Environnement:
    J'utilise Excel office 2013.Microsoft Visual Basic pour Applications version 7.1

    Merci, par avance pour vos conseils avisés.
    Respectueusement JLK2015

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Ceci devrait le faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     
    Dim US As Object
    Dim CR As Object
     
    For Each US In UserForms
       Debug.Print "UserForm : "; US.Name; " = "; US.Controls.Count; " controls"
       For Each CR In US.Controls
          Debug.Print "  > "; CR.Name
       Next CR
    Next US
     
    End Sub

  3. #3
    Membre habitué
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Août 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 9
    Par défaut
    Merci, beaucoup pour la réactivité.
    Etant novice, je suis un peut perdu et quelque chose m'échappe,
    je lance la macro test() fourni ci-dessus, la macro s'execute mais rien ne se passe, du moins je ne vois rien.
    1. Dois-je faire une association à des variables de ma Macro qui contient les UserForm ?
    2. Dois-je faire l'activation d'une référence dans le menu Outil ? (Fonction suplémentaire)
    3. ...


    Beaucoup de questions, du fait que je ne suis pas expert et j'en suis navré.
    Je vous remercie par avance de m'envoyer des explications sur le context d'utilisation et de lancement de cette petite macro.


    Info:
    J'ai déactivé par ' la fonction Debug.Print du fait que je ne sais pas utiliser le résultat.
    J'ai essayer de déclarer les varibles en temps que type Controls, cela ne donne pas plus de résultat.
    La macro d'éssai contient 2 UserForm "Toto" et "Tata" comprenant chacune 2 zones de texte de type Label soit 4 variables à extraire.
    Les références activées dans Option sont dans l'ordre d'apparition:
    • Visual Basic For Application
    • Microsoft Excel 15.0 Object Library
    • OLE Automation
    • Microsoft Office 15.0 Object Library
    • Microsoft Visual Basice for Application Extensibility 5.3
    • Microsoft Forms 2.0 Object Library

    C'est tout.

    Cordialement JLK2015

    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
    Sub test()
    Dim US As Object 'j'ai essayé Dim US As Controls ne fonctionne pas
    Dim CR As Object 'j'ai essayé Dim CR As Controls ne fonctionne pas
    Dim NumDerniereVariableExt
     
    For Each US In UserForms
       'Debug.Print "UserForm : "; US.Name; " = "; US.Controls.Count; " controls"
       NumDerniereVariableExt = Sheets("RapportVariablesExtraites").Range("A200000").End(xlUp).Row 'liste des variables extraite
       Sheets("RapportVariablesExtraites").Range("A" & NumDerniereVariableExt + 1) = "UserForm " & US.Name
       NumDerniereVariableExt = Sheets("RapportVariablesExtraites").Range("B200000").End(xlUp).Row 'liste des variables extraite
       Sheets("RapportVariablesExtraites").Range("B" & NumDerniereVariableExt + 1) = " = " & US.Controls.Count
     
       For Each CR In US.Controls
          'Debug.Print "  > "; CR.Name
          NumDerniereVariableExt = Sheets("RapportVariablesExtraites").Range("C200000").End(xlUp).Row 'liste des variables extraite
          Sheets("RapportVariablesExtraites").Range("C" & NumDerniereVariableExt + 1) = " > " & CR.Name
       Next CR
    Next US
     
    End Sub

  4. #4
    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 heu
    je reprend le code de menhir mais dans un msgbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim US As Object
    Dim CR As Object
    For Each US In UserForms
       texte = texte & UCase(US.Name) & " > " & US.Controls.Count & " controls" & vbCrLf
       For Each CR In US.Controls
          texte = texte & CR.Name & vbCrLf
       Next CR
    texte = texte & "///////////////////////////////////////////////" & vbCrLf
    Next US
    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

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    La collection UserForms ne stock que les composants dit Chargé.
    Lorsque l'on décharge un UserForm avec UnLoad par exemple, il disparait de la collection.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par JLK2015 Voir le message
    je lance la macro test() fourni ci-dessus, la macro s'execute mais rien ne se passe, du moins je ne vois rien.
    Affiche la fenêtre d'exécution : Ctrl+G

    J'ai essayer de déclarer les varibles en temps que type Controls, cela ne donne pas plus de résultat.
    Essaye plutôt le type Object.
    A ma connaissance, le type de variable Controls n'existe pas (surtout au pluriel)

    Dim US As Object 'j'ai essayé Dim US As Controls ne fonctionne pas
    US n'est pas un contrôle mais un UserForme

    Tu es sûr qu'il y a autant de lignes dans ton Excel ?
    Il serait plus propre d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A" & Rows.Count)

  7. #7
    Membre habitué
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Août 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 9
    Par défaut
    Bonjour, et merci pour vos différents commentaires que j'appréci.

    Malheureusement, je n’ai pas encore réussi à extraire les différents labels contenus dans les différents UserForms.

    Compte tenu du facteur temps et que je me concentre sur d'autres aspect de mon application, je passe par du copier-coller de lignes de script.
    Exemple ci-dessous. Cela fait mon affaire pour l’instant.
    Peut-être auriez-vous la réponse à la question suivante, qui peut m’éviter les copier-coller fastidieux dans un futur proche.

    Question:
    Comment puis-je « indexer » dans la ligne de code suivante le term en gras pour qu'il fasse référence au texte contenu dans une cellule d'une feuille quelconque ?
    For Each Ctrl In MonUserFormTata.Controls
    Faut-il Utiliser un certain Type de variable ?

    Info:
    Lorsque j'utilise une indexation, je me retrouve avec le message "Erreur d'execution '424': Objet requis"
    Pour la petite question, concernant Range("A200000"), c'est une méthode "Amateur" qui me sert à localiser la dernière cellule ayant un contenu dans la colonne A exemple ci-dessous.

    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
    Sub RetourInfoFormum()
     
        For Each Ctrl In MonUserFormTata.Controls
        Sheets("RapportVariablesExtraites").Range("A1") = "Ctrl.Name de la UserForm Tata" 'Titre de la colonne A
        NumDerniereVariableExt = Sheets("RapportVariablesExtraites").Range("A200000").End(xlUp).Row 'liste des variables extraite
        Sheets("RapportVariablesExtraites").Range("A" & NumDerniereVariableExt + 1) = Ctrl.Name
        Next Ctrl
     
        For Each Ctrl In MonUserFormToto.Controls
        Sheets("RapportVariablesExtraites").Range("B1") = "Ctrl.Name de la UserForm Toto" 'Titre de la colonne B
        NumDerniereVariableExt = Sheets("RapportVariablesExtraites").Range("B200000").End(xlUp).Row 'liste des variables extraite
        Sheets("RapportVariablesExtraites").Range("B" & NumDerniereVariableExt + 1) = Ctrl.Name
        Next Ctrl
     
        '..........ect ect....
     
    End Sub
    Merci par avance pour toutes infos qui pouraient me permettre de progresser sur cette partie de mon application.

    Cordialement JLK2015

  8. #8
    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
    c'est toujour le meme probleme l'acces sans load de l'usf
    j'ai bien essayer avec vbcomponent mais la non plus ca ne fonctionne pas

    mais cependant si tu veux d'apres ce que je comprends tu veux utiliser la meme sub pour tout les usf (indexation) je dirais plutot argument moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub test
    RetourInfoFormum  userform1
    end sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub test2
    RetourInfoFormum Userform2
    end sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function RetourInfoFormum(MonUserFormTata as object)
     
         For Each Ctrl In MonUserFormTata.Controls
         Sheets("RapportVariablesExtraites").cells(rows.count,1).end(xlup).offset(1,0)= "Ctrl.Name de la UserForm " & MonUserFormTata.name 'Titre de la colonne A
         NumDerniereVariableExt = Sheets("RapportVariablesExtraites").Range("A200000").End(xlUp).Row 'liste des variables extraite
         Sheets("RapportVariablesExtraites").cells(rows.count,1).end(xlup).offset(1,1) = Ctrl.Name
         Next Ctrl
     
     end function
    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

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/10/2014, 14h38
  2. Réponses: 1
    Dernier message: 25/09/2013, 10h00
  3. Réponses: 0
    Dernier message: 24/05/2013, 17h22
  4. [XL-2003] Comment rendre une macro VBA accessible à tous les fichiers .xls
    Par Toto_le_héros38 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/01/2011, 21h23
  5. Réponses: 1
    Dernier message: 07/01/2006, 23h33

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