Userfor et Textbox

Signaler
Messages postés
6
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
3 août 2011
-
Messages postés
14774
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
7 mars 2021
-
Bonjour à tous,

J'aimerai un petit coup de pouce parce que là c'est énervant.

J'ai deux userform. Sur le premier, je renseigne, dans deux textbox, deux données différentes, consommation d'essence et nombre de kilomètres parcourus. J'ai placé un bouton validé. Sur le deuxième, on fait un bilan de leur consommation => 8 textbox qui donne des indicateurs. C'est indicateurs sont normalement calculés avec les deux données renseignées précédemment.

Le bouton validé ouvre mon deuxième userform. Mais n'active pas les textbox de mon second userform qui restent blmanches qui restent vierges!!!!

Could you help me please ?

thks

Best regards

8 réponses

Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
5
Bonjour ,

Mon petit doigt me dit que dans ton code, tu n'as pas spécifié le userfomr auxquelles les textbox appartiennent..
userform2.textbox.text=toncalcul à la ligne 56 ou un truc comme ça..ou alors si tu passees par des variables, qu'elles ne sont pas déclarées en globale.

En tout cas sans voir le code, difficile de te répondre.

PS : Gaffe à la catégorie dans laquelle tu postes VBA est différent de VB6, si un admin peut déplacer le topic...

L'expérience, c'est une connerie par jour, mais jamais la même..
Messages postés
6
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
3 août 2011

Hello,

Merci de tes conseils. J'ai essayé ta syntaxe mais nada....

J'envoie mon code:

