Une question pour John Walkenbach (au moins) :

V

VBAMan

Guest
Une question pour John Walkenbach (au moins) :
Comment faire la somme de nombres (avec 2 décimales, séparateurs de milliers) dans un tableau croisé dynamique si les valeurs de bases sont issues d'un userForm ?

Rq 1 : Je peux être + clair sur la formulation de mon problème :

J'ai un UserForm dans lequel il y a un TextBox. Lors de son initialisation j'ai écrit :

Private Sub UserForm_Initialize()
Dim x As Integer
x = 1000
UserForm2.TextBox2.Value = FormatNumber(x, 2, vbTrue)
End Sub

C'est à dire que l'on affiche "1 000,00" dans le TextBox lors du chargement


Ensuite, l'utilisateur clique sur OK pour valider sa saisie:

Private Sub BoutonValiderSaisie_Click()
....
Cells(Ligne, Colonne).Value = TextBox2.Value
... (la colonne restant fixe)
End Sub

Voila pour la saisie des nombres: j'obtient un beau tableau, no pb :

Libelle Debit ....
Carottes 1 000,00
Patates 52,23
Choux 2 565,59
Hiboux 232,11
... ...

Tout se conplique quand je veux faire un Tableau Croisé Dynamique avec ces valeurs.

Je place le champ Débit dans les données du TCD: c'est un "champ pivot table"
---> Il m'affiche correctement Nb Debit mais moi je veux la somme des débits pour un même libellé

Je fais donc : Clic Bouton gauche > Champ et je choisit Synthetisé par "Somme" à la place de "NbVal"

Et là...des "0" partout !


Rq 2 : Cette question a déja été posée le 22/01 sans succès :-/
 
V

Valérie

Guest
C'est bien normal pour EXCEL tes valeurs ne sont pas numériques mais bel et bien du texte (la fonction format renvoit un texte)

plutot que
Cells(Ligne, Colonne).Value = TextBox2.Value

écrit
Cells(Ligne, Colonne).Value = CDbl(TextBox2.Value)

Quitte à placer un format derrière
Cells(Ligne, Colonne).Value.NumberFormat = "# ##0.00"
ça devrait lui allé

@+
Valérie
 
@

@+Thierry

Guest
Bonsoir VBAMan et Valérie

Merci de cette explication Valérie... çà m'économisera ce genre de déclaration ... (je ne connaissais pas CCDbl ni les autres d'ailleurs CBool,CByte,CCur,CDate,CDbl,CDec,CInt,CLng,CSng,CStr,CVar....)

Car jusqu'à présent je passais par une déclaration de variable rien que pour çà...

Exemple :

Dim Amount As Double
If Not IsNumeric(TextBox1) then
... msgbox "erreur" Exit Sub etc
End If
Amount = TextBox1
Cells(Ligne, Colonne).Value = Format(Amount, "# ##0.00")

Bon il est certain que le Test reste nécessaire, mais on économise une variable.

Merci Valérie :) on découvre tous les jours un truc !!!
Bon Week End à vous deux et à ceux qui liront

@+Thierry