MEUCORACAO
Messages postés35Date d'inscriptionjeudi 30 juin 2011StatutMembreDernière intervention23 octobre 2018
-
23 sept. 2013 à 10:44
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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.
MEUCORACAO
Messages postés35Date d'inscriptionjeudi 30 juin 2011StatutMembreDernière intervention23 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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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à.