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

VBA Access Discussion :

Fonction WorksheetFunction.Floor d'Excel vers Access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2024
    Messages : 6
    Par défaut Fonction WorksheetFunction.Floor d'Excel vers Access
    Bonjour à tous

    J'ai une fonction VBA récupérée d'Excel que je souhaiterai intégrer dans un programme ACCESS.
    Mon seul soucis est que je ne saisi pas le principe de la fonction Excel qui, à priori, est une ancienne fonction d'Excel.

    Cette fonction est WorksheetFunction.Floor(arg1, Arg2) et elle est intégrée dans une fonction de calcul suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Function calcJD(year, month, day)
     
     
    Dim A As Double, B As Double, JD As Double
     
            If (month <= 2) Then
             year = year - 1
             month = month + 12
            End If
     
            A = Application.WorksheetFunction.Floor(year / 100, 1)
            B = 2 - A + Application.WorksheetFunction.Floor(A / 4, 1)
     
            JD = Application.WorksheetFunction.Floor(365.25 * (year + 4716), 1) + Application.WorksheetFunction.Floor(30.6001 * (month + 1), 1) + day + B - 1524.5
            calcJD = JD
     
     
            If month = 13 Then
             month = 1
             year = year + 1
            End If
            If month = 14 Then
             month = 2
             year = year + 1
            End If
     
    End Function
    Je suppose qu'on peut remplacer ça par une ou imbrication de fonctions VBA mais vu que je ne saisi pas ce que fait exactement cette fonction Excel I Am Lost !!!

    Alors HELP
    Merci

  2. #2
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    bonjour,
    ci-joint un exemple d'utilisation de ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function UseXLfunctionFloor(parm1, parm2)
    ' comment utiliser Floor de WorksheetFunction de Excel dans Access:
    Dim oApp As Object:    Set oApp = CreateObject("excel.application")
     
    UseXLfunctionFloor = oApp.WorksheetFunction.Floor(parm1, parm2)
     
    oApp.Quit: Set oApp = Nothing
    End Function
    ? UseXLfunctionfloor(1.58,0.1)
    1,5

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2024
    Messages : 6
    Par défaut
    Merci de cette réponse.

    J'avais aussi envisagé de passer par un objet Excel mais il doit bien y avoir une correspondance VBA de cette satanée fonction non?

  4. #4
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    il doit bien y avoir une correspondance VBA de cette satanée fonction non?
    je ne vois pas en quoi ce serait gênant d'utiliser une fonction d'une autre application ...
    mais la question que je me pose est: que renvoie la fonction calcJD et à quoi correspond le résultat ?
    voilà ce que j'obtiens quand je la lance avec la date du jour:
    ?calcjd(2024,1,3)
    2460312,5

  5. #5
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    en déboguant la fonction calcJD, je pense que ce qui se rapprocherait le plus de la fonction Floor serait Int() ou Fix()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function calcJDVBA(year, month, day)
    Dim A As Double, B As Double, JD As Double
     
    If (month <= 2) Then
    year = year - 1
    month = month + 12
    End If
     
    A = Fix(year / 100)
    B = 2 - A + Fix(A / 4)
     
    JD = Fix(365.25 * (year + 4716)) + Fix(30.6001 * (month + 1)) + day + B - 1524.5
    calcJDVBA = JD
     
    ' à quoi sert ce code  ?
    If month = 13 Then
    month = 1
    year = year + 1
    End If
    If month = 14 Then
    month = 2
    year = year + 1
    End If
     
    End Function
    en tout cas, cela donne le même résultat:
    ?calcjdvba(2024,1,3)
    2460312,5
    ?calcjd(2024,1,3)
    2460312,5
    à tester

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2024
    Messages : 6
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    en déboguant la fonction calcJD, je pense que ce qui se rapprocherait le plus de la fonction Floor serait Int() ou Fix()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function calcJDVBA(year, month, day)
    Dim A As Double, B As Double, JD As Double
    
    If (month <= 2) Then
    year = year - 1
    month = month + 12
    End If
    
    A = Fix(year / 100)
    B = 2 - A + Fix(A / 4)
    
    JD = Fix(365.25 * (year + 4716)) + Fix(30.6001 * (month + 1)) + day + B - 1524.5
    calcJDVBA = JD
    
    ' à quoi sert ce code  ?
    If month = 13 Then
    month = 1
    year = year + 1
    End If
    If month = 14 Then
    month = 2
    year = year + 1
    End If
    
    End Function
    en tout cas, cela donne le même résultat: à tester

    Pour répondre à ta question sur l'utilité de la fin du code, la réponse est: Il est trop tôt pour moi pour comprendre, et c'est passablement compliqué pour un néophyte comme moi en Astronomie et calculs associées.

    Si je résume cette fonction fait partie d'un "lot" d'autres fonctions permettant, à partir d'une latitude, d'une longitude donnée et d'une date de déterminer l'heure de lever et de coucher de soleil !!!
    La fonction CalcJD permet par exemple de calculer le jour Julien de la date Courante. Le Zéro étant si j'ai tout compris le 1er janvier -4712 à 12 heures. C'est très utilisé en Astronomie pour une raison qui m'échappe encore.

    Je tenterai de comprendre les calcul un peu plus tard bien que je pense que ce soit en dehors de ma juridiction.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    je ne vois pas en quoi ce serait gênant d'utiliser une fonction d'une autre application
    Instancier une application pour n'en utiliser qu'un nombre limité de fonctionnalités, c'est "un peu" overkill.

  8. #8
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour Phils67,

    Pour répondre à votre question :
    Je suppose qu'on peut remplacer ça par une ou imbrication de fonctions VBA mais vu que je ne saisi pas ce que fait exactement cette fonction Excel I Am Lost !!!
    Vous trouverez l'explication ICI

    Bonne journée

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2024
    Messages : 6
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Instancier une application pour n'en utiliser qu'un nombre limité de fonctionnalités, c'est "un peu" overkill.
    C'est mon avis également mais la liberté étant ce qu'elle est chacun fait comme il l'entend.

  10. #10
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    PAS bonjour,
    Citation Envoyé par deedolith Voir le message
    Instancier une application pour n'en utiliser qu'un nombre limité de fonctionnalités, c'est "un peu" overkill.
    oui, c'est vrai qu'avec les machines actuelles équipées de 8 malheureux bits ça risque de saturer la mémoire ...

  11. #11
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Bonjour,

    En effet au premier abord on pourrait se dire pourquoi instancier un application alors qu'on utilise qu'une fonction ? Mais quand on connait le modèle Office en général cette question/remarque ne devrait pas se poser.

    Excel.WorksheetFunction n'étant pas exposé, la seule solution pour utiliser une fonction Excel c'est encore d'instancier l'application. Donc createobjet("Excel.Application") et tant pis pour notre propre processeur 8bits.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  12. #12
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    bonsoir loufab,
    Citation Envoyé par loufab Voir le message
    Bonjour,

    En effet au premier abord on pourrait se dire pourquoi instancier un application alors qu'on utilise qu'une fonction ? Mais quand on connait le modèle Office en général cette question/remarque ne devrait pas se poser.

    Excel.WorksheetFunction n'étant pas exposé, la seule solution pour utiliser une fonction Excel c'est encore d'instancier l'application. Donc createobjet("Excel.Application") et tant pis pour notre propre processeur 8bits.

    Cordialement,
    j'adhère ....

Discussions similaires

  1. Pb de transfert de fonction de excel vers access
    Par Frollik72 dans le forum Access
    Réponses: 4
    Dernier message: 04/06/2015, 15h06
  2. Importer le contenu d'une cellule Excel vers Access
    Par deaqu1 dans le forum Access
    Réponses: 7
    Dernier message: 05/11/2005, 15h26
  3. Récupérer une sheets dans excel vers access sous vba
    Par odbee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/10/2005, 00h30
  4. Problème champ après import d'excel vers access
    Par David M dans le forum Access
    Réponses: 6
    Dernier message: 16/10/2005, 11h53
  5. Réponses: 6
    Dernier message: 19/09/2005, 12h55

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