Utilisation de CInt pour récupérer des nombres

Bonjour à tous,

Je désire récupérer dans une feuille des valeurs qui se trouvent dans des textbox. Pour être sur que ces valeurs soient des nombres j'utilise le bout de code suivant

        Sheets("feuille").Cells(6, 5) = CInt(usf.TextBox1)

Pas de problème sauf si le textbox est vide, ce que je comprends. Je pourrais dans ce cas y mettre un "0" mais je voudrais éviter
Alors comment obtenir également une cellule vide dans ma feuille quand le textbox est lui même vide

Merci et bonne fin de journée

Bonjour Jacky

En utilisant IIF()

Sheets("feuille").Cells(6, 5) = IIf(usf.TextBox1 = "", "", CInt(usf.TextBox1))

Attention !
CInt() renvoie une valeur entière du nombre
https://excel-pratique.com/fr/fonctions-vba/cint-clng

Bonjour mon cher JExcel2fr,

Quel type intelligent et perspicace cet ami forumeur
Mais pourquoi n'y ai je pas pensé à cette astuce tellement évidente et connue, je dois être un peu fatigué bien qu'hier c'était le 1er mai, donc fête du travail, donc repos complet .......

Redevenons sérieux
Je te remercie de m'avoir rapeller l'utilisation de la fonction "Iff"

Attention !
CInt() renvoie une valeur entière du nombre

pas de problème, je sais et c'est ce que je veux

Au plaisir mon cher

Bonjour,

Attention, IIf teste les 2 propositions. (ou plutôt, "évalue")

Donc si le Txtbox est vide, il y aura une erreur...

A manipuler avec précaution...

Bonne fin d'apm

Bien vu cousinhub,

En effet si textbox = "" il n'y a pas d'erreur mais il ne se passe rien
A étudier de plus près

Merci

Re-,

euh, si je le fais, j'ai un magnifique :

image

Y'aurait pas un "On Error Resume Next", quelque part?

Re-,

Perso, j'opterais pour un truc dans le genre :

If IsNumeric(Me.TextBox1) Then x = CInt(Me.TextBox1)

@+

Evidemment, comme je peux être étourdi en ce moment ... j'ai bien un "On Error Resume Next"

Par contre j'ai utilisé une méthode qui ne me plait pas beaucoup mais à défaut ça semble fonctionner

        If usf.TextBox1 = "" Then Sheets("feuille").Cells(6, 5) = ""
        Sheets("feuille").Cells(6, 5) = CInt(usf.TextBox1)

Qu'en penses tu ?

Re-,

Je pense (avec ton dernier code), que tu vas avoir une erreur si la TxtBox est vide (si bien sûr, tu te décides à enlever ce "On Error...", qui ne sert à rien, hormis une solution de facilité)

Regarde ma dernière, auquel tu peux ajouter :

If IsNumeric(Me.TextBox1) Then Sheets("feuille").Cells(6, 5) = CInt(Me.TextBox1) Else Sheets("feuille").Cells(6, 5) = ""

Bonjour Jacky, JExcel2fr, Cousinhub,

La formule de JExcel2fr partait d'une bonne intention.

Il manquait simplement un 0 en texte sur la dernière partie.

Sheets("feuille").Cells(6, 5) = IIf(usf.TextBox1 = "", "", CInt("0" & usf.TextBox1))

Note: le Textbox1 ne doit recevoir qu'une donnée numérique ou rien. Et être formatée pour cela en conséquence dans l'userform.

Bonjour XCellus

C'est parfait et c'est plus propre que ce que proposais

Mais pourquoi ce "0" en face du texte , je ne comprebnds pas

Merci à vous tous

Re-,

Quelle que soit la solution que tu vas adopter, pense à supprimer "On Error Resume Next" de tes codes.

C'est une instruction "de fainéant", qui encourage la facilité, sans compréhension du code couvert par elle.

Mais c'est toi qui vois...

Bon courage

Suite,

Mais pourquoi ce "0" en face du texte , je ne comprends pas

CInt en Vba sert à la conversion d'un nombre sous forme textuel en une valeur numérique entière. Or si tu n'as pas de nombre textuel à convertir cela créera une erreur. Par exemple dans un textbox un espace ou le vide.

Essaye sur une cellule d'une feuille d'utiliser la formule Cnum d'abord avec un nombre textuel, puis ensuite un espace seul, puis enfin avec deux double guillemets pour le vide. Et vois le résultat.

Après pour les deux derniers essais ci-dessus rajoute un "0". Donc Cnum("0" & " ") puis Cnum("0" & ""). Et compare.

Pour ton textbox s'il existe un nombre textuel. Avec un 0 devant cela ne changera pas ton nombre après conversion "0" & "1234" donnera toujours le nombre 1234. Si le texbox est vide le code vba de conversion ne génèra pas de bug.

Bonjour XCellus,

parfait, j'ai suivi tes propositions et de ce fait ai très bien compris d'une part l'utilisation du "0" &, et d'autre part la différence entre "" et" "
mais je me pose toujours cette question un peu hard : pourquoi "0" & , et pas autre chose ..... mais quoi.
Je suis un emm..... n'est ce pas, mais c'est à la fois une qualité et un défaut que de vouloir tout comprendre

Je te remercie beaucoup et je remercie également tous les autres intervenants
Bon week-end à tous

Bonjour Jacky, le Fil,

pourquoi "0" & , et pas autre chose ..... mais quoi.

Parce qu'un zéro placé au début d'un texte, qu'il soit suivi de chiffres textuels, d'un vide ou d'un espace sera le premier terme accepté par VBA pour continuer la procédure de conversion. Le débogueur d'Excel contrôle que le code Inscris est conforme à l'utilisation de Cint. Or si le caractère présent dans ton textbox à la lecture de la double condition IIf ne commence pas par un chiffre le code stoppera.

Tout en ne modifiant pas la conversion en numérique , s'il existe des chiffres après. De plus s'il était placé après, tes chiffres seraient multipliés par 10.

Évidemment ton textbox ne doit pas comporter de lettres.

Tu peux tester d'autres caractères en début de texte si le cœur t'en dit... Sinon clôre le sujet.

Encore merci X Cellus

Rechercher des sujets similaires à "utilisation cint recuperer nombres"