"Erreur de compilation: incompatibilité de type"

Signaler
Messages postés
2
Date d'inscription
mardi 21 février 2012
Statut
Membre
Dernière intervention
21 février 2012
-
 Utilisateur anonyme -
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

Messages postés
14764
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
151
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

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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)

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
Messages postés
2
Date d'inscription
mardi 21 février 2012
Statut
Membre
Dernière intervention
21 février 2012

@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 :/

....!

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.