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 :

Fonctions et Re-calcul


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut Fonctions et Re-calcul
    Bonjour,

    j ai developpe la fonction ci-dessous qui marche bine.Toutefois des qu un recalcul doit se produire la fonction affiche une erreur VALUE et il faut aller de nouveau sur le champ pour le re-valider et cette fois la fonction calcule et affiche une valeur.

    une idee?

    Merci.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function DVVALUE1(cusip As Variant) As Variant
    Dim b As Double
     
     Set R = Range("A:A").Find(cusip).Offset(3, 2)
     For Each c In Range(R, R.End(xlDown))
     a = Run([USA_CALC_DF], Range(c.Offset(0, -1), c.Offset(0, -1)), Range("KESCURVE"), 3, 1)
     z = Run([USA_CALC_DF_SPREAD2], Range(c.Offset(0, -1), c.Offset(0, -1)), Range("KESCURVE"), 3, 1, -0.0001, 100)
     
     b = b + c * (a(1) - z(1))
     
     Next
     DVVALUE1 = b
    End Function

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Déjà, avant ta boucle, j'ajouterais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If not R is Nothing then
        For Each c In Range(R, R.End(xlDown))
            'Ton code
        Next
    Endif
    T'évitera une erreur si R n'est pas trouvé
    Ensuite... on verra ce qu'il en ressort...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Déjà, avant ta boucle, j'ajouterais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If not R is Nothing then
        For Each c In Range(R, R.End(xlDown))
            'Ton code
        Next
    Endif
    T'évitera une erreur si R n'est pas trouvé
    Ensuite... on verra ce qu'il en ressort...

    j ai rajoute mais toujours meme probleme, le re-calcul automatique produit une erreur que seul peut solutionner la re-validation de la cellule.

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Essaye de mettre
    comme ceci pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.Volatile
    Set R = Range("A:A").Find(cusip).Offset(3, 2
    Starec

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    merci.

    y a un petit progres apres ce dernier ajout.

    je suis toujours oblige de re-valider la cellule mais toutes les cellules ayant la meme fonction sont alors re-calcules automatiquement. C est un peu comme si la fonction avait besoin d etre re-initialiser une fois.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Est-ce que par hasard dans les Options Excel le calcul automatique serait désactivé ?

    Starec

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    non il est active.

    en fait ca marche bien quand il est desactive puisque tout re-cacul necessite un F9 mais des que c est en mode automatique le re-calcul genere une erreur

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je ne sais pas si on peut faire ça dans une fonction mais...
    essaie de le désactiver avant ta formule et ré-active-le après.
    Sans garantie aucune...

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Ta fonction active deux macros. Il se peut que le problème vienne de là.

    Que font ces deux macros?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    Merci.

    Je pense que tu as peut etre raison.

    ces deux macros sont en fait des add-ins fournis par une societe externe, qui basiquement calcule un array de valeurs.

    cela voudrait dire que deux add-ins ne peuvent pas cohabiter dans une fonction ce qui est quand meme tres genant.

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Je ne sais pas si on peut faire ça dans une fonction mais...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Worksheets(1).EnableCalculation = False
    'et après ta formule
    Worksheets(1).EnableCalculation = True
    Worksheets(1).Calculate

  12. #12
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    j ai fais comme cela (voir ci dessous) mais dans ce cas la ca ne calcule plus rien.

    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
    Public Function DVVALUE1(cusip As Variant) As Variant
    Dim b As Double
    Application.Volatile
    Worksheets("BONDS").EnableCalculation = False
     
     Set R = Range("A:A").Find(cusip).Offset(3, 2)
     If Not R Is Nothing Then
     For Each c In Range(R, R.End(xlDown))
     a = Run([USA_CALC_DF], Range(c.Offset(0, -1), c.Offset(0, -1)), Range("KESCURVE"), 3, 1)
     z = Run([USA_CALC_DF_SPREAD2], Range(c.Offset(0, -1), c.Offset(0, -1)), Range("KESCURVE"), 3, 1, -0.0001, 100)
     
     b = b + c * (a(1) - z(1))
     
     Next
     End If
     DVVALUE1 = b
     
     Worksheets("BONDS").EnableCalculation = True
    Worksheets("BONDS").Calculate
    End Function

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ça ne m'étonne qu'à moitié tout doit dépendre effectivement de ce qu'il y a dans tes deux macros...
    Dédolé mais je n'ai rien de mieux.
    Bonne chance

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/07/2008, 19h41
  2. Une fonction pour les calculs statistiques
    Par Platon93 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 18/06/2008, 15h06
  3. Creer une fonction pour un calcul
    Par micrak11 dans le forum C++
    Réponses: 7
    Dernier message: 18/01/2008, 08h54
  4. Fonction de domaine - Calcul de cumul avec filtre "date et heure".
    Par Fabrice7627 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/08/2007, 05h16
  5. fonction en excel : calcul sur date
    Par bertrand_declerck dans le forum Excel
    Réponses: 1
    Dernier message: 06/11/2006, 13h02

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