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

XL 2016 message d'erreur plutôt qu'erreur d'exécution

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

halecs93

XLDnaute Impliqué
Bonjour à toutes et à tous,

Il y a quelques temps de cela, grâce à la contribution de plusieurs membres du forum, j'avais réussi à finaliser un ficher pour passer des commandes. Ce fichier fonctionne presque parfaitement. En effet, lorsqu'un utilisateur saisi mal une somme (2?5 au lieu de 2,5 par exemple), le code VBA du fichier plante.

Y aurait-il moyen de prévenir l'utilisateur que sa saisie n'est pas bonne afin qu'il puisse recommencer mais, sans plantage ?

Je joins le fichier.

Un grand merci.

 

Pièces jointes

Hello
il suffit de faire un controle de saisie

ajoutel'évènement _keydown du textbox
VB:
Private Sub TextBox4_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 188 Then KeyCode = 110 'remplacement de la virgule par un point
If KeyCode = 110 Then 'saisie du point
    If InStr(1, Me.TextBox4, ".") <> 0 Then 'il y a déjà un point dans le nombre
        KeyCode = 0
    End If
End If
If Not (KeyCode >= 96 And KeyCode <= 106 Or KeyCode = 110) Then 'si on tape autre chose qu'un chiffre
    KeyCode = 0
End If
End Sub

et modifie l'évènement _change

Code:
Private Sub TextBox4_Change()
'Me.TextBox4 = Replace(Me.TextBox4, ".", Application.DecimalSeparator)
'Me.TextBox4 = Replace(Me.TextBox4, ",", Application.DecimalSeparator)
Me.TextBox5 = CLng(Me.TextBox3) * CDbl(Me.TextBox4)
End Sub
 
Bonjour et merci pour votre réactivité.

Cependant.... une question. Les deux premières lignes de l'évènement change sont précédées maintenant d'un apostrophe...ce qui les transforme en commentaire. Est-ce normal ?
 
Du coup, je me perds un peu.... je ne vois pas où ajouter l'évènement "keydown"
 
par contre.. si tu effaces le textbox 4, alors, oui, il y a un bug

corrige avec ceci
VB:
Private Sub TextBox4_Change()
'Me.TextBox4 = Replace(Me.TextBox4, ".", Application.DecimalSeparator)
'Me.TextBox4 = Replace(Me.TextBox4, ",", Application.DecimalSeparator)
If Me.TextBox3 = "" Then Me.TextBox3 = 0
If Me.TextBox4 = "" Then Me.TextBox4 = 0


Me.TextBox5 = CLng(Me.TextBox3) * CDbl(Me.TextBox4)
End Sub
 
Du coup, je crois avoir trouvé une solution....

Pour la textbox3 :

If Not IsNumeric(Me.TextBox3.Text) Or Not (CLng(Val(Me.TextBox3.Text)) = CDbl(Val(Me.TextBox3.Text))) Then
MsgBox "Veuillez saisir un chiffre entier pour la quantité.", vbExclamation, "Erreur de saisie"
Me.TextBox3.Text = ""
Exit Sub
End If
quantite = CLng(Val(Me.TextBox3.Text))
prixTotal = prixUnit * quantite
Me.TextBox5.Text = Format(prixTotal, "0.00")

et pour Textbox4 :

Private Sub TextBox4_Change()
If Not IsNumeric(Me.TextBox4.Text) Then
MsgBox "Veuillez saisir un nombre valide pour le prix unitaire.", vbExclamation, "Erreur de saisie"
Me.TextBox4.Text = ""
Exit Sub
End If
prixUnit = CDbl(Me.TextBox4.Text)
Me.TextBox4 = Replace(Me.TextBox4, ".", Application.DecimalSeparator)
Me.TextBox4 = Replace(Me.TextBox4, ",", Application.DecimalSeparator)
Me.TextBox5 = CLng(Me.TextBox3) * prixUnit
End Sub
 

Pièces jointes

- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…