VBA Arrondir à la vingtaine la plus proche

Bonjour à tous

J'explique ma situation :

Je rentrer un nombre dans la textox => J'appui sur afficher et je cherche dans mon tableau (en page 2) les valeurs correspondante.

Comment arrondir ma textbox (correspondant à la variable ep utilisée dans le code de la feuille) à la vingtaine la plus proche ? 20-40-60-...

Lorsque j'ai une ep qui est = à 20 ou 40 ou 60 ... tout fonctionne car la formule dans le code ( i= ) joue son rôle mais sinon ....

Si quelqu'un a une petit idée ?

Merci d'avance.

Kitesurf

Bonjour Kite.

Quand tu envoies ton fichier, essaye de ne pas l'alléger de trop, sinon énormément d'erreur quand on l'utilise.

ep = WorksheetFunction.Ceiling(Val(.TextBox3.Text), 20)

Bonjour Benoit

Merci de répondre à beaucoup de mes demandes c'est sympa Là ça l'arrondi à la vingtaine supérieure mais pas à la plus proche :S Une parade à cela ?

Ok pas de soucis je m'efforcerai de vérifier tout le fonctionnement la prochaine fois, désolé

Je n'avais pas tilter sur le plus proche.

Tu peux essayer ça :

If Val(.TextBox3.Text) Mod 20 > 10 Then
    ep = WorksheetFunction.Ceiling(Val(.TextBox3.Text), 20)
    Else
    ep = WorksheetFunction.Floor(Val(.TextBox3.Text), 20)
End If

Pas de soucis

Il me retourne une erreur d'execution 438 : propriété ou méthode non géré par cet objet

A quel niveau ?

Spremiere ligne

As-tu vu que j'avais édité ton post.

Si ça ne fonctionne pas, peux-tu m'envoyer le fichier sur lequel tu as un problème ?

Bonsoir, Salut Benoît !

Le point devant TextBox est sûrement de trop...

Une fonction pour arrondir à la vingtaine...

Function Round20(ByVal n As Integer) As Integer
    Round20 = Round(n * 5 / 100 + 0.01) * 20
End Function
    ep = Round20(Val(TextBox3.Text))

Cordialement.

Bonsoir, Salut Benoît !

Le point devant TextBox est sûrement de trop...

Une fonction pour arrondir à la vingtaine...

Function Round20(ByVal n As Integer) As Integer
    Round20 = Round(n * 5 / 100 + 0.01) * 20
End Function
    ep = Round20(Val(TextBox3.Text))

Cordialement.

Bonjour MFerrand.

Le point est correct, dans le module complet nous sommes entre un balises With.

Je suis reparti sur ton ancien post :

With Me
    lzS = Val(.TextBox1.Text)
    lzI = Val(.TextBox3.Text)
    ep = Val(.TextBox2.Text)
    If ep Mod 20 > 10 Then
        ep = WorksheetFunction.Ceiling(ep, 20)
        Else: ep = WorksheetFunction.Floor(ep, 20)
    End If
    tB = .Broche.Text
End With

Tout est correct.

Après la version proposée par MFerrand est plus optimisée dans ton cas.

Sur quelle ligne était l'erreur alors ! ? Il n'y a pas des légions d'objets...

Je me pose la même question, à moins que le code n'a pas été mis entre les bornes comme il le fallait.

Bonjour les gars

Merci pour vos deux solutions elles marchent très bien ! En revanche je ne comprends pas complètement celle de MFerrand, enfin la démarche à suivre pour trouver ce genre de formule o_O ?

Une petite piste MFerrand s'il te plait ?

Je ne comprend pas non plus pourquoi la première ne fonctionnait pas pourtant elle était bien placée dans le code ...

Bonjour,

Tu peux suivre l'algorithme : tu prends un nombre, tu le multiplies par 5, tu divises le résultat par 100, tu arrondis à l'unité, puis tu multiplies par 20 et tu obtiens le multiple de 20 le plus proche.

Détail : 100 est un multiple de 20 (20*5). Donc si on multiplie par 5, si on arrondit à la centaine, en divisant ensuite par 5 on aurait le multiple de 20 cherché. Mais en utilisant la fonction VBA Round, cette dernière n'arrondit qu'à l'unité, donc après la multiplication par 5, on divise par 100 pour faire cet arrondi à l'unité. Mais ayant divisé par 100, on ne divise plus par 5 pour atteindre le résultat, on multiplie par 20 (100/5=20). Petit détail additionnel : Round arrondit 0,50 vers 0 au lieu de l'arrondir à 1, ce qu'on compense en ajoutant 0,01 après la division par 100...

Cordialement.

Re,

Ah oui j'ai capté en fait ça me parait plus logique de diviser par 20 directement n plutôt que le *5 puis /100 !! Merci pour la précision sur le +0.01 j'y étais pas du tout sur ça ..

Merci beaucoup les gars

Re,

Ah oui j'ai capté en fait ça me parait plus logique de diviser par 20 directement n plutôt que le *5 puis /100 !! Merci pour la précision sur le +0.01 j'y étais pas du tout sur ça ..

Merci beaucoup les gars

Tu peux absolument faire n/20 !

(En fait c'est parce que j'avais procédé en deux temps et j'ai omis d'en faire la synthèse ! Ainsi tu simplifieras !)

Cordialement.

Pas de soucis ! Merci

Rechercher des sujets similaires à "vba arrondir vingtaine proche"