faire un control sur tous les textbox visible

  • Initiateur de la discussion Thomas
  • Date de début
T

Thomas

Guest
Bonjour le forum,

j'ai une question car là je bloque.

je dois créer un usf qui selon le choix que je fais dans une combobox me permet d'afficher et masquer des textbox.

ensuite à la validation de cette procedure je souhaite faire un control afin de m'assurer que tout les textboxs visible=true soit rempli.

j'etais parti sur une procedure du genre

if textbox1 <> '' or texbox2 <> or..... then

msgbox 'blablabla....'

exit sub
end if

alors cela marche si tout mes textbox on des données mais si je les masque je ne peux pas les remplir.

ceci est mon 1er probléme.

mon 2eme probléme est que la validation de cette macro consiste a inscrire toute les info texte box dans une feuille excel.

et pour ce faire j'utilise ce code :

With Sheets(VarMois)
.Range('B' & Ligne) = textbox1
.Range('B' & Ligne) = Format(textbox2, 'dd-mmm')
.Range('C' & Ligne) = Application.Proper(textbox3)
.Rows(Ligne).AutoFit
End With

mais ce que je souhaiterais serait de là aussi conditionner en fonction des textbox visible donc par exemple que mon textbox1 puisse etre enregister au meme endroit que le textbox2 (de ce fait ils ne seront jamais visible en même temps.

car je pense que si je fait comme dans l'exemple ci desssus il risque de me copie le textbox1 puis le 2 dans ma colonne 2 à la même ligne et de ce fait si mon textbox 2 n'est pas visible (dc avec une valeur nul) ma cellule risque d'etre vierge??

ou alors faire comme cela :

.Range('B' & Ligne) = Textbox1 & Format(textbox2, 'dd-mmm')

D'avance merci pour vos aides
Thomas

Ps : le plus important pour moi reste la 1er question de ce poste
 
S

sousou

Guest
Bonjour thomas

Tu pourrai t'inspirer de cette méthode

Sub test()
n = 0 'offset de rangement
Set rangement = Range('a1') 'plage de rangement
For Each i In UserForm1.Controls 'tous les controls du userform
If i.Visible = True Then 'si visible
If i.Value = '' Then 'si remplis
MsgBox 'erreur de saisie :' & i.Name
Exit Sub
Else
n = n + 1
rangement.Offset(n, 0) = i 'rangement
End If
End If
Next
End Sub

Ajouter un test pour ne pas tenir compte des controls non concernés comme les bouton ou autres en vérifaint la nature du control.

Bonne chance
 
T

Thomas

Guest
Bonjour pascal76, sousou, le forum,

merci pour vos reponses

alors enfait je cherche a faire des saisies en fonction de l'objet selectioné (dans un combobox)et effectivement je pense que pour les textbox qui pointe sur la même cellule en mettre un seul et changer la captation du label qui le decrit afin que le textbox soit le même mais que l'intitulé soit différent. :eek: je n'y avais pas pensé avant..

mais en fonction du choix fait dans mon combobox je serais amené a avoir n textbox (des foi 4 ou 5)

donc si j'ai bien compris vos reponse je dois faire si je prend la technique de pascal76

faire

Dim ctrl As Control

For Each ctrl In Me.Controls
If TypeName(ctrl) = 'TextBox1' And ctrl.Visible = True Then
If ctrl = '' Then MsgBox 'obligatoire de remplir'
End If
Next

For Each ctrl In Me.Controls
If TypeName(ctrl) = 'TextBox2' And ctrl.Visible = True Then
If ctrl = '' Then MsgBox 'obligatoire de remplir'
End If
Next

..... (autemps de foi que j'ai de textbox??)

si oui il serait plus simple de faire comme me l'a proposé sousou

Sub test()
n = 0 'offset de rangement
Set rangement = Range('a1') 'plage de rangement
For Each i In UserForm1.Controls 'tous les controls du userform
If i.Visible = True Then 'si visible
If i.Value = '' Then 'si remplis (si vide??)
MsgBox 'erreur de saisie :' & i.Name
Exit Sub
Else
With Sheets(VarMois)
.Range('B' & Ligne) = textbox1
.Range('B' & Ligne) = Format(textbox2, 'dd-mmm')
.Range('C' & Ligne) = Application.Proper(textbox3)
.Rows(Ligne).AutoFit
End With
End If
End If
Next
End Sub

mais si je fais cette procedure qu'entend tu pars un test pour écarter les boutons ou autre car mon USF comportera plein de label ma un label comme un bouton n'a pas de valeur (c'est pour ca que je dois les écarter?? sinon il vont être conserné par le .Controls ??)

si oui comment puis je exclure de cette procedure un label ou un bouton ?

je sais que je vous en demande beaucoup :unsure:

d'avance merci
Thomas
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

Non ce bout de code boucle sur tous tes textbox visible et regarde si il y a bien une valeur à l'intérieur

Dim ctrl As Control

For Each ctrl In Me.Controls 'Pour tous les contrôles
If TypeName(ctrl) = 'TextBox' And ctrl.Visible = True Then 'Si le controle est un textbox et qu'il est visible
If ctrl = '' Then MsgBox 'obligatoire de remplir' 'Si il est vide message
End If
Next

Message édité par: Pascal76, à: 27/04/2005 15:04
 
T

Thomas

Guest
re,

ha..... Ok sorry je n'avais pas compris je pensais que textbox etait son nom mais en réalité cela est le type de control (cool) cela veut dire que je pourai faire de même un jour pour un autre type de control

ok merci vous êtes vraiment super blaise et en plus super dispo merci pour tout (surtout que ce n'est pas la 1er foi que tu me depanne Pascal76 un grand merci)
Thomas
 
T

Thomas

Guest
Re,

Merci j'ai testé cela march impec

j'ai du juste modifier car dans cette technique il lancé la procédure pour chaque textbox ce qui fait que j'avais le mesage x fois

et n'etait pas bloquant car il enregiste des fiches incompléte mais cela est de ma faute car mis ma procédure d'enregistrement dans la boucle.

alors afin de n'avoir le message 1 seul foi et de ne pouvoir enregistrer les info que si tout est remplis je l'ai modifier pour cela en sachant que ce qui vient apres le code ne peut ce faire que si tout les textbox visible sont renseigné .

For Each ctrl In Me.Controls 'Pour tous les contrôles
If TypeName(ctrl) = 'TextBox' And ctrl.Visible = True Then 'Si le controle est un textbox et qu'il est visible
If ctrl = '' Then
MsgBox 'obligatoire de remplir' 'Si il est vide message
Exit Sub
End If
End If
Next
Ce message ne s'adresse pas à vous qui m'avez aidé car cela est évident pour vous mais pour ce qui un jour liront ce poste .
@+ Thomas&reg;
 

Discussions similaires

Statistiques des forums

Discussions
312 504
Messages
2 089 072
Membres
104 018
dernier inscrit
Mzghal