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

  • Initiateur de la discussion Initiateur de la discussion AIXELS
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

AIXELS

XLDnaute Occasionnel
Supporter XLD
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.
 
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:
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

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

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.
 
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 €.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour