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

Macros et VBA Excel Discussion :

Equiv/Match qui ne fonctionne pas sur un tableau de date [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Asset Management
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Asset Management
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Equiv/Match qui ne fonctionne pas sur un tableau de date
    Bonjour à tous,

    Je suis en train de réaliser une fonction matricielle qui doit me donner les performances calendaires associés à une série de date et à une série de données entrés comme paramètre de la fonction.

    A l'intérieur de cette fonction, j'ai besoin d'utiliser la fonction .match pour obtenir la ligne du tableau correspondante à une date pour ensuite pouvoir calculer une performance.

    Or cette fonction ne me renvoi rien, je suppose que c'est à cause du format mais je ne sais pas comment et où le changer...

    Est-ce que vous auriez une solution?

    Voici mon code, en gras l'endroit où ça coince. J'espère que je suis clair


    Merci d'avance,

    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
    Function OSScal(SerieDates As Variant, SerieReturns As Variant) As Variant
    Dim TR As Variant
    Dim TD As Variant
    Dim dd As Date
    Dim df As Date
    Dim n As Integer
    Dim ad As Integer
    Dim af As Integer
    Dim V() As Variant
    Dim nby As Integer
    Dim i As Integer
    Dim dda As Date
    Dim dfa As Date
    Dim maligdeb As Variant
    Dim maligfin As Variant
    
    '----------On créé les variables------------------------------------------------------
    TR = SerieReturns
    TD = SerieDates
    n = UBound(TD)
    dd = TD(1, 1)
    df = TD(n, 1)
    ad = Year(dd)
    af = Year(df)
    nby = af - ad + 1
    
    '------------ On remplit le tableau---------------------------------------------------
    ReDim V(1 To nby, 1 To nby)
    dfa = df
    
    For i = 1 To nby
    V(1, i) = af + 1 - i '------on rempli la première colonne avec les années
    
    'on cherche les dates correspondantes à l'année recherchée
    dda = Application.WorksheetFunction.Max(dd, DateSerial(Year(dfa) - 1, 12, 31))
    
    maligdeb = Application.WorksheetFunction.Match(dda, TD, 1)
    maligfin = Application.WorksheetFunction.Match(dfa, TD, 1)
    
    V(2, i) = TR(maligfin, 1) / TR(maligdeb) - 1 '----on calcule la perf de la période et on la met dans le tableau
    
    dfa = dda '------on reset pour l'année n-1
    Next i
    
    '------------On applique la fonction
    OSScal = Application.Transpose(V)
    End Function

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut
    Hello,

    que valent les valeurs que tu testes ? Si tu passes par une formule dans une cellule, y a-t-il un resultat ou un #N/A ?

    Pense a mettre les balises CODE dans tes messages stp, texte + # dans l'interface d'édition =]
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TR =Format(SerieReturns,"yyyy-mm-dd")
    TD =Format( SerieDates,"yyyy-mm-dd")

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Asset Management
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Asset Management
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos réponses rapides!

    @dysorthographie

    c'est aussi la première chose que j'ai testée mais ça ne fonctionne pas et me renvoi un #valeur!

    @jean philippe
    la série date est une série de dates classées par ordre croissante au format date
    la série returns est un série de nombre au format nombre

    les valeurs testées dda et dfa sont les bonnes quand je les sors sur ma feuille excel. Mais elles sortent en format standard au lieu d'être en format date.
    Du coup, si je fais un equiv ou recherchev via excel sur la valeur retourné vs ma colonne de date, il me sort un #NA comme si la date n'y était pas. (alors que si je fais le même teste sur une cellule dans laquelle j'écris moi même la date ca fonctionne).

    J'imagine que c'est le même problème qui se produit sous vba, c'est à dire un format différent entre ce que j'ai dans mon tableau de date TD et ce que je recherche comme valeurs dda/dfa. Sachant que les valeurs dda/dfa sont recréées dans la fonction comme cela: dda = Application.WorksheetFunction.Max(dd, DateSerial(Year(dfa) - 1, 12, 31))
    ce qui devrait bien me donner une date non?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Asset Management
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Asset Management
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    après m'être bien cassé la tête j'ai tenté de passer par mon range de départ (seriedates) au lieu de mon tableau TD et miracle ça marche!
    c'était donc bien un problème de format dans le tableau TD, mais je ne comprends pas bien pourquoi la solution proposée avec FORMAT n'a pas marché...
    anyways merci pour votre aide!

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut
    A noter du coup que tes variables, lorsque tu es en mesure de les typer correctement, fais le ici TD AS Range avec Set TD=...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Asset Management
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Asset Management
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    oui tu as raison =)

    Question annexe, je crois que c'est impossible, mais bon on ne sait jamais.
    Est-ce qu'on peut choisir le format de sortie d'une fonction?

    Par ex ma fonction matricielle me sort ceci (ce qui est déjà très bien!), mais est-ce que ce serait possible de sortir la colonne 2 en %? et si oui comment?
    (directement via la fonction sans passer par un sub)

    2016 0,061712846
    2015 0,025839793
    2014 0,106504646
    2013 0,071209801
    2012 0,066122449
    2011 0,057858377
    2010 0,016681299
    2009 0,1598778
    2008 -0,097426471
    2007 0
    2006 0,074037512

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut
    Tu changes simplement le format de ta colonne =]
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Asset Management
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Asset Management
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Jean-Philippe André Voir le message
    Tu changes simplement le format de ta colonne =]
    je sais le faire via un sub, mais pour appliquer un format à la cellule cible d'une fonction je sèche complètement...
    tu aurais un exemple simple pour que je comprenne comment ça marche?

    par ex pour que cette fonction renvoie un nombre sous le format:X,XX% ou lieu de 0,XXXXXXXXX.
    après je pourrais appliquer à mon autre exemple plus compliqué tout seul =)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function OSSperf(SerieReturns As Variant) As Variant
    Dim TR As Variant
    Dim n As Integer
    Dim result As Double
     
     
       TR = SerieReturns
       n = UBound(TR)
       result = TR(n, 1) / TR(1, 1) - 1
       OSSperf = result
     
     
    End Function

    merci bcp!

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut
    Ta valeur est un numerique, c'est dans le format de ta cellule que tu t'amuses a faire apparaitre les %.

    Sinon si tu forces le %, ca retournera un texte et non plus un numerique
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Asset Management
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Asset Management
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    oui mais c'est justement ma question, est ce que la fonction pourrait changer le format de la cellule d'arrivée ^^?

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut
    Une fonction retourne une valeur, donc en principe tu dois faire un =TaFonction(TesParams) dans ta cellule.

    Si tu changes un element en perdant le focus, tu risque d'avoir un #VALEUR.

    Si t uveux faire ca sur plusieurs cellules les unes a la suite des autres, tu fais une sub qui met les valeur + changement de NumberFormat.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  13. #13
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    est ce que la fonction pourrait changer le format de la cellule d'arrivée ^^?
    Non, une fonction ne peut pas changer son environnement, ce n'est pas son but.
    eric

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Asset Management
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Asset Management
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    oui c'était aussi ce que je pensais.
    finalement j'ai "triché" en changeant le résultat avec un FORMAT(X,"0.00%"), c'est moche car ça ne change pas le format de la cellule au sens excel du terme, mais ca affiche bien ce que je veux et comme je ne recalcule par derrière sur ce résultat ca me suffit.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2010, 13h23
  2. Script JSP qui ne fonctionne pas sur n'importe quel poste
    Par vannary dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 18/12/2006, 11h56
  3. Requete qui ne fonctionne pas sur toutes les versions de MySQL
    Par goldorax113 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h04
  4. requête match qui ne fonctionne pas.
    Par sam01 dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/05/2006, 20h28
  5. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08

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