VBA - Arrondi au nombre supérieur

Résolu
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014 - 10 avril 2012 à 22:37
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014 - 11 avril 2012 à 18:29
Bonjour,
Je cherche à trouver l'arrondi supérieur d'un nombre en VBA ACCESS.
La fonction existe dans Excel (roundup).
Mais je n'arrive pas à appeler application.worksheetfunction
Quelle référence faut-il "cocher" pour avoir accès à ces éléments ?
Sinon, existe-t-il un équivalent dans VBA ?

Damedom Sologne

12 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 avril 2012 à 07:58
Bonjour,
Je cherche à trouver l'arrondi supérieur d'un nombre en VBA ACCESS.
La fonction existe dans Excel (roundup)
l'équivalent exact VBA de cette fonction s'écrit simplement, ainsi :

Public Function arrsup(nb As Variant, nbdec As Integer) As Variant
arrsup = -Int(-nb * 10 ^ nbdec) / 10 ^ nbdec
End Function


a
ppelable ainsi (exemple) :
 Dim nb As Double
 nb = 12.1111
 
 MsgBox arrsup(nb, 0)


Il est clair que le nombre à traiter doit être de type numérique (donc le . comme séparateur décimal)
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
1
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
10 avril 2012 à 23:08
Bonjour,

Quelle est ta version d'Excel ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014
11 avril 2012 à 09:22
Merci.
Je travaille dans Access, donc je n'ai pas cru bon de noter ma version d'Excel. Dans l'aide en ligne d'Access, rien pour arrondi, sauf la fonction round. Comme ce que je cherche existe dans Excel, je cherchais à y avoir accès en utilisant WorksheetFunction, mais je n'arrive pas à trouver la "référence" qui la rend disponible.
la solution de la calculer (je ne suis pas une bête en maths) ne m'avait pas paru la plus simple, mais elle fonctionne très bien.

Damedom Sologne
0
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
11 avril 2012 à 12:53
Bonjour,

Si tu travailles en Access, c'est normal que les fonctions Excel te soient inaccessible ...
D'où l'utilité d'être précis dès le début.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014
11 avril 2012 à 14:33
Euh, c'était quand même inclus dans ma première phrase "Je cherche à trouver l'arrondi supérieur d'un nombre en VBA ACCESS"
Par ailleurs de nombreuses fonctions Excel existent en VBA Access, à condition d'ajouter les références idoines. D'où ma question.

Damedom Sologne
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 avril 2012 à 16:20
à condition d'ajouter les références idoines

ajouter des références à quoi ? à Excel ? et ainsi rendre ton appli Access dépendante ? ===>> pas recommandé du tout !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en complément et jamais en substitution de l'aide en ligne.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 avril 2012 à 16:31
Pour que tu te rendes mieux compte.
Pour utiliser Worksheetfunction (qui, sous VBA/Excel, est un objet), il te faudrait écrire quelque chose comme ceci, en ayant coché la référence Excel :

dim toto As New Excel.Application
dim titi As WorksheetFunction
dim ret As double
Set titi = toto.WorksheetFunction
ret = titi.Roudnup( ..ton-nombre.,.nb-decimales..)
puis zigouiller par
set titi = nothing
set toto =  nothing


ou encore utiliser le late binding (en lieu et place de cocher la référence à Excel)

Tu te rends compte ?
Et tu serais largement dépendant, pour si peu , de la présence de Excel sur la machine !
Ce n'est pas raisonnable du tout.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en complément et jamais en substitution de l'aide en ligne.
0
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014
11 avril 2012 à 17:29
'déclaration des variables
Public dbexcelpath As String
Public xl As Excel.Application
Public xlbook As Excel.workbook
Public xlsheet As Excel.worksheet

'initialisation des variables
dbexcelpath = "C:\monadresse\toto.XLS"
Set xl = CreateObject("Excel.Application")
Set xlbook = GetObject(dbexcelpath)
xl.Visible = True
xlbook.Windows(1).Visible = True
dim dbtst2 as string
'dbtst2 = nom de l'onglet dans la feuille Excel, passé en paramètre

'routine appelée n fois par un call, en fonction du paramètre dbtst2
dbtst1 = "select * from FICHIER order by champ1, champ2"
Set xlsheet = xlbook.Worksheets(dbtst2)
Set rsreq = DB.OpenRecordset(dbtst1, dbOpenDynaset)
rsreq.OpenRecordset
xlsheet.Range("A5").CopyFromRecordset rsreq
rsreq.Close
xlbook.Save
' nettoyage
set xlsheet = nothing
set xlbook = nothing
set xl = nothing

Je n'ai rien trouvé d'autre, à ce jour, pour aller écrire dans divers onglets (préexistants) d'un fichier Excel lui-même existant.
As-tu une autre idée ?

C'est vrai que cela me rend dépendante d'Excel, et que cela m'ennuie. Mais, du coup, dépendante pour dépendante, il m'arrive de tenter d'utiliser les fonctions Excel. Grâce à ton exemple j'y suis arrivée.

Peux-tu m'en dire plus (en fait je ne connais pas) sur le late binding ?

Damedom Sologne
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 avril 2012 à 17:48
Tu passes là à un autre sujet (et on ne traite ici qu'un point spécifique et isolé à la fois)
Le late binding n'a nul besoin de références cochées !
Exemple :

Dim xl As Object, ff As Object
  Set xl = CreateObject("Excel.Application")
  Set ff = xl.worksheetfunction
  MsgBox ff.RoundUp(111.11, 1)


suffit à lui seul

Le reste est identique à ce que tu devrais faire avec des références cochées !
Le principe est simple : Création des objets nécessaires puis utilisation de ces objets.
En peu de mots : chaque fois que tu utilises une propriété, une fonction, etc ... d'un objet ainsi "piloté", tu le fais précéder de l'objet concerné (dans l'exemple ci-dessus : ff.RoundUp pour utiliser la fonction RoundUp de l'objet ff, lui-même étant défini ainsi : xl.worksheetfunction où xl est l'objet Appli Excel, etc ...)
Voilà le principe (clair)
Je ne veux pas transformer cette discussion en cours complet. Ce que je t'en dis là devrait suffire à déclencher des réflexes (au demeurant simples)
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en complément et jamais en substitution de l'aide en ligne.
0
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014
11 avril 2012 à 18:04
Merci beaucoup de cette explication.
Je manipule parfois les objets access (et leurs méthodes et propriétés) tels que les contrôles, mais je suis moins à l'aise avec des objets tels que l'objet Appli Excel. C'est maintenant beaucoup plus clair.
Enfin plus exactement grâce à toi j'ai de quoi faire des tests et travailler.
Par ailleurs, y a-t-il un moyen d'écrire dans un onglet spécifique d'une feuille Excel sans rendre l'appli Access dépendante d'Excel ? Ca m'intéresserait .....


Damedom Sologne
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 avril 2012 à 18:11
Non, bien sûr !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en complément et jamais en substitution de l'aide en ligne.
0
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014
11 avril 2012 à 18:29
Je suis loin d'être aussi savante que vous, et j'ai beaucoup de mal à faire la différence entre ce que je ne sais pas faire et ce qu'il n'est pas possible de faire. Donc je doute toujours et me renseigne.
Merci pour tout

Damedom Sologne
0
Rejoignez-nous