Bonjour,
Existe t il la fonction trunc() en VBA.
Car sur excel je dois faire =TRONQUE(A;2) pour tronquer les valeurs sans arrondir les 2 dernières décimales.
Mais celà en VBA pour un macro !
Merci davance
Bonjour,
Existe t il la fonction trunc() en VBA.
Car sur excel je dois faire =TRONQUE(A;2) pour tronquer les valeurs sans arrondir les 2 dernières décimales.
Mais celà en VBA pour un macro !
Merci davance
Bonjour,
Cette fonction, elle fait quoi ? Tu veux récupérer la partie entière d'un nombre décimal ?
Elle tronque à la place de arrondir.
Car la valeur 188,8889 passe à 188,89 si on la place dans une cellule à 2décimales. Moi l'avoir en sulement 2 décimales mais sans arrondir, mais en tronquant. Et celà en VBA et non en formule Excel.
Tronque en Excel =TRONQUE(A1;2)
a1=2000 => a1=2000
a1=188,8889 =>188,88
a1=196,12 =>196,12
C'est pile ce que je veux mais il me le faudrait en code VBA
Tu l'as dans l'aide, donc elle doit exister...
Pour pc75...
Maintenant, en VBA, c'est Trunc, comme tu le supposes... mais tu dois mettre l'adresse en absolu pour écrire l'adresse de la cellule à tronquerTronque un nombre en supprimant la partie décimale de ce nombre de sorte que la valeur renvoyée par défaut soit un nombre entier.
Syntaxe
TRONQUE(nombre;no_chiffres)
nombre représente le nombre à tronquer.
no_chiffres représente le nombre de décimales apparaissant à droite de la virgule après que le chiffre ait été tronqué. La valeur par défaut de no_chiffres est 0 (zéro).
Remarque
TRONQUE et ENT sont similaires en ce sens qu'elles renvoient toutes deux des nombres entiers. TRONQUE supprime la partie décimale d'un nombre. ENT arrondit les nombres à l'entier immédiatement inférieur en fonction de la valeur de la partie décimale de ces nombres. ENT et TRONQUE diffèrent uniquement lorsqu'il s'agit de nombres négatifs. En effet, TRONQUE(-4,3) renvoie -4, mais ENT(-4,3) renvoie -5, parce que -5 est le nombre entier immédiatement inférieur.
Exemples
TRONQUE(8,9) égale 8
TRONQUE(-8,9) égale -8
TRONQUE(PI()) égale 3
Par contre, pas plus dans Excel qu'en VBA (97) je n'ai obtenu le résultat que j'étais en droit d'attendre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ActiveCell.Formula = "=TRUNC($A$1,2)"
Mais il y aura bien queukun pour expliquer pourquoi...
A+
A+
J'allais oublié une autre solution (Bidou, je crois)
J'espère ne pas me tromper...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ActiveCell.FormulaLocal = "=TRONQUE($A$1;2)"
A+
Ayant la cellule A1 sur un autre classeur que là ou je devais la mettre tronquer, ben ca m'a agacé![]()
J'ai donc créer une fonction rien que pour tronquer :
Faite moi signe si vous trouvez une erreur dans ce code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Function Tronquer(Montant As Variant) As Variant If Int(Montant) <> Montant Then Tronquer = Left(Montant, Len(Int(Montant)) + 3) Else Tronquer = Montant End If
et Merci bien !
tiens moi je t'avais préparer ça en passant par une chaine....
pour ton code, je pense que tu doit avoir des problémes si tu as plus d'un chiffre avant la virqule , style 123,456 ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Function tronque(r As Double, iNb As Integer) As Double Dim st As String Dim iPos As Integer 'position du point st = Str(r) st = Replace(st, ".", ",") iPos = InStr(1, st, ",") If iPos > 0 Then st = Left(st, iPos + iNb) End If tronque = CDbl(st) End Function![]()
Plus performant à priori :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Function Tronquer(Nombre As Double, NbDecimal As Integer) As Double Tronquer = Int((Nombre * 10 ^ NbDecimal)) / (10 ^ NbDecimal) End Function
LA fonction int extrait la partie entière !!!!
Plus info :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 dim a as double a=int(1.2) ->> a=1 b=int(1.9) ->> a=1 a=int(-1.2) ->> a=-2 b=int(-1.9) ->> a=2
Int, Fix, fonctions
Voir aussi Exemple Particularités
Renvoie la partie entière d'un nombre.
Syntaxe
Int(number)
Fix(number)
L'argument number peut contenir une valeur de type Double ou toute autre expression numérique valide. Si l'argument number contient une valeur de type Null, Null est renvoyé.
Remarques
Les fonctions Int et Fix suppriment toutes deux la partie fractionnelle de l'argument number et renvoient l'entier obtenu.
Différence entre les fonctions Int et Fix : si number est négatif, Int renvoie le premier entier négatif inférieur ou égal à number, alors que Fix renvoie le premier entier négatif supérieur ou égal à number. Par exemple, Int convertit -8,4 en -9 et Fix convertit -8,4 en -8.
Fix(number) équivaut à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Sgn(number) * Int(Abs(number))
Je suppose que, depuis 2005,laclac a eu la réponse à sa question :p
Mais tu as ajouté FIX, et c'est intéressant de mettre en avant la différence sur les négatifs.
Merci !
J'ajoute qu'il faut - toujours dans les négatifs - faire attention au type de données passé à FIX, car des fois, il y aura des FIX "bizarres".
Par exemple, sur un réel Double, j'ai déjà eu un FIX sur -2 qui me renvoyait -1
Après avoir choisi un type Currency au lieu de double, le même process renvoyait bien -2 pour -2
Encore merci pour tes précisions !
Salut,
Vieille discussion, mais je suis tombé dessus en cherchant.
Donc pour ceux que ça pourrait aider.
Fonction troncature équivaut à fonction Arrondi Inférieur d'Excel.
Effectue une troncature au décimal, exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Sub Bouton1_Cliquer() Dim i As Integer For i = 1 To 100 Cells(i, 2).Value = Application.WorksheetFunction.RoundDown(Cells(i, 1), 1) Next End Sub
0.09 affiche 0
0.11 affiche 1
RoundDown(Cells(i, 1), 1) En remplaçant 1 par 0 cela reviens à faire la fonction Int
Partager