Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/08/2011, 13h33   #1
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
Par défaut Incompatibilité de type dans usf

Bonjour,

j'ai un usf avec de nombreuse textbox, et je ne sais pas pourquoi quand je m'amuse à cliquer d'une textbox à une autre ma macro s'arrête et me mets incompatibilité de type

Voici le code de la textbox lors que ma macro bogue :
Code :
1
2
3
4
5
6
7
8
9
10
11
Private Sub TextBox_ht_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    'Si la valeur de textbox_ht est un nombre sans virgule alors on rajoute la virgule et deux 0
    Dim vResult_ht As Variant, montant As String
    
    vResult_ht = Replace(TextBox_ht.Value, ".", ",")
    vResult_ht = CDbl(vResult_ht) 'arrêt du code ici
    TextBox_ht = IIf(IsNumeric(vResult_ht), Format(vResult_ht, "###0.00"), "")
    TextBox_ht = Replace(TextBox_ht, ",", ".")
        
End Sub
lorsque je passe de la première à la seconde et inversement (mon code pour la seconde textbox et le même avec vResult_ttc au lieu de vResult_ht et textbox_ttc à la place de textbox_ht)
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 13h52   #2
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 310
Points : 2 667
Points : 2 667
Bonjour,
Le message d'erreur indique un problème de type de variable incompatible avec la fonction cdbl. Soit parce-qu'il n'y a pas de valeur dans TextBox_ht et alors par défaut c'est un type String soit parce-que l'on a tapé une chaîne de caractères
Fais précéder par la fonction val
Code :
vResult_ht = CDbl(Val(vResult_ht))
et le problème devrait disparaître.
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 13h35   #3
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
Effectivement mon problème disparait mais il en pose d'autres;

Le premier c'est que si je tape un nombre à virgule par exemple 15.2 il est transformé en 15.00 au lieu de 15.20 (ce que j'ai avant l'ajout de Val)

Le second c'est que je peux avoir un champ vise (notamment le second) et là je me retrouve avec 0.00 ce qui dans le cadre d'utilisation de mes textbox est une erreur car le montant ht y es quasiment toujours mais pas le montant ttc.

Donc c'est pas résolu.
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 14h13   #4
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 310
Points : 2 667
Points : 2 667
Bonjour,
Ton problème vient du fait que tu utilises une variable de type String et que le séparateur décimale est "," ou "." suivant la région et donc dans un cas, tu auras bien la décimale et dans l'autre pas et c'est logique.
Chez moi "12.5" donne 12.5 avec la fonction val et "12,5" donne 12
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 14h37   #5
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
D'accord mon séparateur de décimale est fixé et c'est le point. Je peux toujours passé sur une virgule mais c'est pas le problème.

Le problème c'est que je complète mais montant avec un ou deux zéro selon les cas et là ce qui doit le faire ne passe pas, à mon avis, à cause du val. Bien entendu je peux me tromper mais comme ça marché avant l'ajout de val et que je n'ai fais que cet ajout je pense que cela vient de là.


Je viens de tester avec la virgule et le résultat est le même qu'avec le point que la valeur soit du type xx,xx ou yy.yy je me retrouve avec xx.00 ou yy.00 alors que je cherche à retomber sur ma valeur yy.y0 dans le cas ou ma valeur ressemble à ça :15.2 qui à la suite du la sortie de ma textbox ressemble à ça :15.20

Apparemment en faisant ça j'ai presque ce que je cherche
Code :
1
2
3
vResult_ht = CDbl(Val(TextBox_ht.Value))
    TextBox_ht = IIf(IsNumeric(vResult_ht), Format(vResult_ht, "###0.00"), "")
    TextBox_ht = Replace(TextBox_ht, ",", ".")
