Erreur 13 type imcompatible

liondes Messages postés 70 Date d'inscription samedi 21 juillet 2012 Statut Membre Dernière intervention 3 mars 2015 - 2 sept. 2010 à 00:37
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 4 sept. 2010 à 21:24
Salut mes frères

Private Sub Text15_KeyUp(KeyCode As Integer, Shift As Integer)
If Text15.Text "" Or IsNumeric(Text15.Text) False Or Text15.Text = 0 Or CDbl(Text15.Text) > CDbl(prod(3).Text) Then
MsgBox "Attention le Nombre Saisie comme quantité est soit : " & vbCrLf & "* Une chaine vide" & vbCrLf & "* Valeur Nulle = 0" & vbCrLf & "* De type non numérique" & vbCrLf & "* Une valeur supperieure à celle de la qté en stock", vbInformation, "Attention !"
Text15.SetFocus
Else
dfact(1).Text = fact(0).Text
dfact(2).Text = prod(0).Text
dfact(3).Text = prod(1).Text
dfact(4).Text = prod(2).Text
dfact(5).Text = Text15.Text
dfact(6).Text = CDbl(dfact(5)) * CDbl(dfact(4).Text)
End If
End Sub


On saisissant une lettre ou un vide dans le textbox text15 qui est équivalant a la variable qté de type double le message d'erreur suivant s'affiche
"erreur d'exécution 13 'type incompatible'"
on cliquant sur débogage la ligne sélectionnée est celle de condition IF.....
SVP aidez moi à résoudre ce problème c'est urgent
merci d'avance

6 réponses

NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
2 sept. 2010 à 04:59
c'est normal que ça bugge car c'est pas possible de transformer un type string en double...
Explication:Quand tu tapes 'a',Text15.Text=a or a est un string et 0 est un double donc impossible de faire la comparaison d'où le bug.
Tu dois donc utiliser la fonction Val,ta condition devient donc:
If Text15.Text "" Or IsNumeric(Text15.Text) False Or Val(Text15.Text) = 0 Or Val(Text15.Text) > Val(prod(3).Text)

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 sept. 2010 à 09:41
Impossible de faire

CDbl(Text15.Text)

si ton IsNumeric se plante.... c'est bien a cela que sert ce test.

Impossible, donc de mettre tous ces tests dans une même condition.

Je ne suis pas non plus fan d'une action effectuée au cours du changement de valeur du textbox, surtout si tu affiches un MsgBox, riend deplus agacant que de se manger des MsgBox pendant la saisie !

attends plutot le Validate (ou le LostFocus) :

Faire plutôt :

Private Sub Text15_Validate(Cancel As Boolean)
Dim nValue As Double
    If IsNumeric(Text15.Text) Then
        nValue = CDbl(Text15.Text)
    Else
        nValue = Val(Text15.Text)
    End If
    Stop
    If nValue <= 0 Or nValue > CDbl(prod(3).Text) Then
        MsgBox "Attention le Nombre Saisie comme quantité est soit : " & vbCrLf & "* Une chaine vide" & vbCrLf & "* Valeur Nulle = 0" & vbCrLf & "* De type non numérique" & vbCrLf & "* Une valeur supperieure à celle de la qté en stock", vbInformation, "Attention !"
        Cancel = True
    Else
        dfact(1).Text = fact(0).Text
        dfact(2).Text = prod(0).Text
        dfact(3).Text = prod(1).Text
        dfact(4).Text = prod(2).Text
        dfact(5).Text = Text15.Text
        dfact(6).Text = CDbl(dfact(5)) * CDbl(dfact(4).Text)
    End If
End Sub



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 sept. 2010 à 10:00
Bonjour Renfield

C'est quoi la difference entre val et cdbl
If IsNumeric(Text15.Text) Then
nValue = CDbl(Text15.Text)
Else
nValue = Val(Text15.Text)
End If
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 sept. 2010 à 10:20
CDbl et IsNumeric tiennent compte des parametres regionnaux.
en gros, en france, sur ton poste, pi est

"3,1415926535"

su un poste british, on pourrait avoir :

"3.1415926535"

si IsNumeric décrete que Text15 contient une chaine qui peut etre traduite en une valeur numérique, CDBl fera son job sans générer ton erreur 13.

Val, lui est un peu plus 4x4 ...

Val("3,1415926535") donnerai 3 ...

puisque Val, lui, utilise en entrée un format indépendant des regional settings.

pour résumer, la structure :

If IsNumeric(Text15.Text) Then 
    nValue = CDbl(Text15.Text) 
Else 
    nValue = Val(Text15.Text) 
End If


Permet de placer dans le Double nValue la valeur saisie dans Text15, que l'on ai ou pas respecté les parametres du poste...


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
liondes Messages postés 70 Date d'inscription samedi 21 juillet 2012 Statut Membre Dernière intervention 3 mars 2015 1
4 sept. 2010 à 15:14
merci mes frères tout est rangé
sauffe que pour le code de Renfield le mot clé stop a engendré des problemes mais en l'evitant du code tout marche bien j'ai la doute.
pour ce la je demande de mon frère Renfield de m'expliquer pour qoi le mot stop
merci
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 sept. 2010 à 21:24
il m'a servit a la mise au point du code...

comme son nom l'indique, ca permet de stopper l'execution...

comme un point d'arret.


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Rejoignez-nous