IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Trunc() en VBA [Trucs & Astuces]


Sujet :

VBA

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 342
    Points : 123
    Points
    123
    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

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Cette fonction, elle fait quoi ? Tu veux récupérer la partie entière d'un nombre décimal ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 342
    Points : 123
    Points
    123
    Par défaut
    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

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu l'as dans l'aide, donc elle doit exister...

    Pour pc75...
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
        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+

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'allais oublié une autre solution (Bidou, je crois)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaLocal = "=TRONQUE($A$1;2)"
    J'espère ne pas me tromper...

    A+

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 342
    Points : 123
    Points
    123
    Par défaut
    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 : 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
    Faite moi signe si vous trouvez une erreur dans ce code.

    et Merci bien !

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tiens moi je t'avais préparer ça en passant par une chaine....

    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
    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 ....

  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    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

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sgn(number) * Int(Abs(number))

  10. #10
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut

    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 !

  11. #11
    Membre régulier
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Points : 96
    Points
    96
    Par défaut
    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.

    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
    Effectue une troncature au décimal, exemple :
    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

Discussions similaires

  1. [VBA] [Interface] BringToFront/SendToBack
    Par DarkVader dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/10/2002, 14h29
  2. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  3. [VBA-E] [Excel] Tri automatique
    Par bovi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2002, 10h19
  4. [VBA-E] [Excel] Filtrer le donnees d'une sheet
    Par donia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/09/2002, 10h55
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo