Conversion texte en valeur numérique dans textbox

Bonjour à tous,

étant très léger en vba, j'aurai besoin de votre aide pour que lorsque j'entre une valeur (4 chiffres) dans ma textbox2, excel me renvoi en chiffre et non en texte cette valeur.

J'ai regardé différents messages postés ici mais je ne trouve pas mon bonheur.

Je vous remercie à l'avance,

Cordialement,

Jéjé

Bonjour,

Merci d'apporter plus de précisions (et idéalement un classeur pour illustrer votre demande).

Par définition, le contenu d'une textbox est du texte, mais il est possible de le convertir au moment de le "valoriser" dans votre code. En l'absence de précisions, difficile d'en dire plus !

re-bonjour,

en pièce jointe le fichier excel.

merci d'avance,

Cordialement,

jéjé

90suivi-marches.xlsm (353.62 Ko)

Pour commencer, je vous invite à renommer vos Textbox et autres avec des noms plus explicites (de leur contenu)... Ce sera plus simple, y compris pour vous par la suite. De même, un peu d'indentation serait souhaitable pour faciliter la relecture du code !

Concernant votre soucis de conversion, un exemple :

Range("B" & L).Value = TextBox1 * 1 'Transforme le texte en nombre

Bonjour PEDRO,

merci pour votre aide, mais comme vous avez pu le constater, je n'y connais rien.

Pouvez-vous me dire à quel endroit je dois mettre cette ligne : Range("B" & L).Value = TextBox1 * 1 'Transforme le texte en nombre

En vous remerciant à l'avance,

Cordialement,

jéjé

merci pour votre aide, mais comme vous avez pu le constater, je n'y connais rien.

Ce n'est pas l'impression que m'a laissé votre code, qui est plutôt propre !

Selon la textbox concernée, le code est à adapter dans l'éditeur VBA sur la ligne qui sert à affecter la valeur de la textbox du formulaire vers une cellule de la feuille Excel.

A la place du *1, vous pouvez aussi utiliser l'une des fonctions de conversion suivante (selon le type de données) : CSng(), CDbl(), CInt(), CLng()...

https://docs.microsoft.com/fr-fr/office/vba/language/concepts/getting-started/type-conversion-functions

Merci mais cela ne fonctionne que si je crée une nouvelle ligne lorsque je modifie une ligne en passant par le formulaire alors excel me renvoi les données en format texte.

Je vous assure que je n'y connais pas grand chose en vba. En fait j'ai adapté un formulaire pour avoir ce que j'ai mis en pièce jointe.

Cordialement,

jéjé

Merci mais cela ne fonctionne que si je crée une nouvelle ligne lorsque je modifie une ligne en passant par le formulaire alors excel me renvoi les données en format texte.

Cela concerne à priori cet extrait :

For i = 1 To 32
    If Me.Controls("TextBox" & i).Visible = True Then
      ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)
    End If
Next i

Il parcourt les 32 Textbox (i = 1 To 32) pour affecter à nouveau leur valeur à la ligne concernée.

Il vous suffit d'ajouter une instruction If pour appliquer un traitement spécifique à la/les Textbox à convertir. Du genre :

If i = 1 Then ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i) * 1 Else ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)

Bonjour Pedro,

je n'arrive pas à ajouter le code supplémentaire. Pouvez-vous m'aider d'avantage svp ?

Est-ce que je dois écrire ceci :

For i = 1 To 32

If Me.Controls("TextBox" & i).Visible = True Then

ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)

End If

Next i

If i = 1 Then ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i) * 1 Else ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)

End If

End Sub

Merci d'avance,

cordialement,

jéjé

Bonjour,

Je commence à douter que le code soit de votre création, je vous conseille donc très vivement de commencer par vous former un peu à l'utilisation VBA avant de vous lancer tête baissée (au risque de faire des bêtises et de ne pas être autonome sur votre propre travail).

