Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2005, 15h25   #1
Membre du Club
 
Inscription : avril 2004
Messages : 278
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 278
Points : 57
Points : 57
Par défaut Trunc() en VBA

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
laclac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2005, 15h27   #2
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 817
Points : 3 011
Points : 3 011
Bonjour,

Cette fonction, elle fait quoi ? Tu veux récupérer la partie entière d'un nombre décimal ?
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2005, 15h46   #3
Membre du Club
 
Inscription : avril 2004
Messages : 278
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 278
Points : 57
Points : 57
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
laclac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2005, 15h55   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Tu l'as dans l'aide, donc elle doit exister...

Pour pc75...
Citation:
Tronque 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
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 à tronquer

Code :
    ActiveCell.Formula = "=TRUNC($A$1,2)"
Par contre, pas plus dans Excel qu'en VBA (97) je n'ai obtenu le résultat que j'étais en droit d'attendre...
Mais il y aura bien queukun pour expliquer pourquoi...

A+

A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2005, 16h00   #5
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
J'allais oublié une autre solution (Bidou, je crois)

Code :
ActiveCell.FormulaLocal = "=TRONQUE($A$1;2)"
J'espère ne pas me tromper...

A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2005, 16h39   #6
Membre du Club
 
Inscription : avril 2004
Messages : 278
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 278
Points : 57
Points : 57
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 :
Code :
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
Faite moi signe si vous trouvez une erreur dans ce code.

et Merci bien !
laclac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2005, 17h10   #7
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 781
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 781
Points : 16 868
Points : 16 868
Envoyer un message via Skype™ à bbil
tiens moi je t'avais préparer ça en passant par une chaine....

Code :
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
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 ....
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2005, 17h21   #8
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Plus performant à priori :

Code :
1
2
3
Function Tronquer(Nombre As Double, NbDecimal As Integer) As Double
Tronquer = Int((Nombre * 10 ^ NbDecimal)) / (10 ^ NbDecimal)
End Function
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 09h58   #9
Invité de passage
 
Homme Yannick
Assistant aux utilisateurs
Inscription : avril 2011
Messages : 1
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Assistant aux utilisateurs
Secteur : Distribution

Informations forums :
Inscription : avril 2011
Messages : 1
Points : 1
Points : 1
Par défaut Function trunc()

LA fonction int extrait la partie entière !!!!
Code :
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
Plus info :

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 :
1
2
 
Sgn(number) * Int(Abs(number))
winnie.ym est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 10h33   #10
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE

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 !
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h12.


 
 
 
 
Partenaires

Hébergement Web