XL 2019 Affichage d'un TextBox en fonction de la valeur d'un autre TextBox

AIXELS

XLDnaute Occasionnel
Bonjour à tous les Amis du Forum.
Je vous demande votre aide pour le problème suivant :
Un textbox dans un Userform est contrôlé dans userform.activate :
Si la valeur du TexteBox8 est supérieure à 0 euros, alors TextBox23 est visible = True
sinon TextBox23.Visible = False
Pour votre info, TextBox8 contient une valeur en euros, Format "##0.00 €"

Code:
     If TextBox8.Value > 0 Then
        TextBox23.Visible = True
    
    Else
        TextBox23.Visible = False
        
    End If
e
Le TextBox23 s'affiche, même si la valeur es égale à 0
Merci pour votre aide.
 

Dranreb

XLDnaute Barbatruc
Remarque : en ajoutant ces deux procédures dans votre UserForm :
VB:
Private Property Get ValTBx(ByVal TBx As MSForms.TextBox) As Variant
   If TBx.Text = "" Then
      ValTBx = Empty
   ElseIf TBx.Text Like "*€" Then
      On Error Resume Next
      ValTBx = CCur(TBx.Text)
      If Err Then ValTBx = 0@
   ElseIf IsDate(TBx.Text) Then
      ValTBx = CDate(TBx.Text)
   ElseIf IsNumeric(TBx.Text) Then
      ValTBx = CDbl(TBx.Text)
   Else: ValTBx = TBx.Text: End If
   End Property
Private Property Let ValTBx(ByVal TBx As MSForms.TextBox, ByVal RHS As Variant)
   If TypeOf RHS Is Range Then RHS = RHS.Value
   Select Case VarType(RHS)
      Case vbEmpty: TBx.Text = ""
      Case vbCurrency: TBx.Text = Format(RHS, "### ### ##0.00 €")
      Case vbDouble, vbDate, vbString: TBx.Text = RHS
      Case Else: MsgBox "Valeur de type " & TypeName(RHS) & _
         " non supportée pour la TextBox " & TBx.Name & ".", vbExclamation
         TBx.Text = ""
      End Select
   End Property
Vous pourriez mettre :
VB:
TextBox23.Visible = ValTBx(TextBox8) > 0
et ne plus jamais rien affecter aux TextBox ni rien en récupérer, mais toujours seulement passer par les ValTBx(TextBox), aussi bien en entrée qu'en sortie. Vous pouvez en effet y affecter quelque chose, RHS (Right Hand Side) représentant l'expression à droite du signe '=' de l'affectation.
 
Dernière édition:

AIXELS

XLDnaute Occasionnel
Remarque : en ajoutant ces deux procédures dans votre UserForm :
VB:
Private Property Get ValTBx(ByVal TBx As MSForms.TextBox) As Variant
   If TBx.Text = "" Then
      ValTBx = Empty
   ElseIf TBx.Text Like "*€" Then
      On Error Resume Next
      ValTBx = CCur(TBx.Text)
      If Err Then ValTBx = 0@
   ElseIf IsDate(TBx.Text) Then
      ValTBx = CDate(TBx.Text)
   ElseIf IsNumeric(TBx.Text) Then
      ValTBx = CDbl(TBx.Text)
   Else: ValTBx = TBx.Text: End If
   End Property
Private Property Let ValTBx(ByVal TBx As MSForms.TextBox, ByVal RHS As Variant)
   If TypeOf RHS Is Range Then RHS = RHS.Value
   Select Case VarType(RHS)
      Case vbEmpty: TBx.Text = ""
      Case vbCurrency: TBx.Text = Format(RHS, "### ### ##0.00 €")
      Case vbDouble, vbDate, vbString: TBx.Text = RHS
      Case Else: MsgBox "Valeur de type " & TypeName(RHS) & _
         " non supportée pour la TextBox " & TBx.Name & ".", vbExclamation
         TBx.Text = ""
      End Select
   End Property
Vous pourriez mettre :
VB:
TextBox23.Visible = ValTBx(TextBox8) > 0
et ne plus jamais rien affecter aux TextBox ni rien en récupérer, mais toujours seulement passer par les ValTBx(TextBox), aussi bien en eJe
Je te joint un fichier, ce sera plus explicite
 

Pièces jointes

  • Fichier_Test.xlsm
    71.8 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour AIXELS, Bernard,

Je ne te comprends pas Bernard, c'est pourtant évident :
VB:
Private Sub UserForm_Activate()
  
    Me.Controls("TextBox10").Value = Format(Sheets("Feuil1").[E25], "0 %") 'Pourcentage de remise
    Me.Controls("TextBox8").Value = Format(Sheets("Feuil1").[F25], "##0.00 €")
    Me.Controls("TextBox9").Value = Format(Sheets("Feuil1").[F26], "##0.00 €") 'Total après remise
    
    TextBox23.Visible = Val(Replace(TextBox8, ",", ".")) > 0
            
End Sub
A+
 

Pièces jointes

  • Fichier_Test.xlsm
    66.1 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
Non, mais il voudrait sans doute que l'UserForm réagisse quand il change les contenus de ses TextBox.
Mais là je n'y comprends rien avec ces noms TextBox8 etc.
Je commenbce à étudier quelque chose avec des: TBxRemise, TBxPrcRem et TBxTotApRemise et une variable globale Private TotalBrut As Currency.
 

job75

XLDnaute Barbatruc
D'abord il faut que cette instruction soit placée après les modifications des TextBox.

Ensuite pour que la fonction Val prenne en compte les décimales il faut remplacer la virgule par le point.

Dz cette manière il y aura affichage si le montant est 0,50 €.
 

Discussions similaires

Statistiques des forums

Discussions
311 734
Messages
2 082 020
Membres
101 872
dernier inscrit
Colin T