Contrôle de textbox

Résolu
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008 - 27 févr. 2008 à 12:56
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008 - 29 févr. 2008 à 08:55
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

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 févr. 2008 à 13:31
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
3
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008
27 févr. 2008 à 13:58
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.
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
27 févr. 2008 à 14:23
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 févr. 2008 à 15:01
teste simplement le .container
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008
27 févr. 2008 à 15:46
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.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 févr. 2008 à 16:03
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
0
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008
27 févr. 2008 à 16:24
Merci de l'info :-)! Je pensais que ca servait à valider les réponses pour les afficher dans le forum. Je le saurais à l'avenir!
0
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008
27 févr. 2008 à 17:38
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é?
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
27 févr. 2008 à 18:50
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+
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 févr. 2008 à 04:01
** 1 2 3 en fait, pour un retour integer (logiquement, pas vérifié) mais l'idée est là ;)
0
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008
28 févr. 2008 à 13:01
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).
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 févr. 2008 à 13:32
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 févr. 2008 à 13:35
tu peux évidemment passer la fonction en public et mettre le nom du sstab en paramètre (string).

t'as plus qu'à c/c....
0
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008
28 févr. 2008 à 16:15
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.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 févr. 2008 à 16:30
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
0
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008
28 févr. 2008 à 16:46
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.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 févr. 2008 à 17:15
... 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?
0
cs_Dante27 Messages postés 19 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 29 février 2008
29 févr. 2008 à 08:55
Non seulement dans des frames qui sont elles contenues dans le SSTab.
0
Rejoignez-nous