Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Traiter un % pourcentage dans une textbox ?

  • Initiateur de la discussion Initiateur de la discussion Charly88
  • 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 !

Charly88

XLDnaute Occasionnel
Bonsoir, je pense pour m'autodiagnostiquer un ramolissement cérébral sévère. Depuis plus d'1 h je passe en revue des dizaines de fils sans comprendre ce qu'il est possible ou non de faire.

Mon problème me semble simple, j'affiche dans une textbox le contenu d'une cellule potentiellement au format pourcentage et / ou je voudrais laisser la liberté à l'utilisateur de saisir des '0,99%' si ça lui chante plutôt que de "l'obliger" à écrire 0,0099, moins naturel...

Comment interpréter correctement une textbox contenant le caractère '%' ?

Val(); cdbl; formatpourcent... Je les ai tous vu et / ou tester avec les pieds sans résultats.

Enorme merci à quiconque me donnerait une solution ou on contraire me confirme que c'est une recherche sans issue.
 
Re : Traiter un % pourcentage dans une textbox ?

Salut Charly,
personnellement je fonctionne ainsi :

Code:
Private Sub TextBox1_AfterUpdate()
On Error GoTo Fin
If TextBox1.Value = "" Then
    TextBox1.Value = Format(CDbl(0), "0.0%")
Else
    TextBox1.Value = Format(CDbl(TextBox1.Value / 100), "0.0%")
End If
Fin:
On Error GoTo 0
End Sub
Code:
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = Len(Me.TextBox1)
End Sub
Code:
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = Len(Me.TextBox1)
End Sub

Bonne continuité,

Étienne
 
Re : Traiter un % pourcentage dans une textbox ?

Bonjour Charly,

Y'a surement mieux mais une piste :
Code:
Dim MyVal As Double
    If IsNumeric(TextBox1) Then
        MyVal = TextBox1
    Else
        If Right(TextBox1, 1) = "%" Then
            If IsNumeric(Trim(Left(TextBox1, Len(TextBox1) - 1))) Then
                MyVal = Trim(Left(TextBox1, Len(TextBox1) - 1)) / 100
            Else
                MsgBox "Entrée non conforme"
            End If
        End If
    End If

Cordialement

KD

Edit : Bonjour Etienne
 
Re : Traiter un % pourcentage dans une textbox ?

Bonjour Etienne, si j'interprète bien bien ton code (les parties 2 et 3 me sont obscures), tu réponds au problème classique inverse : comment afficher un % dans une textbox.
Mon problème c'est comment faire pour le traiter quand il y ait... En tentant un fichier exemple (en PJ), j'ai trouvé une solution qui ne me plaît qu'à moitié à coup de replace. Il faut maintenant que je spécifie que la division ne se fait que s'il y avait le sigle "%" au départ.
 

Pièces jointes

Re : Traiter un % pourcentage dans une textbox ?

Salut Charly, KenDev, le forum,
à mon sens, une fois que l'info se trouve dans un textbox, on ne peut plus rien faire à moins de déclencher un nouvel évènement pour pouvoir donner un nouveau format au contenu du textbox. Il y a quelques possibilités pour déclencher du évènementiel (ex : Change - AfterUpdate - BeforeUpdate - MouseDown).

Sinon, une autre possibilité serait de limiter les caractères possibles que l'utilisateur peut taper, mais encore là, ça ne répondrait pas à ton besoin.

Je passe donc la main à nos experts en te souhaitant une réponse plus concluante que la mienne !

Bonne journée,

Étienne
 
Re : Traiter un % pourcentage dans une textbox ?

Merci à tous pour votre aide et commentaires. Ci-joint un fichier avec la solution que je retiens pour le moment.

L'initialize permet de restituer mon environnement (je récupère mes infos d'une listview via .text d'où les % rapidement apparus).

Ensuite, après un nettoyage standard espace et . , le bouton cherche s'il y a un '%' et applique alors une division par 100...
Code:
Private Sub CommandButton1_Click()
TextBox1.Value = Replace(TextBox1.Value, " ", "")
TextBox1.Value = Replace(TextBox1.Value, ",", ".")

If InStr(TextBox1.Value, "%") > 0 Then
    TextBox1.Value = Replace(TextBox1.Value, "%", "")
    If Not IsNumeric(TextBox1.Value) Then
        MsgBox "Erreur de format"
        Exit Sub
    End If
    ActiveCell.Value = Val(TextBox1.Value) / 100
Else
    If Not IsNumeric(TextBox1.Value) Then
        MsgBox "Erreur de format"
        Exit Sub
    End If
    ActiveCell.Value = TextBox1.Value
End If

Unload UserForm1
End Sub


Cela me paraît assez lourdingue mais cela semble fonctionner dans tous les cas de figure...
 

Pièces jointes

Dernière édition:
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…