Comment désigner 2 chiffres dans macro?

J

jpdestetienne!

Guest
Bonjour tout le monde.
Je vous écris car je ne connaîs pas le code à écrire dans une macro pour désigner 2 chiffres.
Je vous explique : en C, D, E j'ai des nombres(qui peuvent être à 3 chiffres, avec 2 décimales au max).
En P, je veux concatener ces nombres.
Je suis passée par du VBA pour écrire cette opération :

Range("P" & l).Value = Range("c" & l).Value & "*" & Range("d" & l).Value & "*" & Range("e" & l).Value


Cette macro marche bien, le problème est juste que je veux que le résultat s'écrive sous la forme 000,00*000,00*000,00

Si j'entre par exemple en C:26, en D:65.3 et en E 129.98, le résultat que j'obtiens en P sera 26,00*65.30*129*98, alors que je préfererais 026,00*065,30*129,98.

Je pense que dans mon code VBA il faudrait mettre un
If<Range("c" & l).Value >=2chiffre, alors écrire "0"&Range("c" & l).Value.......


mais je n'arrive pas à écrire ce code?
Quelqu'un peut-il m'aider?
D'avance merçi

Cordialement, JP
 
J

jpdestetienne!

Guest
Merci pour la rapidité de la réponse,et pour le code qui marche bien.
Une dernière petite question : est-il possible, si en C1=26, en D1=65.3 et en E1=152.99 d'obtenir en P1 le résultat 026*065.3*152.99

Merçi d'avance
Cordialement, JP
 
J

jpdestetienne!

Guest
Re,
Je viens de trouver un élément de réponse.
En écrivant :

Range("P" & l).Value = Format(Range("c" & l), "000.##") & "*" & Format(Range("d" & l), "000.##") & "*" & Format(Range("e" & l), "000.##")


j'obtiens presque le résultat que je voudrais.
Mais si j'écris en C1:25, en D1:56.6 et en E1:898.99, j'obtiens en P1:025.*056.6*898.99.

Y aurait-il en moyen d'enlever le point lorsqu'il n'y a pas 00 derière?(c'est à dire obtenir 025*56.6*898.99)

Merçi
 
P

Pascal76

Guest
Bon j'ai pas trouvé avec le format directement donc je te propose quelque chose mais un peu plus long

Var = ""
For x = 3 To 5
If Cells(l, x) = CInt(Cells(l, x)) Then
Var = Var & "*" & Format(Cells(l, x), "000")
Else
Var = Var & "*" & Format(Cells(l, x), "000.##")
End If
Next
Range("P" & l) = Right(Var, Len(Var) - 1)

Bon courage

Pascal
 
J

jpdestetienne!

Guest
RE-RE!
Encore une petite question : j'ai du mal à comprendre la signification de ce code.
Pourriez-vous me détailler les lignes pour pouvoir les comprendre, et au besoin m'en reservir un jour?
Merçi.
JP
 
P

Pascal76

Guest
Re

Juste un petit truc tu peux me tutoyer sinon j'ai l'impression d'être un vieux crouton (LOL) et c'est plus sympa

Var = "" 'Remise à zéro de la variable
For x = 3 To 5 'boucle sur les colonnes numéro 3 à 5 (C à E)
If Cells(l, x) = CInt(Cells(l, x)) Then 'Si la cellule est un entier
Var = Var & "*" & Format(Cells(l, x), "000") ' ajout à la variable Var le sigle * et la valeur au format sans la décimale
Else 'Sinon (si la cellule a des decimales)
Var = Var & "*" & Format(Cells(l, x), "000.##") 'ajout à la variable Var le sigle * et la valeur au format que tu avais trouvé toi-même
End If 'fin condition
Next 'boucle sur les 3 colonnes
Range("P" & l) = Right(Var, Len(Var) - 1) 'je mets dans la cellule de la colonne P de la même ligne la variable Var sans le premier caractère *

Pascal
 
J

jpdestetienne!

Guest
Allez, une petite dernière pour la route!
Pour désigner une cellule qui contient un entier, tu écris :
If Cells(l, x) = CInt(Cells(l, x)) Then


