Accès paramétrable à un contrôle de UserForm

  • Initiateur de la discussion marabbeh
  • Date de début
M

marabbeh

Guest
Bonjour,

Le titre n'est pas clair, car difficile à exprimer en quelques mots.

Je voudrais savoir s'il est possible d'accéder à un contrôle de UserForm (TextBox, ListBox, etc.) en utilisant la collection Controls et un nom, p.ex Controls.Name = "nom_du_controle", plutôt que nom_du_controle.Name. Ca me permettrait de réaliser des Sub paramétrables de vérification .

D'après l'aide de VBA ce serait plutôt qqch dans le genre Set Control = UserForm1.Controls.Item("nom_du_controle"). Mais les aides de Microsoft (quelque soit le logiciel) sont souvent peu claires et quasiment inutilisables, d'où l'importance de ce forum...

Si vous pouviez m'indiquer un bon site au sujet des UserForm (en français, anglais ou allemand)...

A+
 
M

marabbeh

Guest
Merci Jon. J'ai réussi à faire marcher ton code.

Reste maintenant à faire une fonction qui puisse contrôler si telle série de contrôles ont été remplis. Les contrôles à vérifier dépendent des cas, c'est pourquoi j'ai besoin de ce genre de code.
Je vais créer un tableau des noms de contrôles à contrôler (ces noms varient d'un cas à l'autre), puis une boucle sur les valeurs de ce tableau, cette boucle utilisant ton code. On va voir si ça marche. Il n'y a pas de raisons que ça marche... non je rigole ! (c'est ma plaisanterie habituelle avec les clients, ceux qui ont de l'humour le prennent bien, et ma foi les autres...)

A+
 
@

@+Thierry

Guest
Bonjour Marabbeh, STéphane et le Forum...

Pas sûr d'avaoir capté ce que tu veux faire mais une méthode simple, consiste à récupérer une collection de contrôles grace à MSform...

Par exemple ce code remettrait à vide toutes les textbox contenue dans un userform
Private Sub CommandButton1_Click()
Dim CTRL As Control
Dim Nom As String
For Each CTRL In Controls
If TypeOf CTRL Is MSForms.TextBox Then
CTRL = ""
End If
Next CTRL
End Sub


Maintenant, grace à Ti on peut aussi utiliser la propriété Tag... et ceci sans distinction du contrôle (pour autant que celui-ci accepte l'instruction que l'on veut appliquer...

Private Sub CommandButton2_Click()
Dim CTRL As Control
Dim Nom As String
For Each CTRL In Controls
If CTRL.Tag = "CategorieA" Then
CTRL = ""
End If
Next CTRL
End Sub

Il suffit de définir le Tag par la fenêtre propriété du Contrôle....

Un bel exemple de ce qu'on peut faire avec les Tag dans ce fil :

==> Lien supprimé (lol) !!!


Bon Samedi
@+Thierry (en espérant pas être hors sujet !!!)
 
M

marabbeh

Guest
Ah ben c'est exactement ça qu'il me faut (les tags).

Je suis toujours dans ma paye, qui n'avance pas vite. Et dans mon userform qui permet de générer la liste des salariés, il me faut contrôler si les infos minimales ont été remplies, et ce contrôle varie selon qu'ils sont payés au mois ou à l'heure. Donc 3 tags concernant 3 catégories de contrôle : "commun", "mensuel", "horaire". Les contrôles sans tag ne seront pas contrôlés.


Par contre, j'ai un gros pb avec les tableaux (array) en VBA. Comment remplir simplement un tableau ? J'ai essayé Tab = Array("valeur1", "valeur2"...), mais j'ai une erreur. Idem pour Tab = ("valeur1", "valeur2"...). Tab a été déclaré Dim Tab As String. Je vois bien qu'il n'existe pas de type de donnée Array en VBA (une lacune importante). Vivement que je retourne au PHP lundi, où c'est beaucoup plus évident...
 

Statistiques des forums

Discussions
312 691
Messages
2 091 009
Membres
104 725
dernier inscrit
Marvin Foucart