Contrôle de textbox [Résolu]

Signaler
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008
-
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008
-
Bonjour à tous,

je vous explique mon problème. J'ai une form avec plusieurs textboxs (une vingtaine environ) dont certains sont en Visible = false puisqu'ils n'apparaitront que dans certaines conditions. Ce que je cherche à faire quand je clique sur le bouton qui me valide tout ça, c'est vérifier que tous les textboxs sont bien remplis.
J'ai trouvé une fonction sur le net qui soit disant fait ça :

Dim txt As Control
Dim ctrl_txtbox As Boolean
For Each txt In Me.Controls
If TypeOf txt Is TextBox Then 'si c'est une TextBox
If txt.Text = "" Then
ctrl_txtbox = False
Else
ctrl_txtbox = True
End If
End If
Next

J'ai essayé de l'adapter à ma sauve pour obtenir le résultat escompté mais cette fonction ne fait le traitement que pour la dernière txtbox de mon form.

Est ce quelqu'un pourrait éventuellement me venir en aide?

Merci d'avance

18 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
salut,

d'après ton code c'est une variable qui reprend le résultat...
mais la variable est écrasée à chaque passage, il faut bien quitter un moment...

et autant en faire une fonction et de toute façon ne vérifier que les zones visibles (comment l'utilisateur pourrait remplir les autres? ^^)

Private Function ValidTB() As Boolean
    ValidTB = True                      'init
retour
    
    Dim oCtrl As Control
    For Each oCtrl In Me.Controls       'tous les
contrôles
        If TypeOf oCtrl Is TextBox Then 'contrôle est une TextBox
            If oCtrl.Visible Then       'contrôle est
visible
                If LenB(oCtrl.Text) = 0 Then
                    ValidTB = False
                    Exit For            'vide, on
retourne faux et on quitte
                End If
            End If
        End If
    Next oCtrl
    Set oCtrl = Nothing
End Function

tu n'as plus qu'à agir selon le retour de la fonction
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008

Merci beaucoup ca fonctionne parfaitement. En plus cette fonction risque de me resservir assez souvent.
Par contre, tant que j'y suis, j'ai expliqué que je voulais contrôler mes textbox vide visible (ce qui est fait) mais ce que je n'ai pas dis, c'est que mes textbox se trouvent sur un SSTab avec 3 onglets; chacun contenant des textbox. Pour être plus simple chaque onglet est un formulaire, et il faut que je fasse le contrôle seulement pour les textbox d'un onglet.
Auriez vous une réponse à mon probleme?

Encore merci pour votre aide.
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
fais un groupe de textbox par onglet
comme ça tu auras dans l'onglet 1 le textbox1(0) , textbox1(n ),
dans l'onglet 2 le textbox2(0) , textbox2(n )
etc
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
teste simplement le .container
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008

Le container prend en compte mes trois onglets, j'avais déjà pensé à l'utiliser. Je pense que la seule solution est celle de pile_poil : un groupe de textbox par onglet.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
oCtrl.Container.Tab te retourne l'index de l'onglet actif. à toi de le tester dans la boucle

cependant je suis POUR le groupe de contrôles, c'est juste pour dire que c'est faisable...

ps : "réponse acceptée" sert à valider la ou les réponses qui solutionnent ton problème, tu n'as pas besoin de tout accepter, surtout si tu attends une correction ;)
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008

Merci de l'info :-)! Je pensais que ca servait à valider les réponses pour les afficher dans le forum. Je le saurais à l'avenir!
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008

Bon je vois bien cette propriété Tab et j'ai bien compris que sa valeur changait en fonction de mon onglet. Le problème est que j'ai retourner ça dans divers sens et que je n'arrive pas à un résultat concluant.

As tu déjà réussi à utiliser cette propriété?
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

si je ne me trompe pas la proprieté

oCtrl.Container.Tab doit te retourner un long.

La valeur retournée est de 0 a n, autrement dit si tu as 3 onglets oCtrl.Container.Tab te retournera
0 pour le premier
1 pour le second
2 pour le troisieme
etc

A+
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
** 1 2 3 en fait, pour un retour integer (logiquement, pas vérifié) mais l'idée est là ;)
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008

Rebonjour tout le monde,

Tout d'abord merci aux gens qui m'ont filer un coup de main. Avant que vous me preniez pour une nouille :-), je tiens à dire que j'ai essayé d'utiliser cette méthode Tab ; donc je ne sais pas si je l'utilise mal ou si je n'ai pas la logique mais je n'arrive pas à obtenir le résultat escompté.
Je sollicite donc une dernière fois votre aide ( sur ce problème).
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
Private Function 
AreTBCompleted(
ByVal 
iIndexTab
As Integer
)
As Boolean


'   iIndexTab est l'indice du TAB à vérifié. il doit évidemment
exister!!

    AreTBCompleted = True 'init
retour
    
    Dim oCtrl As Control
    For Each oCtrl In Me.Controls 'tous les
contrôles
    
        If TypeOf oCtrl Is TextBox Then 'contrôle est une TextBox
        
            If oCtrl.Container.Name = "NOM_DU_SSTAB_A_MODIFIER" Then 'nom du
sstab
            
                If oCtrl.Container.tab = iIndexTab
Then 'on est sur l'onglet
désiré
                
                    If oCtrl.Visible Then 'contrôle est
visible
                    
                        If LenB(oCtrl.Text) = 0 Then 'vide, on retourne faux et on
quitte
                            AreTBCompleted
= False
                            Exit For
                        End If
                        
                    End If
                    
                End If
                
            End If
            
        End If
        
    Next oCtrl
    Set oCtrl = Nothing
End Function

'--------------------------------------------------------------

MsgBox "Champs remplis sur l'onglet 2?
=> " & AreTBCompleted(2)





<hr size="2" width="100%" />
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
tu peux évidemment passer la fonction en public et mettre le nom du sstab en paramètre (string).

t'as plus qu'à c/c....
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008

J'avais testé cette façon de faire en mettant l'index du Tab en dur et ca ne marchait pas. Et là ta fonction me retourne "Vrai" tout le temps, même quand les champs sont vides. J'ai fais du debug et apparement l'exécution ne dépasse pas le If oCtrl.Container.Name... donc forcément elle renvoit "Vrai" quoi qu'il arrive.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
alors il y a qqc que tu ne nous dis pas....
peut-être que les textbox sont "sur" le sstab et non "dans" le sstab?
peut-être n'as-tu pas changé le nom du sstab?    = "NOM_DU_SSTAB_A_MODIFIER"
ou les txtbox sont en plus dans une pisturebox, frame ou tout autre container?
ou tu as mis en public et il manque la référence à la form parente?
etc...

j'avais testé "name" et"tab" hier, çà fonctionnne...
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008

Non j'ai bien indiquer le nom de mon SSTab, je ne suis pas si bête .
Pour être sûr que nous avons les mêmes éléments pour essayer de résoudre mon problème, je vais décrire ma form.

Donc c'est une form contenant un SSTab possèdant 3 onglets.Sur le premier onglet, j'ai une quinzaine de textbox réparties dans 4 ou 5 frame puisqu'ils font référence à différents types d'informations. Après les autres onglets sont basés sur le même modèle.

Je pense avoir donné tous les détails.

Merci de consacrer un peu de ton temps à m'aider.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
... c'est bien ce que je disais, le container n'est pas le sstab mais la frame
ou les txtbox sont en plus dans une picturebox, frame ou tout autre container?
Messages postés
19
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
29 février 2008

Non seulement dans des frames qui sont elles contenues dans le SSTab.