textbox, comment en recuperer sa valeur numerique Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
chris08
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 7 mars 2013
Version d'Excel : 2007

Message par chris08 » 7 mars 2013, 11:42

Bonjour a tous,

premièrement, je trouve que ces forums sont vraiment la preuve d'une solidarité et heureusement qu'ils sont la.

Ensuite, je suis vraiment novice en la matière mais bon...

Ma difficulté: J'ai réalisé (suite à un tuto vidéo) un formulaire excel composé comme suit:

- un textbox pour la date
- un textbox avec un menu déroulant
- un textbox pour rentrer une valeur numérique (textbox6)
- un textbox pour une autre valeur numérique. (textbox7)

ce que je n'arrive pas a faire c'est que la valeur qui arrive dans ma feuil soit belle et bien une valeur numérique pour pouvoir par la suite additionner 2 cellules. Ce qui ne fonctionne pas sauf si manuellement je clique sur "convertir en nombre"

Je reconnais que j'ai un peu fais un copier coller du tuto, je n'ai aucune maîtrise en ce qui concerne les codes :oops: . Des lors quand je trouve des propositions (un code) et bien je ne sais pas ou le mettre.

Ci dessous l'ensemble de mon code qui compose mon userform:


Private Sub CommandButton1_Click()

Dim ctrl As Control
Dim r As Integer
Dim t As Integer
Dim derligne As Integer

With Worksheets("feuil1")
derligne = .Range("A65536").End(xlUp).Row + 1

For Each ctrl In UserForm1.Controls

r = Val(ctrl.Tag)

If r > 0 Then Feuil1.Cells(derligne, r) = ctrl
Next

End With

TextBox1 = ""
End
End Sub

Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Then KeyAscii = 0
If IsNumeric(Me.TextBox6) Then t = CDbl(Me.TextBox6)
End Sub

Private Sub TextBox7_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

je suppose que ca ne doit pas être très compliquer mais mes connaissances ne sont pas suffisantes.
Un grand merci à celui ou celle qui pourra m'aider.

Chris

ps: plus simple si je mets mon fichier en piece jointe je pense
formulaire compte.xlsm
(189.24 Kio) Téléchargé 348 fois
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'685
Appréciations reçues : 292
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 7 mars 2013, 13:05

Bonjour,

If r > 0 Then Feuil1.Cells(derligne, r) = cdbl(ctrl)

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
chris08
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 7 mars 2013
Version d'Excel : 2007

Message par chris08 » 7 mars 2013, 13:31

Salut Eric,

merci pour votre réponse. j'imagine que ça fonctionne quand on sait ou mettre ce code, mais dans mon cas.... :oops:

J'ai essayé de le mettre ou ça me semblait logique mais rien... je dois toujours modifier ma cellule pour qu'elle devienne un nombre et donc pas d'addition automatique.
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'685
Appréciations reçues : 292
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 7 mars 2013, 15:54

A la place de
If r > 0 Then Feuil1.Cells(derligne, r) = ctrl
mettre
If r > 0 Then Feuil1.Cells(derligne, r) = cdbl(ctrl) si c'est un nombre.
Mais comme tu as fait une usine à gaz pour boucler sur les contrôles et utiliser la même ligne de code il faudrait tester si c'est un texte (laisser tel que), si c'est une date (cdate()) si c'est un nombre (cdbl())
Enfin bref, enlève ton usine à gaz avec les .tag et vu que tu n'as que 4 contrôles avec des types tous différents traites les individuellement.

J'espère que c'est pour apprendre VBA que tu fais ça parce que là c'est plus intéressant de saisir directement sur la feuille.

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
chris08
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 7 mars 2013
Version d'Excel : 2007

Message par chris08 » 8 mars 2013, 15:24

Merci eric,

Ca ne fonctionne malheureusement pas.

Mais en effet c'est pour m'exercer au VBA. Je pense que je vais repartir d'une base plus simple comme vous me le proposez.

Néanmoins, si dans une volonté de me soutenir vous pouvez me proposer le 4 codes nécessaires, je gagnerai du temps.

Si je n'ai pas de piste et bien je vais consulter la rubrique "cours VBA" et faire au mieux.

Encore un grand merci pour votre soutien.

Chris08
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'685
Appréciations reçues : 292
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 8 mars 2013, 23:37

Bonsoir,

Un exemple...
Je t'ai mis un contrôle DateTimePicker que tu vois que ça existe. Je ne m'en suis pas servi car les contrôles calendriers disponibles différent selon les excel.

eric
Classeur3.xlsm
(191.56 Kio) Téléchargé 534 fois
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
chris08
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 7 mars 2013
Version d'Excel : 2007

Message par chris08 » 25 mars 2013, 11:42

Salut,

encore un GRAND GRAND MERCI Eric, j'avance grace a toi.

Je voulais m'excuser d'avoir ete un peu absent du forum mais j'ai eu d'autres choses sur le feu.

Je reviens a mon probleme. ca marche super mais quand je rentre par exemple un montant de 340,45€, il arrondi a 340€
et si le montant est de 340,56€ alors j'obtiens 341€.

Peux tu encore m'aider?

voici le code:

Private Sub CommandButton1_Click()
Dim lig As Long
If IsDate(TbxDate) And (IsNumeric(TbxDébit) Or IsNumeric(TbxCrédit)) Then
lig = Range("A65536").End(xlUp).Row + 1
Cells(lig, "A") = CDate(TbxDate)
Cells(lig, "B") = CbxCateg

If IsNumeric(TbxDébit) Then
Cells(lig, "C") = CLng(TbxDébit)
Cells(lig, "C").NumberFormat = "_-* #,##0.00 [$€-40C]_-;-* #,##0.00 [$€-40C]_-;_-* ""-""?? [$€-40C]_-;_-@_-"

Else
Cells(lig, "D") = CLng(TbxCrédit)
Cells(lig, "D").NumberFormat = "_-* #,##0.00 [$€-40C]_-;-* #,##0.00 [$€-40C]_-;_-* ""-""?? [$€-40C]_-;_-@_-"
End If
TbxDébit = ""
TbxCrédit = ""
Else
MsgBox "Saisie incomplète"
End If
End Sub
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Then KeyAscii = 0
If IsNumeric(Me.TextBox6) Then t = CDbl(Me.TextBox6)
End Sub

Private Sub TextBox7_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub


Private Sub UserForm_Click()

End Sub


ENCORE UN GRAND MERCI.

Chris
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'685
Appréciations reçues : 292
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 25 mars 2013, 12:28

Bonjour,

clng() convertit en entier long, utilise cdbl() qui converti en décimal double.

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
chris08
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 7 mars 2013
Version d'Excel : 2007

Message par chris08 » 25 mars 2013, 14:04

Re Eric,

voila SUPER ca fonctionne a merveille.

Un GRAND GRAND GRAND MERCI A TOI.

Chris
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message