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 :

[VBA]Utiliser les fonctions Excel avec Access


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 57
    Points : 29
    Points
    29
    Par défaut [VBA]Utiliser les fonctions Excel avec Access
    Bonjour,

    Voila j'ai sous Excel une fonction bien pratique, TRI.PAIEMENTS, qui, pour ceux qui ne connaissent pas, permet de calcul un taux de rendement interne. Fin bref... Donc voila, cette fonction marche très bien lorsque je crée un fichier, j'y met des données et que je l'utilise.

    Par contre, si j'ouvre un fichier, que j'en crée un ou autre avec du vba (VBA Access, le fichier étant rempli par des données dans une requête + du code), la fonction n'est pas 'trouvé' par Excel --> #NOM <-- et ensuite, impossible d'avoir la fonction active dans ce fichier meme apres sauvegarde plus réouverture 'à la main'. La seule solution pour la retrouver étant de créer un nouveau fichier (toujours 'à la main') et de faire un copier coller, puis réécrire ma formule.

    Soit dit en passant je perds à peu pres les 3/4 de mes fonctions de calculs lorsque je travail sur un .xls en vba (depuis Access), même apres sauvegarde, donc fichier inutilisable.

    Si quelqu'un sait comment forcer le chargement des autres fonction Excel lors de la création d'une cession par VBA histoire de ne pas me retrouver avec les 3 pauvre fonction de calculs par défault d'excel, je suis preneur, sinon, je suis mal barré

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    voir irr et mirr sous access
    Elle est pas belle la vie ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Oui sauf que la j'ai besoin que cela soit sous Excel...

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Le problème c’est que tri.paiement est une macro complémentaire qui n’est pas utilisable hors de l’appli comme les fonctions intégrées.
    Par contre la méthode valeur cible (goalseek) qui permet d’arriver au même résultat est tout à fait utilisable.
    En fait il conviendrait d’écrire en visual basic une fonction permettant de calculer tri.paiement
    Cela n’a rien de très compliqué, il suffit d’itérer sur t pour annuler la somme des valeurs présentes.
    Si j’ai un moment je m’y emploierais.
    Elle est pas belle la vie ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    En fait j'ai déja fait des fonction d'itération pour mes calculs de rendements...

    Mais faut bien reconnaitre que c'est un peu plus lourds quand c'est moi qui code que quand c'est TRI.PAIEMENTS qui fait le boulot... (bon remarque ca passe niveau timing : ~400 produit pour un peu moins de 6sec de calculs) mais faut bien reconnaitre j'avais un peu la flemme de refaire encore une fois ma fonction...

    Fin bon spa grave je vais me débrouiller...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Euh tant que j'y penses si ca peut interesser des gens, je pose mon code...

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    où ça, où ça ??
    Elle est pas belle la vie ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Attend faut je l'adapte...

    P.S.: je code avec mes coudes donc indulgence needed... ^^

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Bon j'ai eu la flemme de mettre une gestion d'erreur, mais a priori, y'en a pas si on envoie ce qu'il faut


    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    Public Sub RendementDate()
     
        Dim db As DAO.Database
        Dim rstRend, rstPreci As DAO.Recordset
        Dim DatDeb As Date
        Dim Preci, Rang, TRI, Calcul, Sens, Pas As Double
     
        'Macro me permettan de créer la table support pour les calculs
        'fields(0) -> date
        'fields(1) -> descri
        'fields(2) -> flux => entrée (+) sortie (-)
     
        DoCmd.RunMacro "RendementDate"
     
        'on ouvre les recordsets
     
        Set db = DBEngine.OpenDatabase(Application.CurrentProject.FullName)
        'on tri par date
        Set rstRend = db.OpenRecordset("SELECT * FROM RendementDate ORDER BY [Date Opération] ASC")
     
        'on récupère la date de début
        'qui servira tout le long après pour récupérer la durée en année
     
        DatDeb = rstRend.Fields(0)
     
        'j'ouvre un table qui stock le degrès de précision pour mes calculs de rendement
        'sinon suffit juste d'attrbuer une valeur à la variable Precision
     
        Set rstPreci = db.OpenRecordset("SELECT * FROM Calculs")
     
        Preci = rstPreci.Fields(0)
     
        Set rstPreci = Nothing
     
        TRI = 0
        Rang = 0
        Pas = 0.1
        'on lance la boucle général qui continuera jusqu'a ce que le rang
        'actuel est atteint la précision souaitée
        Do Until Rang = Preci
            Calcul = 0
            Do Until rstRend.EOF
                Calcul = Calcul + (rstRend.Fields(2) / ((1 + TRI) ^ (DateDiff("d", DatDeb, rstRend.Fields(0)) / 365)))
                rstRend.MoveNext
            Loop
            rstRend.MoveFirst
     
            'au premier 'tour' on définit dans quel sens on va : si calcul < 0
            'rendement < 0% et vice versa
     
            If Calcul > 0 And TRI = 0 Then
                Sens = 1
            ElseIf Calcul < 0 And TRI = 0 Then
                Sens = -1
            End If
     
            'Maintenant on recherche si on a encadré le TRI
            'C'est a dire lorsqu'il y a un changement de signe sur Calcul
     
            If Calcul < 0 And Sens = 1 Then
                'on reviens au taux de bas de fourchette
                TRI = TRI - (Pas * Sens)
     
                'on divise le pas par 10
                Pas = Pas / 10
     
                'on ajoute 1 a la précision
                Rang = Rang + 1
            ElseIf Calcul > 0 And Sens = -1 Then
                TRI = TRI - (Pas * Sens)
                Pas = Pas / 10
                Rang = Rang + 1
            End If
     
            TRI = TRI + Pas * Sens
     
            'si on envoie de mauvaise donnée, il se peut que le calcul tourne en boucle donc :
            if TRI >= 4 or TRI <= -1 then
                Exit Sub
            end if
        Loop
     
        'j'ouvre le recordset ou je vais écrire ma valeur
        Set rstRend = db.OpenRecordset("SELECT * FROM DateRendement")
     
        rstRend.Edit
            rstRend.Fields(3) = TRI
        rstRend.Update
     
        Set rstRend = Nothing
    End Sub

Discussions similaires

  1. [XPATH] Pouvoir utiliser les fonctions XPath 2.0 avec Java
    Par Phoennyx dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 08/11/2008, 21h53
  2. [vba excel & access] ouvrir feuille excel avec access
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/09/2006, 08h59
  3. Utilisation fonction excel dans ACCESS: Ereur de compilation
    Par mat_lefebvre dans le forum Access
    Réponses: 2
    Dernier message: 22/03/2006, 10h44
  4. [VBA][Débutante] Fonction Excel avec Boucle
    Par Inelukia dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 11/01/2006, 19h31

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