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 :

Vérification de l'ensemble des contrôles d'un userform aléatoire [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Vérification de l'ensemble des contrôles d'un userform aléatoire
    Bonjour,
    alors ça fait un petit moment que je planche sur ce problème. En fait, j'ai un certains nombre d'userform dans lesquels les utilisateurs rentrent des infos soit dans des textbox ou des listbox, le tout ayant des noms variables.
    J'aimerais donc pouvoir vérifier que tout les contrôles d'un userform sont remplis avant de passer au suivant et si un n'est pas rempli, l'indiquer à l'utilisateur
    Donc je suis parti sur la fonction suivante que j'appelle en cliquant sur le bouton pour passer au userform suivant. Sur le bouton, j'ai un test de retour. Si la fonction renvoie 1, j'empêche de passer à la page suivante sinon ça passe.

    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 Vérif_UserForm(UF As String) As Integer
    '##### Routine vérifiant que chaque control d'un UserForm est rempli #####
    Dim Ctrl As Control
    Dim NomUF As String
    NomUF = UF
    Vérif_UserForm = 0
     
    For Each Ctrl In VBA.UserForms.Add(NomUF).Controls
        If VBA.UserForms.Add(NomUF).Controls(Ctrl.Name).Value = "" Then
            MsgBox ("Onglet " & VBA.UserForms.Add(NomUF).Controls(Ctrl.Name).Name & " non renseigné.")
            Vérif_UserForm = 1
        End If
    Next Ctrl
     
    End Function
    Le problème : je n'arrive pas à obtenir la valeur des contrôles. La commande trouve le UserForm, trouve chaque contrôle, je peux avoir toutes les propriétés de chacun d'entre eux mais si je rentre une valeur et que je lance le test après, cela me restitue une valeur vide "". En gros il me restitue les propriétés de base du contrôle, la valeur étant vide à la base, il me la donne donc vide quand je l'appelle...
    J'ai essayé VBA.UserForms(NomUF).Controls(Ctrl.Name).Value à la place mais ça ne marche pas mieux.
    Donc comment obtenir la valeur d'un contrôle aléatoire dans un userform aléatoire?
    Merci de votre attention.

    EDIT : en pièce joint un mini excel. Le but étant d'arriver à entrer une valeur dans le TextBox et que le clique sur le bouton ne déclenche pas le message "L'ongle TextBox est non renseigné".
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Ce lien explique comment traiter le type de control dans un boucle avec l'instruction TypeOf

    http://silkyroad.developpez.com/VBA/...ables/#LVIII-C
    Jérôme

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Salut jfontaine,
    et merci pour l'aide. J'ai donc essayé ça :

    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
    '##### Routine vérifiant que chaque control d'un User_Form est rempli #####
    Function Vérif_UserForm(UF As String) As Integer
    Dim Ctrl As Control
    Dim NomUF As String
    NomUF = UF
    Vérif_UserForm = 0
     
    For Each Ctrl In VBA.UserForms.Add(NomUF).Controls
        If TypeOf Ctrl Is MSForms.TextBox Then
            If Ctrl.Value = "" Then
            MsgBox ("Onglet " & VBA.UserForms.Add(NomUF).Controls(Ctrl.Name).Name & " non renseigné.")
            Vérif_UserForm = 1
            End If
        End If
        If TypeOf Ctrl Is MSForms.ComboBox Then
            If Ctrl.Value = "" Then
            MsgBox ("Onglet " & VBA.UserForms.Add(NomUF).Controls(Ctrl.Name).Name & " non renseigné.")
            Vérif_UserForm = 1
            End If
        End If
    Next Ctrl
    End Function
    J'obtient le même résultat, la valeur du control est toujours vide alors qu'il est remplis sur l'userform.
    Le problème vient vraiment que le nom de l'userform et le nom du control sont variable car si je fais un vieux UserForm.TextBox.Value (avec les vrais noms du textbox et du userform bien sur), j'obtient ma valeur. Alors qu'avec un nom variable pour l'userform et le control, j'obtient n'importe quelle propriété du control (donc son type est bien reconnu) mais je n'obtient pas la valeur saisie sur l'userform.

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Ctrl.Value = "" Then
    par
    L'object prend toutes les propriétés du type de contrôle retourné (Meme si pas proposé dans l'intellisense
    Jérôme

  5. #5
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    Je travaille moi même sur un sujet similaire en ce moment, si j'ai bien compris, au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Ctrl In VBA.UserForms.Add(NomUF).Controls
    essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Ctrl In ThisWorkbook.VBProject.VBComponents(NomUf).Designer.Controls
    Edit: et tu auras ici le nom du controle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeName(Ctrl) 'Le nom du controle !!!

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Si joint un code qui renvoi le texte de chaque texteBox du userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim Ob As Control
     
    For Each Ob In Me.Controls
     
        If TypeOf Ob Is MSForms.TextBox Then
     
            MsgBox Ob.Text
     
        End If
     
    Next
    Jérôme

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    La même chose, j'avais déjà essayé. Text est aussi une propriété de base qui est donc naturellement vide... Tout ce que tu me dis marche mais c'est pas la valeur qui m'intéresse.
    En pièce jointe un bout d'excel si tu veux tester vite fait. Si t'arrives à remplir le textbox sans que le message "L'onglet textbox non renseigné", c'est que t'as réussis à choper la valeur...

    EDIT : ton exemple jfontaine marche parceque ton userform est définie. Essaie de mettre un userform variable et ça passera plus. Et pour aalex, la nouvelle commande ne change rien pour moi vu qu'il repère bien les controls, je peux afficher leur nom, modifier le style d'écriture...mais j'arrive pas à obtenir la valeur remplie depuis le userform.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    bonjour,

    Je viens de regarder ton fichier test et avec le code de jfontaine j'ai trouvé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Bouton_Click()
    Call Vérif_UserFormII(Me)
    ' Call Vérif_UserForm("Boite")
    End Sub
    et dans le module standard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Vérif_UserFormII(ByVal usf As UserForm)
     Dim Ob As Control
     
    For Each Ob In usf.Controls
     
        If TypeOf Ob Is MSForms.TextBox Then
     
            MsgBox Ob.Text
     
        End If
     
    Next
    End Sub

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Je vous aime
    Merci les gens, ça m'a bien dépanné, me voyait mal coller les lignes dans chaque userform, dans le genre pas opti, pas terrible.

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

Discussions similaires

  1. Bouger des contrôles sur un userform
    Par fxleo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/06/2013, 16h51
  2. [XL-2003] Dupliquer dynamiquement des contrôles dans un userform
    Par thilamb dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/08/2012, 17h02
  3. [XL-2003] Remplacer les noms et les sources des contrôles d'un userform
    Par MarcelG dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/02/2010, 17h55
  4. [JTree] Ouvrir/Fermer l'ensemble des noeuds
    Par Math_Caen dans le forum Composants
    Réponses: 3
    Dernier message: 07/04/2003, 14h01

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