Format des variables sous VB

Format des variables sous VB - VB/VBA/VBS - Programmation

Marsh Posté le 21-05-2008 à 13:05:02    

:hello:  
 
Je relance un nouveau topic car j'ai réellement beaucoup de mal à formater mes variables.
 
Je récapitule ce que je suis en train de créer.
J'ai une feuille de calcul dans laquelle j'ai un tableau avec 70 lignes (70 entités) et quelques 40 colonnes (REVENUS et DEPENSES).
Exemple :
 
                    Revenus                Dépenses
Entité1          15 452.25               8 451.75
Entité2          10 000.45               6 215.03
...
 
J'ai créé une boîte de dialogue pour chaque intervenant saisisse les données relatives aux entités qu'il gère. L'intervenant choisit dans une liste déroulante l'entité, la macro récupère les montants REVENUS et DEPENSES éventuellement saisis auparavant et les mets dans les variables REVENUS et DEPENSES... qui sont formatées ensuite avec 2 décimales.
 
Je teste actuellement celle-ci et je n'ai pas trop de soucis pour entrer choisir l'entité, entrer les montants (REVENUS et DEPENSES).
 
Par contre, comment formater une bonne fois pour toutes les variables REVENUS et DEPENSES ?
Car lorsque je modifie REVENUS ou DEPENSES, le montant - lorsqu'il est entier - n'apparaît pas avec les centimes (exemple pour 4 000, il m'affiche 4 000 et non 4 000,00).
Et lorsque je saisis un chiffre avec des décimales, il faut utiliser la virgule du clavier ALPHA et non le point du clavier NUM...
 
Alors je me demande s'il n'y a pas une manière définitive pour que toutes les variables soient au format avec 2 décimales, à la création comme à la modification...
 
Merci de votre aide...


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 21-05-2008 à 13:05:02   

Reply

Marsh Posté le 21-05-2008 à 13:20:06    

heu tu peux affecter un formatage à une cellule excel (définitivement)
mais pas à une variable VB.

Reply

Marsh Posté le 21-05-2008 à 13:24:09    

Xxxaaavvv a écrit :

heu tu peux affecter un formatage à une cellule excel (définitivement)
mais pas à une variable VB.


 
Alors y a-t-il une méthode pour que dans la macro, le point du clavier numérique devienne une virgule à chaque fois que l'on clique dessus.


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 21-05-2008 à 13:26:58    

salut


    Cells(1, 1) = Format(UserForm1.TextBox1.Text, "0.00" )
    .....
    Cells(1, 2).NumberFormat = "0.00"


 
sinon concernant la saisie dans une UserForm t'inspirer de http://cjoint.com/?fvnKbRVqtB particulièrement saisie décimale ou un seul séparateur décimal est permis, et ou la virgule se substitue au point si on utilise le pavé numérique

Message cité 1 fois
Message édité par kiki29 le 21-05-2008 à 13:36:10
Reply

Marsh Posté le 21-05-2008 à 13:34:17    

En fait, dans ma boîte de dialogue, il y a une variable qui est la somme des REVENUS (idem pour DEPENSE).
Avec le code que tu m'as donné avant-hier, le total se recalcule automatiquement dès que je modifie REVENUS ou DEPENSES...
Le hic, c'est que si je tape 45.25 (avec le point du clavier num), le calcul ne se fait plus...
 
Exemple :
J'ai 0 et 0 dans les deux variables REVENUS et DEPENSES. Le total est donc de 0... logique.
Dès que je saisis, un montant dans l'une ou l'autre des variables, le total changent dynamiquement... super...
Si je saisis 100 (sans centimes) dans REVENUS, le total passe à... 100,00... avec une virgule.
Si je vais dans DEPENSES et que je saisisse 75.64, le total change jusqu'au 5 mais se remet à son état avant saisie lorsque je tape le point du clavier num... (avec la virgule du clavier alpha, ça fonctionne jusqu'au bout)...
 
J'espère que c'est clair mon petit texte ???  :D  
 
Ou alors, il faut que je formate tout avec des points...
Les variables sont formatées avec Format(..., "##,##0.00" )
 
 :??:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 21-05-2008 à 13:42:49    

c'est un autre problème :D
 
en fait la conversion de chainde caractère ne passe pas avec le "."
(il prend zero a la place...)
 
