Problème function sub...

Engue

XLDnaute Nouveau
Bonjour,

Je voudrais créer une fonction COURS à laquelle je donne une date de début une date de fin et le nom de l'entreprise et elle me sort la série des cours entre ces deux dates dans une autre feuille.
Je ne comprends pas où est le problème, quand je la lance depuis la feuille =cours("11/11/2011";"11/04/2012";"BCP ") ça me met ##Valeur## et ça ne fait rien, et quand je la lance depuis l'éditeur de macro avec la subroutine courrrs ça marche.. de l'aide s'il vous plait!

merci


Code:
Sub courrrs()

 x = cours("11/11/2011", "11/07/2012", "BCP ")

End Sub

Function cours(datdeb As String, datfin As String, ticker As String) As String
    Dim i As Integer, j As Integer, k As Integer, l As Integer
    i = 2
    While CDate((Feuil2.Cells(i, 1)) <= CDate(datdeb)) And (i <= CInt(Feuil3.Range("B2")))
        i = i + 1
    Wend
MsgBox (i)
    If CDate(datdeb) = (Feuil2.Cells(i - 1, 1)) Then
        j = i - 1
    Else
        m = InputBox("La date la plus proche est " & Feuil2.Cells(i - 1, 1) & " écrire oui pour l'utiliser")
        j = i - 1
    End If
    While (CDate(Feuil2.Cells(i, 1)) <= CDate(datfin)) And (i <= CInt(Feuil3.Range("B2")))
        i = i + 1
    Wend
MsgBox (i)
    If CDate(datfin) = CDate(Feuil2.Cells(i - 1, 1)) Then
        k = i - 1
    Else
        m = InputBox("La date la plus proche est " & Feuil2.Cells(i - 1, 1) & " écrire oui pour l'utiliser")
        k = i - 1
    End If
    indticker = Application.WorksheetFunction.HLookup(ticker, Feuil3.Range("D1" & ":" & "CC2"), 2, False)


    For l = j To k
        Feuil20.Cells(l - j + 1, 1) = CDate(Feuil2.Cells(l, 1))
        Feuil20.Cells(l - j + 1, 2) = CDbl(Feuil2.Cells(l, indticker))

    Next l
    Feuil20.Activate
cours = "fait"
End Function
 

Dranreb

XLDnaute Barbatruc
Re : Problème function sub...

Par l'exécution d'une Sub. De quel genre ? Ça, ca dépend d'un tas de facteurs qu'on ne connait pas !

P.S. Bonsoir Carcha… Non mais ça tu aura beau faire, que ce soit avec humour ou sans, tant qu'il n'y aura pas un très gros encadré en très gros et gras caractères dans la charte, la moitié des demandeurs ne joindra jamais de fichier !
À +
 
Dernière édition:

Engue

XLDnaute Nouveau
Re : Problème function sub...

re


incorrigibles ces demandeurs ;)

Alors voilà le fichier, je voudrais que quand je tape ma fonction =cours("datedebut";"datefin";"nom action") la série apparaisse dans la feuille séries (feuil20). Merci pour votre aide.

Désolé je n'avais pas compris que vous vouliez le fichier..
 

Pièces jointes

  • Nouveau modèle final - Copie.xlsm
    258.1 KB · Affichages: 33

Dranreb

XLDnaute Barbatruc
Re : Problème function sub...

Ce n'est pas possible.
Le mieux c'est de mettre un bouton sur la feuille d'où vous voulez le lancer. Créez un Userform pour saisir la date de début, la date de fin et le nom de l'action et effectuer l'opération en cliquant sur un bouton de l'userform.

À la réflexion, ce n'est pas rigoureusement impossible, pourvu de ne pas tenter d'effectuer le traitement dans l'évaluation de la fonction. Une procédure Worksheet_Change écrite dans le module de la feuille pourrait détecter la frappe de la formule, analyser les paramètres et l'effectuer. Mais ce serait bizarre comme système !
À +
 
Dernière édition:

Engue

XLDnaute Nouveau
Re : Problème function sub...

uhm je vois, en fait pourriez vous m'expliquer pourquoi une fonction ne peut pas changer d'autres cellules que celle où elle est tapée? J'utilise souvent cette fonction j'aurai aimé pouvoir la taper n'importe où dans le classeur et peut être même lui donner l'endroit où la copier ex: =cours(datedebut;datefin;action;Feuil1.range("A1")) plutôt que de devoir revenir à chaque fois sur l'userform... de plus la procédure worksheet_change n'est pas envisageable puisque les séries étant relativement longues, le temps d’exécution est de l'ordre de 5 secondes, si elle doit s’exécuter à chaque fois que je change qqchose...

En tout cas merci, et n'hésitez pas si vous découvrez une solution viable :)
 

Dranreb

XLDnaute Barbatruc
Re : Problème function sub...

Excel fait l'impasse totale et définitive sur toute forme de processus qui conduirait à d'éventuelles modifications de contenus de cellules durant sa phase de calcul. Moi, ça me parait acceptable. Ce serait un coup à ne plus pouvoir s'en sortir à devoir recommencer tout éternellement. Il a déjà bien assez à faire à gérer les références circulaires. Moi ça me plait qu'il y ait, comme un mur indestructible, ce rempart infranchissable contre l'imbécilité humaine !
J'aurais pourtant moi même déjà souhaité qu'il existe une fonction "TelQue" capable de remplacer l'outil Valeur cible. C'est laissé en plan pour un bon moment, chez moi, ce système qui réussirait à éviter que ce soit perçu par Excel comme une référence circulaire, tant le problème est complexe !
La fin de votre discours donne en plus pleine justification à cet excellent interdit absolu. Et si ça ne vous plait pas, ne vous servez plus d'Excel, surtout si aucune des des innombrables solutions viables ne le paraissent à vos yeux !

P.S. Lorsqu'on viole délibérément l'interdit au moyen d'un vrai timer système qui à le malheur de s'exécuter juste au moment des évaluations, cela se traduit par une sortie immédiate et silencieuse d'Excel avec perte, évidemment, de toutes les données.
 
Dernière édition:

Engue

XLDnaute Nouveau
Re : Problème function sub...

Je vous ai remercié, je ne pensais pas que mes propos pouvaient être mal interprétés... Je m'en excuse. Encore merci pour cette explication. J'ai finalement opté pour l'option userform puisque dès que je faisais qqchose sur la feuille la procédure se lançait!

J'ai donc un userform avec des listes déroulantes pour le nom de l'action la date de début et la date de fin, j'aurais voulu que la date de fin s'actualise quand je change la date de début (datedebut_change), par exemple si je choisis le 01/01/2001, toutes les dates de fin inférieures à au 02/01/2001 disparaissent de ma liste déroulante, comment t'y prendrais tu ?
 

Dranreb

XLDnaute Barbatruc
Re : Problème function sub...

mes propos pouvaient être mal interprétés... Je m'en excuse
Il n'y a pas de quoi. Mon ton avait seulement une vocation d'électrochoc pour chasser de votre esprit une mauvaise idée récurrente. Aucune agressivité.
toutes les dates de fin inférieures à au 02/01/2001 disparaissent de ma liste déroulante, comment t'y prendrais tu ?
Renseignez la liste déroulante lors du changement de de la date de début. Travaillez avec des tableaux de Variant, c'est plus rapide. Chargez tout ce qu'il vous faut de la feuille dans un gros tableau par un seul appel à la méthode Range.Value et travaillez avec indices lignes et colonnes.
P.S Mette le remplissage de la liste dans une Private Sub que vous pourrez appeler depuuis différents _Change
À +
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
248