On va commenter un peu plus en détails pour comprendre un peu ce qu'on fait...

For i = 1 To 32
    If Me.Controls("TextBox" & i).Visible = True Then
      ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)
    End If
Next i

i est une variable, que l'on utilise ici au sein d'une boucle. Elle prend donc successivement les valeur 1, puis 2, puis 3 et ce jusqu'à 32 (voir 1ère ligne du code). Le passage à la valeur suivante ce fait grâce à l'instruction Next i (prochain i) qui clôture la boucle.

L'objectif de cette variable est de faire indirectement référence à chaque Textbox (= champ à renseigner dans le formulaire), puisqu'elles sont numérotées de 1 à 32. Si i = 1, Me.Controls("TextBox" & i) correspond par exemple au contenu de TextBox1.

Ce contenu est affecté à la plage qui lui correspond. Celle ci est définie par une feuille (ws dans cet extrait), et une cellule dont on donne l'indice de ligne (variable ligne) et l'indice de colonne (variable i + 1).

Si la TextBox est masquée (propriété .Visible = False) on ne fait rien. C'est l'objet de la structure If Condition(s) Then Instruction(s) End If.

L'objet de ma proposition précédente est d'ajouter une vérification supplémentaire. Vous parlez d'une TextBox dont le contenu est numérique et doit au préalable être converti comme tel. N'ayant toujours pas l'information de la TextBox concernée, je suis partie sur l'exemple de la TextBox1 (à adapter dans le code si besoin) :

If i = 1 Then ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i) * 1 Else ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)

Littéralement :

Si i = 1 Alors

Affecter directement le contenu de la TextBox dans sa colonne dédiée

On pourrait aussi écrire :

If i = 1 Then ws.Cells(ligne, 2) = TextBox1 * 1 Else ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)

Comme cette instruction dépend de la valeur de i, et doit donc être placée au sein de la boucle et non en dehors. De plus, elle se substitue à la ligne qui servait déjà à affecter la valeur de chaque TextBox dans la plage...

For i = 1 To 32
    If Me.Controls("TextBox" & i).Visible = True Then
      If i = 1 Then ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i) * 1 Else ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)
    End If
Next i

Merci Pedro,

je vous l'ai dit je n'ai pas créé ce code mais je l'ai adapté à mon besoin.

J'avais fait ce que vous m'avez suggéré comme code mais j'avais laissé i=1 alors que i devait être égal à 2.

Cela fonctionne parfaitement pour la textbox2.

Par contre comment je modifie le code pour que cela se fasse aussi pour d'autres textbox.

J'ai essayé d'ajouter une ligne en dessous avec if i = 10 then .... cela fonctionne mais la valeur de la textbox2 redevient du texte.

Cordialement,

jéjé

Merci Pedro,

je vous l'ai dit je n'ai pas créé ce code mais je l'ai adapté à mon besoin.

J'avais fait ce que vous m'avez suggéré comme code mais j'avais laissé i=1 alors que i devait être égal à 2.

Cela fonctionne parfaitement pour la textbox2.

Par contre comment je modifie le code pour que cela se fasse aussi pour d'autres textbox.

J'ai essayé d'ajouter une ligne en dessous avec if i = 10 then .... cela fonctionne mais la valeur de la textbox2 redevient du texte.

Cordialement,

jéjé

Si plusieurs TextBox sont concernées, vous pouvez remplacer le If Then Else par :

Select Case i
    Case 2, 10 'etc 
         ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i) * 1
    Case Else 'Autres cas
         ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i) 
End Select

Merci beaucoup,

c'est parfait.

Bonnes fêtes de fin d'année,

Jéjé

Merci beaucoup,

c'est parfait.

Bonnes fêtes de fin d'année,

Jéjé

Merci du retour et d'avoir validé le sujet !

Vous de même.

Rechercher des sujets similaires à "conversion texte valeur numerique textbox"