Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2011, 20h33   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : 1
Points : 1
Par défaut Dépassement de Capacité

Bonjour,

J'ai un problème avec un algo de Monte-Carlo. Grosso-modo j'ai une fonction qui doit calculer une variance empirique, et un "Dépassement de capacité" qui s'affiche.

Code :
1
2
3
4
5
6
7
8
9
10
11
Function var_empirique(ByRef g() As Double, ByVal moyenne As Double, ByVal M As Integer) As Double
 
Dim V as Double
V = 0
For i = 1 To M
    V = V + ((g(i) - moyenne) ^ 2) / (M - 1)
    Worksheets("debug").Cells(i, 1).Value = V
Next i
 
var_empirique = V
End Function
Quand ça bug, M vaut 2555 et V vaut 61 et des poussières.. C'est la ligne V=V+ ... qui bug. Du coup je ne comprends pas pourquoi la boucle s'arrête là. V est un double donc ca devrait continuer. Ma boucle est censé aller jusqu'à M=10 000.

Bref, j'ai essayé plein de trucs et rien n'y faire, ca me met toujours un dépassement de capacité. Une idée ?

Merci !

Bonne soirée.
Emilien P. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 20h54   #2
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Code :
V = V + ((g(i) - moyenne) ^ 2) / (M - 1)
Tu donnes
V = 61
M = 2555

Tu ne donnes pas
Moyenne
g(i)

Comment veux tu qu'on puisse te répondre?

Essai de nous donner un exemple d'utilisation de ta fonction avec les données qui font apparaître l'erreur.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 21h06   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : 1
Points : 1
Ben g(i) je peux le donner mais comme il contient 10 000 valeurs c'est compliqué.

En tout cas ce que je peux dire facilement c'est que les (g(i) - moyenne)^2 ca fait des valeurs inférieurs à 0.01 à chaque fois.

J'ai trouvé une solution "temporaire". Au lieu de passer un tableau à ma fonction, j'écrit les données sur une feuille excel et ma fonction les lis directement.

Ca fonctionne mais ... c'est quand même pas très beau :S

PS : D'ailleurs quand j'ai dit M=2555 c'était une erreur. M=10 000. C'est i qui vaut 2555 au moment où ca bug.
Emilien P. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 22h33   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Citation:
Ben g(i) je peux le donner mais comme il contient 10 000 valeurs c'est compliqué.
[...]
C'est i qui vaut 2555 au moment où ca bug
Donc g(2555) aurait suffit
Maintenant si tu es sûr de ton 0.01, inutile de répondre.

Par contre pour trouver ton erreur, une fois ton code en mode débogage, il faut que tu regardes un à un tout les membres de ta formule, utilises des espions si besoin (selection + clique droit Ajouter Espions (Ok))
L'un d'eux doit te renvoyer l'erreur, une fois trouvé lequel, il faudra analyser pourquoi.

Pour le coup de passer par le contenu des cellules, il faut faire attention, quand tu stockes une valeur dans une cellule (d'autant plus un Double), je crois bien que la cellule fait des arrondis bizarres, ce qui pourrait expliquer l’absence de dépassement de capa par la suite... trop de décimal peut-être.

Du coup essais de faire
Code :
V = CDbl(V + ((g(i) - moyenne) ^ 2) / (M - 1))
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h22.


 
 
 
 
Partenaires

Hébergement Web