"Erreur de compilation: incompatibilité de type"

cs_Negarev Messages postés 2 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 21 février 2012 - 21 févr. 2012 à 18:58
 Utilisateur anonyme - 22 févr. 2012 à 02:43
Bonjour,
Je suis étudiant et comme exercice, je dois concevoir un userform avec un bouton et un textbox. Le bouton sert à doubler la valeur dans le textbox. La valeur entrée dans le textbox doit être un entier sinon on a un message d'erreur (je sais, cet userform ne sert à rien mais c'est un exercice).

Donc, voici ce que j'ai écrit comme code:


Private Sub CommandButton1_Click()

If TextBox1.Text Is numerical = True Then
TextBox1.Text = TextBox1.Text * 2
Else: msgbox(Prompt, vbOKOnly, [Le nombre doit être entier]) As VbMsgBoxResult
End If

End Sub

Et lorsque j'essaie de le lancer j'ai le message d'erreur que j'ai mis en titre de mon sujet; ça bloque à la première ligne de code.

Vous l'aurez deviné en constatant la simplicité de l'exercice; c'est vraiment un cours de débutant et j'ai du mal à comprendre la logique de VBA, donc si vous pouviez m'expliquer en détail, ça m'arrangerait beaucoup.

Merci d'avance :)

Negarev

7 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
21 févr. 2012 à 20:18
Bonjour,

TextBox1.Text Is numerical = True

D'où tu sors ton "Is Numerical" ?
Essayes plutôt IsNumeric

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
Utilisateur anonyme
21 févr. 2012 à 20:22
Bonjour,

Voici donc ton code testé sommairement et qui semble convenir au cahier de charges que je pense avoir deviné, à savoir qu'il faut doubler seulement un entier. Suivront quelques commentaires et explications. J'ai laissé les instructions originales en commentaires.

Private Sub CommandButton1_Click()
If IsNumeric(TextBox1.Text) True And Int(TextBox1.Text) TextBox1.Text Then
'If TextBox1.Text Is numerical = True Then
TextBox1.Text = TextBox1.Text * 2
Else
dim attention as VbMsgBoxResult
attention = msgbox("Le nombre doit être entier", vbOKOnly, "Erreur")
 'msgbox(Prompt, vbOKOnly, [Le nombre doit être entier]) As VbMsgBoxResult
End If

End Sub


If IsNumeric(TextBox1.Text) True And Int(TextBox1.Text) TextBox1.Text Then


Comme tu vois, la fonction VBA pour vérifier si une chaîne de caractères quelconque est numérique estg isnumeric("la chaîne de caractères entre guillemets") ou isnumeric(le nom de variable sans guillemets) ou isnumeric(textbox.text) sans guillemets

La deuxième condition sert à vérifier si le nombre est entier. INT(nombre) tronque SANS ARRONDIR et, donc retourne l'entier sans la partie décimale. Donc INT(3.2) en Excel aanglais ou INT(3,2) en Excel Français donne donc 3 et pas 3,0. Pour que la condition soit évaluée à TRUE (vrai), les 2 conditions doivent être TRUE.

attention = msgbox("Le nombre doit être entier", vbOKOnly, "Erreur")


Dans les fichiers d'aide de VB, VB.vet et VBA le couple [] encadre des paramètres optionnels et non pas forcément du texte. Dans le cas qui nous occupe, le Prompt représente ton message que tu peux désigner comme une variable dans ce genre-là :
message = "Le nombre doit être entier"
entête = "Erreur"
où entête est le Title du fichier d'aide, soit le message qui apparaît dans le haut de la boîte de dialogue

Les deux instructions suivantes sont donc syntaxiquement équivalentes :

attention = msgbox("Le nombre doit être entier", vbOKOnly, "Erreur")


attention = msgbox(message", vbOKOnly, entête)


Pour ma part, je préfère utiliser les variables. C'est beaucoup plus simple quand le message doit faire plus d'une ligne.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 févr. 2012 à 21:31
Salut

En tapant "saisie numérique" dans la recherche de source en .Net, tu as des exemples.
Le forum n'est là qu'en cas de problème insurmontable; il te faut faire les recherches toi même avant.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Utilisateur anonyme
21 févr. 2012 à 22:19
Bonjour,
Au lieu de vérifier si ton texte est numérique manuellement:
    
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If Char.IsNumber(e.KeyChar) False Then e.Handled True
End Sub
Private Sub CommandButton1_Click()
TextBox1.Text = val(TextBox1.Text) * 2
end sub



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0

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

Posez votre question
cs_Negarev Messages postés 2 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 21 février 2012
21 févr. 2012 à 22:20
@cmarcotte et @NHenry: Merci beaucoup! Maintenant ça marche si on tape un entier dans le textbox mais ça renvoie encore une erreur identique en cas de nombre non-entier...

@jack: désolé, je débute et je ne savais vraiment pas quoi faire d'autre... Et je n'ai pas compris ce que tu me suggère de faire :/
0
Utilisateur anonyme
21 févr. 2012 à 23:46
....!
0
Utilisateur anonyme
22 févr. 2012 à 02:43
Bonsoir,

Si tu es vraiment en VBA (Excel, Word, PowerPoint, Publisher, CorelDraw (je pense) etc.) et que tu as copié Exactement ma procédure, tu ne devrais pas avoir d'horreur. J'ai fait la mienne dans Excel, mais elle devrait être la même dans un autre programme Office. Si cela persiste et que ce n'est pas dans Excel, dis-moi le programme et la version que tu utilises.

Toujours si tu es vraiment en VBA les deux autres réponses me semblent plus porter sur VB.net

Si tu n'est pas en VBA, mais en VB.net, les deux autres réponses sont un bon début. Jack parle de chercher dans ce site en utilisant le moteur de recherche du site.
0
Rejoignez-nous