Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 29/06/2011, 08h47   #1
Membre du Club
 
Inscription : décembre 2006
Messages : 222
Détails du profil
Informations personnelles :
Âge : 58

Informations forums :
Inscription : décembre 2006
Messages : 222
Points : 61
Points : 61
Par défaut Modification de fonction.

Bonjour le forum,

Je souhaite modifier la fonction faite par TOFALU, que je remercie chaleureusement, mais je n'arrive pas à le faire.

Je souhaiterai que cette fonction qui arrondi à la centaine superieure, arrondisse à 0 les sommes qui sont inférieure à 50,0 et pour les sommes superieures à 50,0 arrondisse à la centaine superieure

Code :
1
2
3
4
5
Function arrondiSup(sglValue As Single, intPosition As Integer) As Single
    Dim intTemp As Integer
    intTemp = 10 ^ intPosition
    arrondiSup = (sglValue \ intTemp - Not (sglValue Mod intTemp = 0)) * intTemp
End Function
Je vous remercie pour l'aide.
Cordialement
Bernard67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 13h52   #2
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
Bonjour,

Je l'ai modifié ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Function ArrondiSup(ByVal TargetValue As Single, ByVal MaxValueToZero As Single, Optional ByVal Position As Integer = 2) As Single
Dim intTemp                                            As Integer
Dim sngRoundResult                                     As Single
    intTemp = 10 ^ Position
    sngRoundResult = (TargetValue \ intTemp - Not (TargetValue Mod intTemp = 0)) * intTemp
    If TargetValue <= MaxValueToZero Then
        sngRoundResult = 0
    End If
    ArrondiSup = sngRoundResult
End Function
Ce qui donne :
Code :
1
2
3
4
5
6
?ArrondiSup(501,50)
 600 
?ArrondiSup(49,50)
 0 
?ArrondiSup(89,50)
 100
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 15h02   #3
Membre du Club
 
Inscription : décembre 2006
Messages : 222
Détails du profil
Informations personnelles :
Âge : 58

Informations forums :
Inscription : décembre 2006
Messages : 222
Points : 61
Points : 61
Merci argyronet pour ta solution.

Comme j'active la fonction depuis un champ

Code :
A Facturer: ArrondiSup([Expr1];2)
Je ne sais pas ou placer ce code :

Code :
1
2
3
4
5
6
?ArrondiSup(501,50)
 600 
?ArrondiSup(49,50)
 0 
?ArrondiSup(89,50)
 100
Car sans ce code :
11426 me donne 11500 au lieu de 11400
6325 me donne 6400 au lieu de 6300

Merci pour ton aide
Bernard67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 15h33   #4
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
C'est une fonction qui arrondie au supérieur donc 11426 donnera 11500 au même titre que 6325 donnera 6400.
Code :
1
2
3
4
5
6
7
 
?ArrondiSup(501,50)
 600 
?ArrondiSup(49,50)
 0 
?ArrondiSup(89,50)
 100
est exécuté dans la fenêtre de debogage.
Dans ton cas ce sera :
Code :
A Facturer: ArrondiSup([Expr1];50)
2 étant affecté par défaut pour définir l'arrondi à la centaine...

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 16h11   #5
Membre du Club
 
Inscription : décembre 2006
Messages : 222
Détails du profil
Informations personnelles :
Âge : 58

Informations forums :
Inscription : décembre 2006
Messages : 222
Points : 61
Points : 61
Je me suis mal exprimé car les valeurs comme :

11426,46235 doivent etre arrondi a la centaine inferieure = 11400
6325,83832 doivent etre arrondi a la centaine inferieure = 6300

Pour les valeurs sup c'est OK ainsi que pour les valeurs inferieures a 50 = 0

Merci pour l'aide
Bernard67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 16h40   #6
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
Humm, en effet, ce n'était pas clair
Comment la fonction doit-elle choisir entre ArrondiSup et ArrondiInf car là, tu ne donnes pas les règles ?

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 16h52   #7
Membre du Club
 
Inscription : décembre 2006
Messages : 222
Détails du profil
Informations personnelles :
Âge : 58

Informations forums :
Inscription : décembre 2006
Messages : 222
Points : 61
Points : 61
C'est un champ qui s'appelle"FACTURATION" qui comporte des montants avec des décimales.
A coté de ce champ, je dois le decoder, à la centaine superieure ou inferieure ou = à 0 si le montant est inferieur à 50,0

=ArrondiSup([FACTURATION];50)

Avec la fonction que tu m'a donné cela fonctionne pour les montants supérieurs et aussi pour ceux qui doivent etre = 0
Bernard67 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 02h29.


 
 
 
 
Partenaires

Hébergement Web