Format nombre formulaire
Bonjour à tous les membres,
J'ai une petite question. J'ai un classeur excel se remplissant avec un formulaire/userform créé avec VBA.
Lorsqu'un nombre est placé dans une cellule, via le formulaire, j'ai message d'erreur "Le nombre dans cette cellule est placé au format texte ou est précédé d'une apostrophe". Cela m'embête, car ces erreurs empêche les "totaux" de se calculer en bas de mon tableau.
Quelqu'un pourrait-il m'aider ?
Faut-il convertir les textbox en "nombre" ? Si oui comment s'y prendre ?
Ou autre solution, forcer le calcul malgré les erreurs de conversion ?
Merci à vous,
PS : je peux joindre mes lignes de code si nécessaire.
Steven
bonjour
Un petit fichier ?
bonjour,
Joindre directement une copie du classeur. avec la feuille ET le formulaire.
Il n'est pas nécessaire de laisser toutes les données : Une ligne suffira pour peu que le formulaire fonctionne.
[EDIT] Salut et
A+
Bonjour à vous deux, merci pour vos réponses.
Voici le fichier en pièce jointe.
Les colonnes concernées sont, les colonnes O, R, V, W correspondantes respectivement aux textbox 12,13,14,15 du formulaire.
Le formulaire s'affiche en cliquant sur le bouton "saisie rapide" sur la page d’accueil. Penser à sélectionner la discipline "ECO" dans le menu déroulant du formulaire.
En gros, les chiffres ajoutés avec le formulaire ne sont pas pris en compte dans les totaux.
Un grand merci,
Steven
PS : Désolé pour la présentation du classeur, j'ai du supprimer quelques feuilles et l'image de la page d’accueil pour joindre le fichier, car trop lourd à la base...
Bonsoir,
Les TextBox comme leur nom l'indique contiennent du Texte.
C'est à toi de formater le contenu de telle manière qu'il soit reconnu comme il faut par les cellules cibles ou formater les cellules au format souhaité :
Dans cet exemple la validation formate la cellule de la première colonne dans un format personnel
2 ème colonne reçoit du texte, la 3ème une date, et la 4ème une valeur
Ainsi toutes les saisies non-texte doivent être contrôlées converties ou/et formatées en fonction du résultat attendu.
With WShC
.Cells(iR, 1).Value = Textbox1
.Cells(iR, 1).NumberFormat = "\C0000"
.Cells(iR, 2) = TextBox2 & "." & CLng(CDate(txtDatC))
.Cells(iR, 3) = CDate(TextBox3)
.Cells(iR, 4) = Val(TextBox4)
End WithA+
Merci beaucoup pour ta réponse.
Donc si je reprends ton exemple, dans mon cas ça devrait donner :
Private Sub CommandButton1_Click()
Dim L As Integer
L = Sheets(ActiveSheet.Name).Range("A1").End(xlDown).Row + 1
'Pour placer le contenu des différentes textbox dans les cellules
Range("A" & L).Value = ComboBox1
Range("B" & L).Value = TextBox1
Range("C" & L).Value = TextBox2
Range("D" & L).Value = TextBox4
Range("E" & L).Value = TextBox5
Range("F" & L).Value = TextBox3
Range("G" & L).Value = TextBox6
Range("H" & L).Value = TextBox7
Range("I" & L).Value = TextBox8
Range("J" & L).Value = TextBox9
Range("K" & L).Value = TextBox10
Range("N" & L).Value = TextBox11
Range("O" & L).Value = TextBox12
Range("T" & L).Value = TextBox13
Range("V" & L).Value = TextBox14
Range("W" & L).Value = TextBox15
Range("AE" & L).Value = TextBox20
End
With WShC
.Range("O" & L).NumberFormat = "0"
.Range("T" & L).NumberFormat = "0"
.Range("V" & L).NumberFormat = "0"
.Range("W" & L).NumberFormat = "0"
End With
End SubOr, j'ai du louper une étape (j'ai un niveau débutant en VBA) car cela ne marche pas
Bonjour,
un textbox contient une chaine, il faut la convertir en numérique :
Range("A" & L).Value = cdbl(ComboBox1)eric
bonjour,
[Edit] Salut Eriiic !
.Value n'est pas une fonction de conversion en nombre : C'est une propriété de la cellule ou du range.
Dans la plupart des cas il n'est pas nécessaire de spécifier .Value (car c'est souvent la propriété par défaut)
C'est le contenu du TextBox que tu dois convertir avant de le transférer dans ton range.
Si tu veux transférer du texte tu ne fais aucune conversion.
Si tu veux transférer une date tu vas écrire :
.Cells(iR, 3) = CDate(TextBox3)Pour un nombre tu vas utiliser CInt, Int, Val ou des formats décimaux...
Le formatage c'est après : si la cellule n'est pas formaté... ça dépend de tes habitudes de travail. On formate souvent toute la colonne quand on crée un tableau. Dans ce cas inutile de formater ton entrée à chaque fois... Cependant pour quelques formats spéciaux et dans certains cas, c'est presque indispensable...
Ok ?
Le transfert du Userform vers la Base de Données n'est pas la partie la plus simple. C'est même la partie la plus sensible.
C'est elle qui va donner vie (valider, contrôler) à la saisie de l'utilisateur :
Voici un exemple réel de transfert vers une base de donnée :
Cells(i, 1) = Val(TbxNumLic)
Cells(i, 1).NumberFormat = "#"
Cells(i, 2) = CDate("19/08/1949")
Cells(i, 2) = LblSetInt
Cells(i, 3) = LblCiv
Cells(i, 4) = TbxNom
Cells(i, 5) = TbxPrenom
Cells(i, 6) = LblSexe
Cells(i, 7) = CDate(TbxDateN)
Cells(i, 8) = LblCat
Cells(i, 9) = Left(LblTypeVal, 1)
Cells(i, 10) = MFStr(TbxAdr1)
Cells(i, 11) = MFStr(TbxAdr2)
Cells(i, 12) = Format(TbxCodep, "00000")
Cells(i, 13) = ComboVille
If TbxTel <> "" Then Cells(i, 14) = CLng(TbxTel)
Cells(i, 14).NumberFormat = "0#"" ""##"" ""##"" ""##"" ""##"
If TbxPor <> "" Then Cells(i, 15) = CLng(TbxPor)
Cells(i, 15).NumberFormat = "0#"" ""##"" ""##"" ""##"" ""##"
On Error Resume Next
If Not IsDate(TbxCerMed) Then
Cells(i, 16) = IIf(TbxCerMed = "X", "X", "")
Else
Cells(i, 16) = CDate(TbxCerMed)
End If
Cells(i, 17) = TbxMail
Cells(i, 18) = IIf(CBxAss, "", "N")
Cells(i, 19) = IIf(LblNat = "FRA", "", LblNat)
Cells(i, 20) = TbxInfosDans ton fichier pour les TextBox utilisant des valeurs numérique tu pourra sans doute utiliser :
Cells(i, 1) = Val(TextBox1) 'à adapterA+
se méfier de val() qui n'aime pas du tout les virgules, préférer cdbl() :
Val("10,3") => 10 !
Si le séparateur est le point ça va.
Aaaaah super j'ai réussi grâce à vous!
Pour le moment "val" à l'air de fonctionner, car les cellules contiennent uniquement des nombres entiers donc pas de virgule. On verra à l'utilisation.
Encore merci pour votre aide, et bonne soirée à vous
Amicalement Steven