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 :

Arrêt Subit d'exécution de fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut Arrêt Subit d'exécution de fonction
    Bonjour,
    J'écris un code me permettant de calculer la volatilité
    voici le code

    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
     
    Function CalculVol(MatriceVarCov As Range, Poids As Range) As Double
    Dim TableauMatrice(), TableauCovariance(), TableauVariances(), TableauPoids()
    Dim i As Integer, j As Integer
    Dim SoeVar, MaCov
     
    TableauMatrice = MatriceVarCov.Value 
    TableauPoids=Poids.Value                                     
      If TableauPoids(i) = Empty Then
           TableauPoids(i) = 0
      End If
    ReDim TableauVariances(1 To UBound(TableauMatrice, 1))
        For i = 1 To UBound(TableauMatrice, 1)
            TableauVariances(i) = TableauPoids(i) * TableauPoids(i) * TableauMatrice(i, i)
        Next i
     
    MaCov = 0: SoeVar = 0: i = 0
     
    For i = 1 To UBound(TableauMatrice, 1)
        SoeVar = SoeVar + TableauVariances(i)
            For j = 1 To UBound(TableauMatrice, 1)
                If j > UBound(TableauMatrice, 1) Then GoTo Suite
                MaCov = MaCov + 2 * TableauMatrice(i, j) * TableauPoids(i) * TableauPoids(j)
            Next j
    Next i
    Suite:
    CalculVol = SoeVar + MaCov
    End Function
    Le problème c'est que ma fonction s'arrête à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       If TableauPoids(i) = Empty Then
    et ne me donne aucun résultat. Et quand je met cette partie du code en commentaire, elle s'arrête à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableauVariances(i) = TableauPoids(i) * TableauPoids(i) * TableauMatrice(i, i)
    En fait quand je dis qu'elle s'arrête, ca ve dire qu'elle se comporte comme si j'avais mis Exit Function à ce niveau

    Je ne sais pas pourquoi elle se comporte ainsi. Une idée?
    Thank's

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Se pourrait-il que tes tableaux soient à 2 dimensions ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    n'as tu pas un On Error?
    c'est le cas typique, il y a une erreur donc l'appli quitte la fonction pour ce positionné à la gestion de l'erreur.

    personnellement je n'aime pas les Empty ou les IsEmpty c'est source d'erreur
    je préfère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Trim("" & TableauPoids(i)) <> "" Then

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    En fait j'ai mis Trim ca me fait la même chose.
    Quand j'ai mis On error Resume Next ça ne rempli pas mes tableaux.
    En fait j'ai l'impression que la multiplication d'éléments d'un tableau ne se fait pas ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableauPoids(i) * TableauPoids(i) * TableauMatrice(i, i)
    Parmi mes tableaux sont des matrices de variance covariance, donc j'ai autant de lignes que de colonnes.

  5. #5
    Invité
    Invité(e)
    Par défaut
    place 1 point d’arrêt touche [F9] sur If TableauPoids(i) = Empty Then

    ouvre la fenêtre espion voir image.

    fais glisser avec la sourie ta variable TableauPoids et inspecte la dan cette fenêtre
    Images attachées Images attachées   

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    En fait j'arrive déjà à voir ce détail dans la fenêtre Variables locales et je remarque bien que mon TableauPoids à 16 valeurs. Mais ce qui me chiffonne, c'est que lorsque je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UBound(TableauPoids, 1) 'ou alors 
    UBound(TableauPoids)
    il me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ubound(TableauPoids) = 1
    je ne comprends pas.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Oui car comme tu définis dim TableauPoids(), Excel converti comme si tu demandais un cellule cells(1,1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim TableauPoids(10, 1)
    For i = 0 To UBound(TableauPoids)
    a = CInt(TableauPoids(0, 0)) * CInt(TableauPoids(0, 1))
    Next

Discussions similaires

  1. [Débutant]Comment exécuter une fonction tous les jours
    Par pseudomh dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 21/06/2006, 16h10
  2. exécution de fonction
    Par MANU_2 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 19/09/2005, 16h50
  3. Est-il possible d'exécuter une fonction à partir de fichier
    Par magic8392 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 16/09/2005, 13h59
  4. Arrêt de l'exécution d'une requête MySQL dans DELPHI.
    Par joelmarc dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/10/2004, 16h11
  5. [VB.NET] Exécuter une fonction VB sur un Datagrid
    Par MiJack dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/09/2004, 14h45

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