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 :

Parcours des userforms et contrôles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut Parcours des userforms et contrôles
    Bonjour à tous,

    Je suis entrain de développer une application vba pour une entreprise et j'ai besoin de votre aide.

    Je dois effectuer des actions en fonction du userform et de la listbox contenu dessus , il faut donc parcourir mes userform et les contrôles qui s'y trouvent , mon code ressemble à ceci :


    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
    Function parcours(nomUserform As Variant, nomListbox As Variant)
        Dim ctrl As Control
        Dim usef As VBComponent
     
            For Each usef In ThisWorkbook.VBProject.VBComponents
                'S'il s'agit d'un UserForm
                If usef.Type = 3 Then
                    If usef.Name = nomUserform Then
                        For Each ctrl In usef.Controls <== ERREUR
                         If ctrl.Name = nomListbox Then
                            ACTION
                         End If
                        Next ctrl
                    End If
                End If
            Next usef
     
     End Function
    Le problème est que .control n'est pas une procédure de VBComponent et je ne connais pas un autre moyen de parcourir les userforms , j'ai bien essayé avec ma propre collection , mais il faut la parcourir avec une variable de type object , dont .control n'est pas une procédure non plus. J'ai essayé pas mal de code qui ne fonctionnent pas, je suis complétement bloqué.

    Si quelqu'un a une idée je suis volontier preneur.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Tu as la solution là --> http://excel.developpez.com/faq/?pag...oucleObjUsfVBE


  3. #3
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Une adaptation sans la référence " Microsoft Visual Basic for Applications Extensibility 5.3. "

    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
    Sub liste_Des_Objets()
     
    'Retourne tous les objets de tous les userforms
     
    Dim Ctl As Control
    Dim Usr As Object
     
    For Each Usr In ThisWorkbook.VBProject.VBComponents
     
        If Usr.Type = 3 Then
     
            For Each Ctl In Usr.designer.Controls
     
                MsgBox Ctl.Name
     
            Next Ctl
     
        End If
     
    Next Usr
     
    End Sub

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut
    Bonjour à vous deux et merci pour vos réponses !

    Ce code génére chez moi une erreur (pour les deux solutions , avec et sans référence) : "Erreur d'exécution '91' : Variable objet ou variable de bloc With non définie".
    L'erreur se situe au niveau de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Ctrl In VBCmp.Designer.Controls
    Vous avez une idée d'où est ce que cela peut provenir ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut
    Bonjour à tous,

    Personne n'a une idée ? Je suis vraiment perdu , j'ai essayé de trouver tout seul sans succés, mon Designer pour VBComp est à Nothing mais je ne saurai dire pourquoi

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,

    Quel est le but ?
    Parcourir les userforms et les controls ne me semble pas appropriés.
    Quand on est dans un userform, on sait ou on est!

    Cordialement.

    ctac

  7. #7
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par Alucard26 Voir le message
    Vous avez une idée d'où est ce que cela peut provenir ?
    Non pas d'idée comme ça, fais un copier / coller de ton code complet

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut
    Bonjour à tous,

    Je vais vous expliquez mon projet avec un peu plus de détails , ça risque d'être un peu long mais au moins ça sera claire !

    Donc je dois développer une appli avec plusieurs userform , mon responsable veut absolument que cela soit fais avec une seule classe pour tous les userforms , je dispose donc d'une classe ClaUserForm qui initialise mes userforms en parcourant les contrôle qui se trouvent dessus(textbox et listbox et bouton pour la plupart) et en exécutant la requête sql qui se trouve dans le tag du contrôle en question. Le probleme est que certaines de mes requêtes sont paramétrés , le paramétre en question est généralement la selection dans une listbox or comme ma classe est générique je ne dois pas avoir une listbox en dur , je veux donc la chercher selon son nom et le nom du userform où elle se trouve en parcourant tout mes contrôles. Avec un morceau de code cela sera peut être plus claire !

    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
     
    Dim Cmd As ADODB.Command
            Dim Parametre As ADODB.Parameter
            ' Create Command Object.
            Set Cmd = New ADODB.Command
            Cmd.ActiveConnection = Cn
    'execution de la requête contenu dans le tag du controle (que j'ai récupéré dans X(1)
            Cmd.CommandText = X(1)
            ' Create Parameter Object.
            Set Parametre = Cmd.CreateParameter(, adInteger, adParamInput, 5)
    'La requête est paramétré , je dois donc attribuer le paramétre qui ne peut se trouver dans le tag
            Parametre.Value = (List.ListBox1.List(List.ListBox1.ListIndex)) ' je souhaite remplacer cette ligne pour que mon bouton fonctionne pour n'importe quelle listbox
            Cmd.Parameters.Append Parametre
            Set Parametre = Nothing
            Set Rs = Cmd.Execute()
            Call pause
            Ctrl = parcours(X(2), X(3))
            maliste.InitList List.ListBox1 ' idem pour cette ligne
    Voilà j'espere avoir été assez claire !

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

Discussions similaires

  1. [XL-2010] vba excel - Mettre en variable un groupe de contrôle et des userforms correspondants
    Par tmihob dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 18/05/2015, 16h43
  2. Réponses: 8
    Dernier message: 01/11/2005, 22h48
  3. Réponses: 9
    Dernier message: 07/10/2005, 16h47
  4. Modification à la chaine des noms de contrôle
    Par dde78 dans le forum Access
    Réponses: 3
    Dernier message: 29/09/2005, 16h24
  5. Empêcher le parcours des répertoires
    Par Tankian dans le forum Sécurité
    Réponses: 5
    Dernier message: 04/03/2005, 15h10

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