pour Userform1(c'est une pagfe de présentation et donc pas de soucis je pense:
Public aa As Long
Public bb As Long
private Sub CommandButton1_Click()
UserForm2.Show
Unload UserForm1
End Sub

Pour userform2:
Public aa As Integer
Public bb As Integer
Private Sub CommandButton1_Click()
UserForm2.Hide
UserForm3.Show
End Sub
Private Sub TextBox1_Change()
Dim a As Integer
If Not IsNumeric(Right(TextBox1, 1)) Then
MsgBox "Le caractere saisi n'est pas valide"
TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
End If
aa = Userform2.TextBox1.Value
End Sub
Private Sub TextBox2_Change()
If Not IsNumeric(Right(TextBox2, 1)) Then
MsgBox "Le caractere saisi n'est pas valide"
TextBox1 = Left(TextBox2, Len(TextBox2) - 1)
End If
bb = Userform2.TextBox2.Value
End Sub

et pour le troisième:
Public aa As String
Public bb, j, c, w, d, e, f, s As String
Public p, o, y As String
Private Sub TextBox1_Change()


UserForm3.TextBox1.Text = bb * 296

j = UserForm3.TextBox1.Value



End Sub


Private Sub TextBox2_Change()


UserForm3.TextBox2.Text = (Val(aa) * Val(bb)) / 100


c = UserForm3.TextBox2.Value

End Sub

Private Sub TextBox3_Change()

If UserForm1.ListBox1.Text = essence Then

w = 2.3

Else

w = 2.6

End If

UserForm3.TextBox3.Text = Val(c) * w

d = UserForm3.TextBox3.Value

End Sub

Private Sub TextBox4_Change()



UserForm3.TextBox4.Text = d * 296

f = UserForm3.TextBox4.Value

End Sub

Private Sub TextBox5_Change()


If UserForm1.ListBox1.Text = essence Then

s = 1.45
Else
s = 1.32

End If

UserForm3.TextBox5.Text = c * s

e = UserForm3.TextBox5.Value

End Sub

Private Sub TextBox6_Change()

UserForm3.TextBox6.Text = e * 296

p = UserForm3.TextBox6.Value

End Sub

Private Sub TextBox7_Change()

UserForm3.TextBox7.Text = j * ((2 / 300) + (5 / 300)) + 200

o = UserForm3.TextBox7.Value


End Sub

Private Sub TextBox8_Change()

UserForm3.TextBox8.Text = o + p

y = UserForm3.TextBox8.Value


End Sub


Merci d'avance, je peux envoyer le fichier excel sur une boite mail.
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
5
Bonjour,

Alors déjà quelques conseils, renommes tes controles, car textbox1 , 2 etc c'est pas très parlant, si tu dois revenir sur un code plus tard c'est toujours mieux de nommer clairement tes variables et autres objets. Surtout là en l'occurence, où tu as plusieurs userform, et tu te retrouves avec les memes noms textbox1 sur plusieurs d'entre eux..

Quand tu utilises un objet textbox, la propriété par défaut est text, mais il est préférable de toujours le préciser.

Je n'ai pas regardé le code en entier encore, j'ai pour le moment des choses à faire mais penses également à l'indenter, c'est plus lisible et quand tu le postes ici, utilises la coloration syntaxique (3eme icone en partant de la droite)


L'expérience, c'est une connerie par jour, mais jamais la même..
Messages postés
6
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
3 août 2011

C'est bon j'ai réussi.

En faisont une exécution pas à pas les variables ont les bonnes valeurs mais elles ne s'affichent que sur 4 textboxs au lieu de huit
Messages postés
6
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
3 août 2011

Dans le userform2

Public aa As Integer
Public bb As Integer

Private Sub TextBox1_Change()
Dim a As Integer

 If Not IsNumeric(Right(TextBox1, 1)) Then
        MsgBox "Le caractere saisi n'est pas valide"
        TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
    End If
    
aa = UserForm2.TextBox1.Value
End Sub

Private Sub TextBox2_Change()

 If Not IsNumeric(Right(TextBox2, 1)) Then
        MsgBox "Le caractere saisi n'est pas valide"
        TextBox1 = Left(TextBox2, Len(TextBox2) - 1)
    End If
    
'pour le userform3

bb = UserForm2.TextBox2.Value
userform3.TextBox1.Text = bb * 296
j = userform3.TextBox1.Value

userform3.TextBox2.Text = (aa * bb) / 100
c = userform3.TextBox2.Value

'If UserForm1.ListBox1.Text = essence Then
'w = 2.3
'Else
w = 2.6
'End If

userform3.TextBox3.Text = c * w
d = userform3.TextBox3.Value

userform3.TextBox4.Text = d * 296
f = userform3.TextBox4.Value

'If UserForm1.ListBox1.Text = essence Then
's = 1.45
'Else
s = 1.32
'End If

userform3.TextBox5.Text = c * s
e = userform3.TextBox5.Value

userform3.TextBox6.Text = e * 296
p = userform3.TextBox6.Value

userform3.TextBox7.Text = j * ((2 / 300) + (5 / 300)) + 200
o = userform3.TextBox7.Value

userform3.TextBox8.Text = o + p
y = userform3.TextBox8.Value

'pour le userform4

j = userform3.TextBox1.Value
UserForm4.TextBox1.Text = j

c = userform3.TextBox2.Value
UserForm4.TextBox2.Text = c / 2
r = UserForm4.TextBox2.Text

d = userform3.TextBox3.Value
UserForm4.TextBox3.Text = d / 2
h = UserForm4.TextBox3.Text

h = UserForm4.TextBox3.Text
UserForm4.TextBox4.Text = h * 296

z = UserForm4.TextBox4.Text

e = userform3.TextBox5.Value
UserForm4.TextBox5.Text = e / 2
g = UserForm4.TextBox5.Text

g = UserForm4.TextBox5.Text
UserForm4.TextBox6.Text = g * 296
x = UserForm4.TextBox6.Text

o = userform3.TextBox7.Value
UserForm4.TextBox7.Text = o / 2
n = UserForm4.TextBox7.Text

x = UserForm4.TextBox6.Text
n = UserForm4.TextBox7.Text
UserForm4.TextBox8.Text = n + x
gg = UserForm4.TextBox8.Text

gg = UserForm4.TextBox8.Text

UserForm4.TextBox9.Text = gg

z = UserForm4.TextBox4.Text
UserForm4.TextBox10.Text = z

End Sub

Private Sub CommandButton1_Click()

userform3.Show

End Sub


Pour le userform3

Public aa As String
Public bb, j, c, w, d, e, f, s As String
Public p, o, y As String

Private Sub TextBox1_Change()
bb = UserForm2.TextBox2.Value
userform3.TextBox1.Text = bb * 296
j = userform3.TextBox1.Value
End Sub

Private Sub TextBox2_Change()
aa = UserForm2.TextBox1.Value
userform3.TextBox2.Text = (aa * bb) / 100
c = userform3.TextBox2.Value
End Sub

Private Sub TextBox3_Change()
'If UserForm1.ListBox1.Text = essence Then
'w = 2.3
'Else
w = 2.6
'End If
userform3.TextBox3.Text = c * w
d = userform3.TextBox3.Value
End Sub

Private Sub TextBox4_Change()
userform3.TextBox4.Text = d * 296
f = userform3.TextBox4.Value
End Sub

Private Sub TextBox5_Change()
'If UserForm1.ListBox1.Text = essence Then
's = 1.45
'Else
s = 1.32
'End If
userform3.TextBox5.Text = c * s
e = userform3.TextBox5.Value
End Sub

Private Sub TextBox6_Change()
userform3.TextBox6.Text = e * 296
p = userform3.TextBox6.Value
End Sub

Private Sub TextBox7_Change()
userform3.TextBox7.Text = j * ((2 / 300) + (5 / 300)) + 200
o = userform3.TextBox7.Value
End Sub

Private Sub TextBox8_Change()
userform3.TextBox8.Text = (Val(o) + Val(p))
y = userform3.TextBox8.Value
End Sub



Dans le userform4
Public aa As Long
Public bb, j, c, w, d, e, f, s, p, o, y As String

Private Sub CommandButton1_Click()
End
End Sub

Private Sub TextBox1_Change()
Dim u As String
j = userform3.TextBox1.Value
UserForm4.TextBox1.Text = j
End Sub

Private Sub TextBox2_Change()
Dim r As String
c = userform3.TextBox2.Value
UserForm4.TextBox2.Text = c / 2
r = UserForm4.TextBox2.Text
End Sub

Private Sub TextBox3_Change()
Dim h As String
d = userform3.TextBox3.Value
UserForm4.TextBox3.Text = d / 2
h = UserForm4.TextBox3.Text
End Sub

Private Sub TextBox4_Change()
h = UserForm4.TextBox3.Text
UserForm4.TextBox4.Text = h * 296
z = UserForm4.TextBox4.Text
End Sub

Private Sub TextBox5_Change()
Dim g As String
e = userform3.TextBox5.Value
UserForm4.TextBox5.Text = e / 2
g = UserForm4.TextBox5.Text
End Sub

Private Sub TextBox6_Change()
g = UserForm4.TextBox5.Text
UserForm4.TextBox6.Text = g * 296
x = UserForm4.TextBox6.Text
End Sub

Private Sub TextBox7_Change()
o = userform3.TextBox7.Value
UserForm4.TextBox7.Text = o / 2
n = UserForm4.TextBox7.Text
End Sub

Private Sub TextBox8_Change()
x = UserForm4.TextBox6.Text
n = UserForm4.TextBox7.Text
UserForm4.TextBox8.Text = (Val(n) + Val(x))
gg = UserForm4.TextBox8.Text
End Sub

Private Sub TextBox9_Change()
Dim oo As String
gg = UserForm4.TextBox8.Text
UserForm4.TextBox9.Text = gg
End Sub

Private Sub TextBox10_Change()
z = UserForm4.TextBox4.Text
UserForm4.TextBox10.Text = z
End Sub


Donc toujours un problème d'affichage sur les textbox 2, 3, 4, 6, 7 de l'userform3

Merci d'avance
Messages postés
6
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
3 août 2011

Je dois encore régler ma liste box dans l'userform2 et régler la forme des chiffres (soit 1 seule décimale après la virgule)
Messages postés
6
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
3 août 2011

c'est bon j'ai réussi j'avais fait trop de copier coller et j'avais une textbox 9 sur la textbox 2 et aisni de suite.

Grosse erreur d’inattention

Par contre contre comment puis-je faire pour ma listebox dans le userform2 pour choisir entre essence ou diesel ? et que ma boucle If fonctionne pour mes calculs ?

En tout cas merci

bien à vous
Messages postés
14774
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
7 mars 2021
151
Bonjour,

If n'est pas une boucle, mais une structure de test.
Sinon, en regardant rapidement ton dernier code posté, je confirme la remarque faite précédemment :
- Renomme tes contrôles et variables histoire de rendre le code plus compréhensible. D'autant plus qu'il y a aucun commentaire.

Public aa As String
Public bb, j, c, w, d, e, f, s As String
Public p, o, y As String

Private Sub TextBox1_Change()
bb = UserForm2.TextBox2.Value
userform3.TextBox1.Text = bb * 296
j = userform3.TextBox1.Value
End Sub

Private Sub TextBox2_Change()
aa = UserForm2.TextBox1.Value
userform3.TextBox2.Text = (aa * bb) / 100
c = userform3.TextBox2.Value
End Sub


TextBox1, TextBox2, ... ce n'est pas clair alors que :
TxtNom, TxtReference seraient plus clair.
Txt TextBox, Cmb ComboBox, Cmd CommandButton ou button, ...

Variables :
préfixage :
l Locale
p Parametre
m Variable de la form
g Variable globale (Public dans un module)
Ensuite, les noms doivent correspondre à l'usage qui en est fait.

Penses aussi à indenter ton code, il sera encore plus lisible.

Limites le plus possible la portée de tes variable, car sinon, tu pourrais avoir un comportement incohérent sans le vouloir.

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---