Contrôle de textbox [Résolu]

cs_Dante27 19 Messages postés mardi 3 janvier 2006Date d'inscription 29 février 2008 Dernière intervention - 27 févr. 2008 à 12:56 - Dernière réponse : cs_Dante27 19 Messages postés mardi 3 janvier 2006Date d'inscription 29 février 2008 Dernière intervention
- 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
Afficher la suite 

18 réponses

Répondre au sujet
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 27 févr. 2008 à 13:31
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de PCPT
cs_Dante27 19 Messages postés mardi 3 janvier 2006Date d'inscription 29 février 2008 Dernière intervention - 27 févr. 2008 à 13:58
0
Utile
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.
Commenter la réponse de cs_Dante27
pile_poil 682 Messages postés vendredi 6 avril 2007Date d'inscription 4 août 2012 Dernière intervention - 27 févr. 2008 à 14:23
0
Utile
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
Commenter la réponse de pile_poil
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 27 févr. 2008 à 15:01
0
Utile
teste simplement le .container
Commenter la réponse de PCPT
cs_Dante27 19 Messages postés mardi 3 janvier 2006Date d'inscription 29 février 2008 Dernière intervention - 27 févr. 2008 à 15:46
0
Utile
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.
Commenter la réponse de cs_Dante27
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 27 févr. 2008 à 16:03
0
Utile
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
Commenter la réponse de PCPT
cs_Dante27 19 Messages postés mardi 3 janvier 2006Date d'inscription 29 février 2008 Dernière intervention - 27 févr. 2008 à 16:24
0
Utile
Merci de l'info :-)! Je pensais que ca servait à valider les réponses pour les afficher dans le forum. Je le saurais à l'avenir!
Commenter la réponse de cs_Dante27
cs_Dante27 19 Messages postés mardi 3 janvier 2006Date d'inscription 29 février 2008 Dernière intervention - 27 févr. 2008 à 17:38
0
Utile
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é?
Commenter la réponse de cs_Dante27
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 27 févr. 2008 à 18:50
0
Utile
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+
Commenter la réponse de bigfish_le vrai
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 28 févr. 2008 à 04:01
0
Utile
** 1 2 3 en fait, pour un retour integer (logiquement, pas vérifié) mais l'idée est là ;)
Commenter la réponse de PCPT
cs_Dante27 19 Messages postés mardi 3 janvier 2006Date d'inscription 29 février 2008 Dernière intervention - 28 févr. 2008 à 13:01
0
Utile
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).
Commenter la réponse de cs_Dante27
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 28 févr. 2008 à 13:32
0
Utile
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
Commenter la réponse de PCPT
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 28 févr. 2008 à 13:35
0
Utile
tu peux évidemment passer la fonction en public et mettre le nom du sstab en paramètre (string).

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.