Scrollbar liée avec textbox

Bonjour,

J'ai fait un userform contenant 100 textbox

Il va de soit que la centaine de textbox ne tient pas dans la fenêtre.

Aussi, je souhaiterai que quand on passe du 15ème textbox au 16ème, le scrollbar descende automatiquement pour montrer la case d'en dessous.

Je vous joints mon fichier.

Merci de votre aide.

Pascal

33tableau-bord.xlsm (232.48 Ko)

Bonjour,

un petit fichier :

38test-loureed.xlsm (17.94 Ko)

Une frame qui "glisse" dans une autre frame, et la scrollbar à l'extérieure de la frame qui glisse

Le seul truc pour que cela soit "propre" c'est de mettre en place un module de Class afin de gérer les "entrées" dans les TextBox en "global" et non pas box par box comme j'ai pu le faire, car les Class je ne comprend pas tout encore, pas assez travaillé !

@ bientôt

LouReeD

Bonjour,

Je ne comprends pas du tout le code.

ScrollBar1.Value = CDbl(Mid(Me.Frame3.ActiveControl.Name, 8, Len(Me.Frame3.ActiveControl.Name))) * 11 - 13.8

Ca veut dire quoi concrètement?

Quand je rentre le code, la scrollbar n'est pas assez grande par rapport à toutes mes textbox?

A vous relire.

Merci

Re,

C'est bon j'ai compris.

Il suffisait de mettre l'écart entre chaque textbox

Merci

Pascal

Bonsoir,

Autre proposition avec événement unique pour chaque textbox des tickets restaurants

59tableau-bord-2.xlsm (248.83 Ko)

Bonjour Thev,

C'est exactement ce que je souhaitais.

Reste à comprendre le fonctionnement mais j'ai bon espoir. Ca m'évite surtout de faire une macro pour chaque textox et ça, c'est super.

Merci encore.

Bonjour,

et oui avec un module de Class...

Autre proposition avec événement unique pour chaque textbox des tickets restaurants

Faut vraiment que je m'y penche !!!

Merci de vos remerciements Bien que ma solution est été alambiquée !!!!

@ bientôt

LouReeD

Bonjour,

Quelques explications complémentaires :

1- tous les éléments de la classe sont stockés dans la collection "Tickets" avec pour clé, le nom de la TextBox

2- chaque élément de la classe est associé à un objet TextBox via la propriété Obj_TextBox de la classe ainsi qu'au UserForm Source via la propriété Obj_UserForm de la classe

3- l'événement "Change" est d'abord détecté dans le module de classe et ensuite ramené dans le code du UserForm via la variable de classe "ticket". L'assignation de cette variable du UserForm à l'élément de la classe est faite dans le module de la classe (Set USF.ticket = USF.tickets(txtbox.Name)). Cette association est possible du fait que l'objet UserForm est associé à l'élément de la classe et ensuite que la variable de classe "ticket" est publique ainsi que la collection "tickets".

4- l'objet TextBox concerné par l'événement "Change " du Userform est récupéré par la propriété Obj_TextBox de la variable de classe "ticket". Exemple : nom de la TextBox = ticket.Obj_TextBox.Name , valeur de la TextBox = ticket.Obj_TextBox.Value

Re,

Merci encore.

Je vais tenter de faire la même chose avec les tickets bancaires.

Je suppose que je dois toujours utiliser ce module de classe pour entrer les valeurs des textbox dans ma page excel.

Je me remets dessus cette aprèm.

Il est possible que vous me revoyiez sur ke forum.

A bientôt. Vous êtes au top.

Pascal

Je vais tenter de faire la même chose avec les tickets bancaires.

Le plus simple est alors d'enregistrer aussi les tickets bancaires dans la collection "tickets" mais au niveau de l'événement "Change" de votre formulaire, il va falloir différencier les tickets bancaires des tickets restaurants.

Ce que je vous conseille, c'est

1- via une boucle simple à l'initialisation du Userform , de positionner la propriété Tag des différents TextBox à "B" pour les tickets bancaires et à "R" pour les tickets restaurants

2- de tester ensuite dans l'événement "Change" la valeur de ticket.Obj_TextBox.Tag

Re,

Voilà que je recoince:

Avec cette super macro (qui me semble au-dessus de mon niveau), je n'arrive pas à additionner mes textbox.

Voilà le code que j'ai mis.

De ce que je comprends, il ne faut plus les appeler "TextBox..". Mais que dois-je mettre à la place de ce nom?

For tr = 15 To 115
    If Me.Controls("textbox" & tr) <> "" And IsNumeric(Val(Replace("textbox" & tr, ".", "."))) Then
        cpt = cpt + Val(Replace("textbox" & tr, ".", "."))
    End If
    If Me.Controls("textbox" & tr) <> "" And Not IsNumeric(Val(Replace("textbox" & tr, ".", "."))) Then
         msg = MsgBox("Attention, la valeur du ticket restaurant situé à la " & tr - 14 & _
        "ème ligne n'est pas numérique. Vous devez ressaisir la valeur avant de poursuivre", vbCritical)
        Me.MultiPage1.Value = 3
    End If
Next tr
Label87.Caption = cpt

Auriez-vous une aide là-dessus svp?

Pascal

EDIT,

Je pense que le problème vient de ma boucle avec

"textbox" & tr

Forcément, j'ai essayé sans les guillemets mais ça aurait été trop simple

Bonjour,

Attention "textbox" & tr n'est qu"une chaîne de caractères. Le contrôle TextBox est défini par Me.Controls("textbox" & tr)

Ce code est plus simple et devrait fonctionner

    Dim ctrl As Control

    For tr = 15 To 115
       Set ctrl = Me.Controls("textbox" & tr)
       If crtl <> "" And IsNumeric(Val(Replace(ctrl, ",", "."))) Then cpt = cpt + Val(Replace(ctrl, ",", "."))
       If crtl <> "" And Not IsNumeric(Val(Replace(ctrl, ",", "."))) Then
            msg = MsgBox("Attention, la valeur du ticket restaurant situé à la " & tr - 14 & _
           "ème ligne n'est pas numérique. Vous devez ressaisir la valeur avant de poursuivre", vbCritical)
           Me.MultiPage1.Value = 3
       End If
    Next tr
    Label87.Caption = cpt

Aaahh!

Tellement facile pour vous et toute une après-midi pour moi!

C'est comme ça qu'on apprend..

Merci beaucoup.

Pascal

Rechercher des sujets similaires à "scrollbar liee textbox"