Modification largeur textbox + décaler les labels

MEUCORACAO Messages postés 35 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 23 octobre 2018 - 23 sept. 2013 à 10:44
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 23 sept. 2013 à 20:12
Bonjour,

En voyant le titre, vous devez vous demander le problème qui se pose à moi. Dur d'écrire un titre explicitant rapidement mon problème ici. En effet, je suis en train de créer petit logiciel de calcul réactionnel pour de la chimie pure et dure. J'utilise donc des userform. Mon problème ici est que dans un userform je crée des textbox et des label. Mes textbox me permettent de rentre le coefficient stoechiométrique du réactif et les label pour les molécules. J'ai mis un autosize sur le textbox car un coefficient stoechiométrique peut varier du tout au tou donc je n'ai pas fixé de largeur. De ce fait, lors du remplissage de la textbox, elle s'agrandit à souhait mais le label qui suit lui, ne se décale pas alors que j'aimerai qu'il le fasse. connaissez-vous le code à écrire pour que cette petite opération s'effectue sans souci.

Je crée mes textbox et label comme ceci :
For i = 1 To Nbr_Reactif
        Set Opt = UserForm7.Controls.Add("Forms.Textbox.1")
        With Opt
            .Name = "Reactif" & i
            .Left = x + 10
            .Top = 20
            .AutoSize = True
            .Font.Name = "Calibri"
            .Font.Size = 12
        End With
        
        'calculs de la position gauche x
        x = Opt.Left + Opt.Width + 3
        
        'création des label pour écrire la formule chimique puis positionnement
        For j = 1 To 10
            
            Set Opt = UserForm7.Controls.Add("Forms.Label.1")
            If j Mod 2 = 1 Then
                With Opt
                .Name = "Atome" & i
                .Caption = Cells(6 * i - 3, j + 1).Value
                .AutoSize = True
                .WordWrap = False
                .Move x, 25
                .Font.Name = "Times"
                .Font.Size = 12
                .BackStyle = 0
                End With
                If Cells(6 * i - 3, j + 1).Value = 1 Or Cells(6 * i - 3, j + 1).Value = "" Then
                    Opt.Width = 0
                End If
            Else
                With Opt
                .Name = "Stoechio" & i
                .Caption = Cells(6 * i - 2, j + 1).Value
                .AutoSize = True
                .WordWrap = False
                .Move x, 30
                .Font.Name = "Times"
                .Font.Size = 8
                .BackStyle = 0
                End With
                If Cells(6 * i - 2, j + 1).Value = 1 Or Cells(6 * i - 2, j + 1).Value = "" Then
                    Opt.Width = 0
                End If
            End If
            
            x = x + Opt.Width
            
        Next j
        
        'mise en place du signe soit + entre réactif soit flèche entre réactif et produit
        x = x + 10
        If i = Nbr_Reactif Then
            Set Opt = UserForm7.Controls.Add("Forms.Label.1")
            With Opt
                .Name = "Flèche" & i
                .AutoSize = True
                .WordWrap = False
                .Move x, 20
                .BackStyle = 0
            End With
            Set Myfont = Opt.Font
            Myfont.Name = "Wingdings 3"
            Myfont.Size = 20
            Opt.Caption = "a"
            x = x + 10
        Else
            Set Opt = UserForm7.Controls.Add("Forms.Label.1")
            With Opt
                .Name = "Plus" & i
                .Caption = "+"
                .AutoSize = True
                .WordWrap = False
                .Move x, 25
                .Font.Name = "Times"
                .Font.Size = 14
                .BackStyle = 0
            End With
            x = x + 10
        End If
    Next i


J'aurai bien voulu vous montrer comment cela se présente dans mon userform mais on ne peut pas insérer d'image sur ce forum.
Pour l'userform juste après l'initialisation, vous pouvez télécharger ici l'image :
http://filez.univ-bpclermont.fr/prp3raq

Après modification, c'est ici:
http://filez.univ-bpclermont.fr/htjl9

Je vous remercie par avance pour votre aide,
Bonne journée à vous,

Bien cordialement,

Anthony

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 sept. 2013 à 11:00
Bonjour,
Que remplis-tu en premier ?
La réponse à cette question déterminera la solution.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 sept. 2013 à 11:30
Ce n'est de toutes manières qu'une question d'arithmétique élémentaire et rien d'autre.
Je t'ai fait, non ton code, mais un petit exemple qui devrait t'éclairer et à améliorer à ta sauce :
Sur un userform : et sur la même ligne :
- une textbox textbox1 (en autosize)
- un label lablel1 en autosize + wordwrap à false
- une textbox textbox2 (en autosize)
- un label lablel2 en autosize + wordwrap à false
plus bas : un bouton de commande
et ce code :
Private Sub CommandButton1_Click()
  TextBox1.Text = "bonjour les amis"
  positionner Label1, TextBox1
  positionner TextBox2, Label1
  positionner Label2, TextBox2
  Label1.Caption = "comment ça va ?"
  positionner TextBox2, Label1
  positionner Label2, TextBox2
  TextBox2.Text = "bien merci"
  positionner Label2, TextBox2
  Label2.Caption = "alors tout va bien"
End Sub

Private Sub positionner(quoi As Object, aprèsquoi As Object)
  With quoi
  .Left = aprèsquoi.Left + aprèsquoi.Width + 3
  End With
End Sub

lance ==>> clique sur le bouton et constate.
A toi de jouer, avec cet exemple, tes données et tes contrôles.
0
MEUCORACAO Messages postés 35 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 23 octobre 2018
23 sept. 2013 à 13:34
Bonjour ucfoutu, Merci de ton aide!

Ton code marche bien dès lors qu'on décide d'appuyer sur un bouton. Moi je souhaiterais que tout se décale lors du remplissage de la textbox. Au fur et à mesure que tu remplis la textbox et que cela déborde le text les autres labels et textbox se décale tout seul. Y a-t-il une solution?? Merci encore
0
MEUCORACAO Messages postés 35 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 23 octobre 2018
23 sept. 2013 à 13:39
Avec un
Private Sub object_Change( )
, c'est possible mais je ne sais pas comment le créer avec ma déclaration et création de mes textbox?
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 sept. 2013 à 15:08
Là, je te laisse alors, car :
ce que je t'ai montré est le code à exécuter chaque fois que quelque chose est inscrit ou s'inscrit dans l'un de tes contrôles. Et ce, quelle que soit, quelle que puisse être l'origine ou la manière de l'inscrire.
La question que tu poses maintenant dénotes une carence bien plus fondamentale (celle de la compréhension du déroulement de ton code, celle de la préhension d'évènements).
Et je n'aime (mais alors pas du tout) transformer en didacticiel ce qui n'était à l'origine qu'une difficulté isolée, à laquelle il me semble avoir répondu.
Je te souhaite bonne chance et du sérieux dans la poursuite de ton apprentissage, mais te laisse là.
0
MEUCORACAO Messages postés 35 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 23 octobre 2018
23 sept. 2013 à 17:47
Merci mais bon c'est pas du tout de cette façon qu'il faut le prendre. Bon tant pis.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 sept. 2013 à 20:12
Il y a TOUJOURS une bonne façon de "prendre" le développement. Il suffit de la choisir, ami. Et si tu es un développeur, tu sauras le faire.
0
Rejoignez-nous