Je dis presque car j'ai toujours le 0.00 si je tape rien. S'il y a un moyen que cela marche sans le 0.00 je prends sinon on essayera la ruse avec une variable qui le récupère et le supprime (dommage qu'il soit affiché)
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 16h35   #6
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 310
Points : 2 667
Points : 2 667
Bonjour,
Citation:
Envoyé par Chicard Voir le message
D'accord mon séparateur de décimale est fixé et c'est le point. Je peux toujours passé sur une virgule mais c'est pas le problème.
Le problème c'est que je complète mais montant avec un ou deux zéro selon les cas et là ce qui doit le faire ne passe pas, à mon avis, à cause du val. Bien entendu je peux me tromper mais comme ça marché avant l'ajout de val et que je n'ai fais que cet ajout je pense que cela vient de là.
Je viens de tester avec la virgule et le résultat est le même qu'avec le point que la valeur soit du type xx,xx ou yy.yy je me retrouve avec xx.00 ou yy.00 alors que je cherche à retomber sur ma valeur yy.y0 dans le cas ou ma valeur ressemble à ça :15.2 qui à la suite du la sortie de ma textbox ressemble à ça :15.20
Désolé mais les deux zéro qui apparaissent viennent de ton formatage
Code :
TextBox_ht = IIf(IsNumeric(vResult_ht), Format(vResult_ht, "###0.00"), "")
et pas de la fonction Val
Si ta solution initiale te donnait satisfaction sauf quand le TextBox était vide, je crois qu'il faut alors vérifier simplement si celui-ci est vide et ne pas passer par l'étape de conversion dans ce cas là.

Citation:
Envoyé par Chicard Voir le message
Apparemment en faisant ça j'ai presque ce que je cherche
Code :
1
2
3
vResult_ht = CDbl(Val(TextBox_ht.Value))
    TextBox_ht = IIf(IsNumeric(vResult_ht), Format(vResult_ht, "###0.00"), "")
    TextBox_ht = Replace(TextBox_ht, ",", ".")
Je dis presque car j'ai toujours le 0.00 si je tape rien. S'il y a un moyen que cela marche sans le 0.00 je prends sinon on essayera la ruse avec une variable qui le récupère et le supprime (dommage qu'il soit affiché)
Je crois que l'on est bien loin de ton problème initial qui était une erreur provoquée par une conversion de String.

Je pense qu'il faudrait que tu ouvres un nouveau sujet en expliquant ce que tu veux faire avec ce TextBox. Dans le cas contraire, tu pars vers une aventure de plusieurs heures à coup de questions/réponses en plaçant des rustines.

Avant, je te conseille la lecture de ce Didacticiel de Didier Gonard qui peut-être t'inspirera.
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 17h12   #7
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
Le fait d'avoir .00 vient de mont formatage quand une valeur et rentrer et dans ce sens la il me donne entière satisfaction.

Le fait de me retrouver avec 0.00 dans mon textbox quand j'en change ne c'est produit que pas l'ajout de val qui interprète le vide de mon string en valeur nulle c'est à dire 0. A la suite de cela mon formatage fait ce pourquoi je l'ai mis et complète les décimales de ma valeur.

Mais bon l'essentiel et de ne plus avoir une erreur lors de l'exécution.

Didacticiel déjà lu.
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 17h21   #8
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 310
Points : 2 667
Points : 2 667
Bonjour,
Citation:
Envoyé par Chicard Voir le message
Le fait d'avoir .00 vient de mont formatage quand une valeur et rentrer et dans ce sens la il me donne entière satisfaction.
Le fait de me retrouver avec 0.00 dans mon textbox quand j'en change ne c'est produit que pas l'ajout de val qui interprète le vide de mon string en valeur nulle c'est à dire 0. A la suite de cela mon formatage fait ce pourquoi je l'ai mis et complète les décimales de ma valeur.
Mais bon l'essentiel et de ne plus avoir une erreur lors de l'exécution.
Didacticiel déjà lu.
Comme je l'ai écrit plus haut, repose ta question en expliquant ce que tu veux en final.
Cas n° 1 quand le TextBox est rempli (avec un nombre entier, une décimale, voir deux)
Cas n° 2 quand le TextBox est vide.
Tout est possible en informatique, c'est une question de temps et d'argent. Le tout est de bien exprimer ses besoins.
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 10h46   #9
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
Juste pour dire que j'ai ce que je veux grâce à un if then else.

Merci
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h40.


 
 
 
 
Partenaires

Hébergement Web