VBA - Arrondi au nombre supérieur [Résolu]

damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 10 avril 2012 à 22:37 - Dernière réponse : damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention
- 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
Afficher la suite 

12 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 11 avril 2012 à 07:58
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscription 22 avril 2018 Dernière intervention - 10 avril 2012 à 23:08
0
Utile
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
---
Commenter la réponse de NHenry
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 11 avril 2012 à 09:22
0
Utile
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
Commenter la réponse de damedom41
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscription 22 avril 2018 Dernière intervention - 11 avril 2012 à 12:53
0
Utile
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
---
Commenter la réponse de NHenry
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 11 avril 2012 à 14:33
0
Utile
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
Commenter la réponse de damedom41
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 11 avril 2012 à 16:20
0
Utile
à 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.
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 11 avril 2012 à 16:31
0
Utile
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.
Commenter la réponse de ucfoutu
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 11 avril 2012 à 17:29
0
Utile
'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
Commenter la réponse de damedom41
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 11 avril 2012 à 17:48
0
Utile
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.
Commenter la réponse de ucfoutu
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 11 avril 2012 à 18:04
0
Utile
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
Commenter la réponse de damedom41
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 11 avril 2012 à 18:11
0
Utile
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.
Commenter la réponse de ucfoutu
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 11 avril 2012 à 18:29
0
Utile
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
Commenter la réponse de damedom41

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.