Mais quel serait le code pour désigner un nombre à virgule.
En gros, comment on déclare un réel?(En Pascal, on dit real, mais en VBA?)
Merçi encore une fois pour ce p'ti renseignement
JP
 
C

CHti160

Guest
Salut"jpdestetienne!" salut "Pascal"
je me permets
Csng(expression)
If Cells(l, x) = Csng(Cells(l, x)) Then
tu peux trouver les differentes fonctions dans l'aide VBA
un petit extrait
Fonction Type renvoyé Plage de valeurs de l'argument expression
CBool Boolean
Toute chaîne ou expression numérique valide.
CByte Byte
0 à 255.
CCurCurrency
-922 337 203 685 477,5808 à 922 337 203 685 477,5807.
CDate Date
Toute expression de date valide.
CDbl Double
-1.79769313486231E308 à
-4,94065645841247E-324 pour les valeurs négatives ; 4,94065645841247E-324 à 1,79769313486232E308 pour les valeurs positives.
CDec Decimal
+/-79 228 162 514 264 337 593 543 950 335 pour les nombres sans décimales. La plage de valeurs des nombres à 28 décimales est
+/-7,9228162514264337593543950335. Le plus petit nombre différent de zéro est 0,0000000000000000000000000001.
CInt Integer
-32 768 à 32 767 ; les fractions sont arrondies.
CLng Long
-2 147 483 648 à 2 147 483 647 ; les fractions sont arrondies.
CSng Single
-3,402823E38 à -1,401298E-45 pour les valeurs négatives ; 1,401298E-45 à 3,402823E38 pour les valeurs positives.
CStr String
Les valeurs renvoyées par la fonction Cstr dépendent de l'argument expression.
CVar Variant
Même plage de valeurs que le type Double pour les nombres et que le type String pour les chaînes non numériques.
A+++
Jean Marie
 
J

jpdestetienne!

Guest
Ouah, pour être complet, on peut dire que c'est complet!
Merçi beaucoup pour ces informations qui vont m'être bien utile pour la suite!
A bientôt et bonne après-midi.
Cordialement, JP from Saint-Etienne(allez les verts!!)
 
J

jpdestetienne!

Guest
Bon, là je m'arrache tellement les cheveux que si ça continue, je n'en n'aurais plus!
Malgré le grand nombre de réponses que vous m'avez tous apporté depuis ce matin, je n'arrive toujours pas à résoudr mon problème.

Je veux que les colonnes C,D,E soient au format 000,## mais sans que la virgule apparaise s'il n'y a as de décimal( si je tape 25, je veux avoir 025, si je tape2,3 je veux avoir002.3 etc)

J'ai donc, dans le code VBA de mon UserForm de saisie de données, tapé ceci(exemple pour colonne C seulement):


Range("C" & l + 10).Value = TextBox2.Value
x = 3
If Cells(l + 10, x) = CInt(Cells(l, x)) Then
Range("C" & l + 10).Value = Format(Cells(l + 10, x), "000")
Else
Range("C" & l + 10).Value = Format(Cells(l + 10, x), "000.##")
End If
Range("C" & l).Value = Range("C" & l + 10).Value
Sheets("tableau").Range("C" & l + 10).ClearContents


Le problème, c'est que s'il n'y a pas de décimal, la virgule est toujours affichée.
Je pense que je suis vraiment près du but, mais là j'ai vraiment plus d'idée.
Est-ce que quelqu'un pourrait m'aider?
Merçi d'avance.
Cordialement, JP
 
P

Pascal76

Guest
Re

Range("C" & l + 10).Value = TextBox2.Value
x = 3
If Cells(l + 10, x) = CInt(Cells(l+10, x)) Then '<<====== Ici une erreur
Range("C" & l + 10).Value = Format(Cells(l + 10, x), "000")
Else
Range("C" & l + 10).Value = Format(Cells(l + 10, x), "000.##")
End If
Range("C" & l).Value = Range("C" & l + 10).Value
Sheets("tableau").Range("C" & l + 10).ClearContents

Pascal
 

Statistiques des forums

Discussions
312 328
Messages
2 087 318
Membres
103 515
dernier inscrit
Cherbil12345