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

Macros et VBA Excel Discussion :

Arrondi au multiple


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut Arrondi au multiple
    Bonjour

    Je cherche a reproduire la fonction ARRONDI.AU.MULTIPLE de excel en VBA.

    Je voudrais avoir le multiple de 5 d'un nombre.

    exemple :

    x = 2
    nombre multiple de 5 le plus proche : 0

    x = 3
    nombre multiple de 5 le plus proche : 5

    x = 12
    nombre multiple de 5 le plus proche : 10


    sauf que cela ne me convient pas, il faudrait que cela me retourne toujours le multiple de 5 supérieur.

    avec les exemple précédents :

    x = 2
    nombre multiple de 5 : 5

    x = 3
    nombre multiple de 5 : 5

    x = 12
    nombre multiple de 5 : 15


    merci d'avance pour votre aide...

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function RoundSup(ByVal Nbre As Double, ByVal Multi As Integer)
    RoundSup = IIf(Nbre Mod Multi = 0, Nbre, Multi * (1 + Nbre \ Multi))
    End Function
    =RoundSup(12;5) donne 15

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    Parfait....

    Merci !!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    J'ai parlé un peu trop vite....
    Cela ne marche pas pour les négatifs

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    On va la faire marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function RoundSup(ByVal Nbre As Double, ByVal Multi As Integer)
    RoundSup = IIf(Nbre Mod Multi = 0, Nbre, Multi * Sgn(Nbre) * ((1 + 1 * Sgn(Nbre)) + Abs(Nbre) \ Multi))
    End Function

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    Je viens de voir votre réponse..

    J'avais fais un truc moins propre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Function RoundSup(ByVal Nbre As Double, ByVal Multi As Integer)
        If Nbre <= 0 Then
            RoundSup = IIf(-Nbre Mod Multi = 0, -Nbre, 5 * (1 + -Nbre \ Multi)) * -1
        Else
            RoundSup = IIf(Nbre Mod Multi = 0, Nbre, 5 * (1 + Nbre \ Multi))
        End If
    End Function

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    -6 donnera -5 ou -10?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    Votre version après correction des petites erreurs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Function RoundSup(ByVal Nbre As Double, ByVal Multi As Integer)
        RoundSup = IIf(Sgn(Nbre) * Nbre Mod Multi = 0, Sgn(Nbre) * Nbre, Multi * (1 + (Sgn(Nbre) * Nbre) \ Multi)) * Sgn(Nbre)
    End Function
    Tout fonctionne maintenant parfaitement...

    Merci beaucoup de votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Arrondi intempestif sur multiplication
    Par Shakallica dans le forum Access
    Réponses: 8
    Dernier message: 15/04/2013, 15h16
  2. arrondi au multiple de 45
    Par takout dans le forum MATLAB
    Réponses: 5
    Dernier message: 23/04/2012, 21h52
  3. [XL-2007] VBA Fonction ARRONDI.AU.MULTIPLE
    Par vivi4561 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2011, 15h34
  4. Problème de multiplication et arrondis
    Par Ougha dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 19/08/2009, 14h54
  5. Arrondi au multiple le plus proche ...
    Par Marco85 dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 21/07/2009, 13h56

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