Modification largeur textbox + décaler les labels

Signaler
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018
-
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bonjour,
Que remplis-tu en premier ?
La réponse à cette question déterminera la solution.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
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.
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018

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
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018

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?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
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à.
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018

Merci mais bon c'est pas du tout de cette façon qu'il faut le prendre. Bon tant pis.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
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.