Recupération de valeur: Condition combobox et CommandButton
bonjour au forum
bonjour à tous...Il y a de cela un moment que j'essaie de trouver une solution mais helas.
après avoir créer un userform2 dans le lequel se trouve une combobox, un CommandButton et un texte box, je cherche maintenant à les accorder tous les trois pour calcul.
je m'explique; la combobox contient des éléments (exemple:machine, procédé) que l'utilisateur doit choisir(1choix). et j'aimerai maintenant créer un code sous CommandButton qui lors de sa sélection me permettra en fonction du choix que l'utilisateur aura fait de calculer leur capabilité et d'afficher le résulat dans le textbox. Pour chaque choix fait, calculer et afficher le résultat.
et le sécond soucis est que les données dont j'ai besoin pour le calcul (Capabilité) se trouve dans un autre userform1 comment les appélés dans ce second userform.
merci de bien vouloir m'aider svp! et merci d'avance.
Bonjour Bandon,
Merci de relire le point 6 de
https://forum.excel-pratique.com/viewtopic.php?f=2&t=13
6. Pensez à joindre un fichier pour faciliter la compréhension du problème et augmenter les chances de vous faire aider (taille maximale autorisée : 1mo). N'oubliez pas de retirer toutes les informations confidentielles avant de joindre votre fichier !
A+
Ok pas de soucis,
j'ai vraiment pas fait grande chose et je vous serai vraiment reconnaissant de jeter un coups d'oeil.
Bonjour,
Code à mettre dans le module de l'UserForm "UserForm1" après avoir supprimé l'existant :
Private Sub MoyenneCible_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Controle MoyenneCible, KeyAscii
End Sub
Private Sub DispersionCible_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Controle DispersionCible, KeyAscii
End Sub
Private Sub CommandButton3_Click()
Resultat.Show
End Sub
Private Sub CommandButton1_Click()
Frame2.Visible = True
End Sub
Private Sub Enregistrer_Click()
Frame2.Visible = True
End Sub
Private Sub Frame1_Click()
End Sub
Private Sub UserForm_Click()
Frame2.Visible = True
End Sub
Sub Controle(Txt As MSForms.TextBox, ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 44, 46 'point ou virgule
KeyAscii = Asc(Format(0, "."))
If InStr(Txt.Text, Format(0, ".")) <> 0 Then KeyAscii = 0 'séparateur unique
Case 48 To 57 'chiffres
Case Else: KeyAscii = 0 'tous les autres caractères interdits
End Select
End Sub
Code à mettre dans le module de l'UserForm "Resultat" :
Private Sub SUIVANT_Click()
'Recuperer les valeurs entrer dans le userform 1: moyenne et dispersion cible
Select Case ComboBoxCa.Text
Case "MACHINE"
'Calcul des capabilités
TextBox1.Value = (Val(Userform1.MoyenneCible.Text) + 2 * Val(Userform1.DispersionCible.Text)) - (Val(Userform1.MoyenneCible.Text) - 2 * Val(Userform1.DispersionCible.Text))
Case "PROCEDE"
TextBox1.Value = 10 * Val(Userform1.MoyenneCible.Value)
End Select
End Sub
Private Sub UserForm_Initialize()
Dim I As Long
For I = 0 To 1: ComboBoxCa.AddItem Worksheets("données").Range("W6").Offset(I, 0).Value: Next I
End Sub
Bonjour @Theze, une fois encore merci pour ton aide.
le programme passe implacablement. mais je suis posé cette question au cas ou. Et si je devrais entrer uniquement que des nombres entiers positif compris entre 2 et 25 par exemple. merci encore pour tout
Code a rajouter au code que je t'ai précédemment donné :
Private Sub DispersionCible_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ValMinMax DispersionCible, Cancel
End Sub
Private Sub MoyenneCible_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ValMinMax MoyenneCible, Cancel
End Sub
Sub ValMinMax(Txt As MSForms.TextBox, ByVal Cancel As MSForms.ReturnBoolean)
If Txt.Text <> "" Then
If CInt(Txt.Text) < 2 Or CInt(Txt.Text) > 25 Then
Txt.SelStart = 0
Txt.SelLength = Len(Txt.Text)
Cancel = True
MsgBox "La valeur doit être située entre 2 et 25 !"
End If
End If
End Sub
J'ai oublié concernant les entiers, remplaces la Sub "Controle" précédente par celle-ci qui interdit les décimales :
Sub Controle(Txt As MSForms.TextBox, ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 To 57 'chiffres
Case Else: KeyAscii = 0 'tous les autres caractères interdits
End Select
End Sub
bonsoir @Theze
Stp, je ne comprends pas. Qu'es ce que tu entends par "rajouter au code précédent" et pour les entiers, je veux dire si je veux entrer par exemple la moyenne cible en décimal et la dispersion en entier uniquement mais entre 2 et 25
Bonjour,
je ne comprends pas. Qu'es ce que tu entends par "rajouter au code précédent"
Alors, remplaces tout le code de l'UserForm1 par celui-ci :
Private Sub MoyenneCible_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 44, 46 'point ou virgule
KeyAscii = Asc(Format(0, "."))
If InStr(MoyenneCible.Text, Format(0, ".")) <> 0 Then KeyAscii = 0 'séparateur unique
Case 48 To 57 'chiffres
Case Else: KeyAscii = 0 'tous les autres caractères interdits
End Select
End Sub
Private Sub DispersionCible_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With DispersionCible
If .Text <> "" Then
If CInt(.Text) < 2 Or CInt(.Text) > 25 Then
.SelStart = 0
.SelLength = Len(.Text)
Cancel = True
MsgBox "La valeur doit être située entre 2 et 25 !"
End If
End If
End With
End Sub
Private Sub DispersionCible_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 To 57 'chiffres
Case Else: KeyAscii = 0 'tous les autres caractères interdits
End Select
End Sub
Private Sub CommandButton3_Click()
Resultat.Show
End Sub
Private Sub CommandButton1_Click()
Frame2.Visible = True
End Sub
Private Sub Enregistrer_Click()
Frame2.Visible = True
End Sub
Private Sub Frame1_Click()
End Sub
Private Sub UserForm_Click()
Frame2.Visible = True
End Sub
merci énormément @Theze, tu m'as été d'une grande aide.
Bonjour,
Content de t'avoir aidé