c'est la fonction que je t'ai fait rajouter qu'il faut adapter...
 
je te la reposte assez vite.


Message édité par Xxxaaavvv le 21-05-2008 à 13:43:09
Reply

Marsh Posté le 21-05-2008 à 13:49:33    

kiki29 a écrit :

salut


    Cells(1, 1) = Format(UserForm1.TextBox1.Text, "0.00" )
    .....
    Cells(1, 2).NumberFormat = "0.00"


 
sinon concernant la saisie dans une UserForm t'inspirer de http://cjoint.com/?fvnKbRVqtB particulièrement saisie décimale ou un seul séparateur décimal est permis, et ou la virgule se substitue au point si on utilise le pavé numérique


 
Effectivement, dans ton exemple, lorsque j'exécute la macro et que je saisis dans le champ "Décimal", lorsque je tape des nombres avec le clavier, le point devient illico une virgule... c'est ce qu'il me faut...
J'ai donc insérer le code correspond dans ma Userform :
 

Code :
  1. Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  2.     If KeyAscii = Asc(Point) Then
  3.         If InStr(TextBox1, Virgule) = 0 Then
  4.             KeyAscii = Asc(Virgule)
  5.         Else
  6.             KeyAscii = 0
  7.         End If
  8.     ElseIf InStr(entrees_decimales_permises, Chr(KeyAscii)) = 0 Then
  9.         KeyAscii = 0
  10.     ElseIf InStr(TextBox1, Virgule) > 0 And KeyAscii = Asc(Virgule) Then
  11.         KeyAscii = 0
  12.     End If
  13.    
  14.     If KeyAscii = 13 Then SendKeys "{TAB}": KeyAscii = 0
  15. End Sub


 
et j'ai remplacé TextBox1 par le nom de ma variable... mais ça ne marche pas...  :(  
j'ai le message : "Erreur d'exécution '5'   Argument ou appel de procédure incorrect" et le débogueur surligne "If KeyAscii = Asc(Point) Then "
 
Qu'est-ce qui ne va pas ?


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 21-05-2008 à 13:51:39    

tu peux aussi remplacer ma fonction par cette nouvelle :
 

Code :
  1. Public Function dblConversion(strValeur As String) As Double
  2.    Dim strValeurAVirgule As String
  3.  
  4.    If InStr(strValeur, "." ) Then
  5.       strValeurAVirgule = Left(strValeur, InStr(strValeur, "." ) - 1) & "," & Right(strValeur, Len(strValeur) - InStr(strValeur, "." ))
  6.    End If
  7.    If IsNumeric(strValeurAVirgule) Then
  8.       dblConversion = CDbl(strValeurAVirgule)
  9.    Else
  10.       dblConversion = 0
  11.    End If
  12. End Function


 
ce qui te permet de saisir des point ou des virgules indifférement
(le point est converti en virgule de manière interne)

Reply

Marsh Posté le 21-05-2008 à 13:55:33    

Xxxaaavvv a écrit :

tu peux aussi remplacer ma fonction par cette nouvelle :
 

Code :
  1. Public Function dblConversion(strValeur As String) As Double
  2.    Dim strValeurAVirgule As String
  3.  
  4.    If InStr(strValeur, "." ) Then
  5.       strValeurAVirgule = Left(strValeur, InStr(strValeur, "." ) - 1) & "," & Right(strValeur, Len(strValeur) - InStr(strValeur, "." ))
  6.    End If
  7.    If IsNumeric(strValeurAVirgule) Then
  8.       dblConversion = CDbl(strValeurAVirgule)
  9.    Else
  10.       dblConversion = 0
  11.    End If
  12. End Function


 
ce qui te permet de saisir des point ou des virgules indifférement
(le point est converti en virgule de manière interne)


 
C'est bizarre car maintenant le total automatique ne se fait plus...  
J'vais péter un câble...
 


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 21-05-2008 à 14:09:50    

me suis ptetre tromper, je vérifierai demain, la j'ai plus le temps désolé :D

Reply

Marsh Posté le 21-05-2008 à 14:09:50   

Reply

Marsh Posté le 21-05-2008 à 14:12:36    

Xxxaaavvv a écrit :

me suis ptetre tromper, je vérifierai demain, la j'ai plus le temps désolé :D


 
OK !
 
Merci encore pour ton aide... ;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed