begin process at 2012 02 15 10:08:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Divers

 > 

Débutants

 > 

VBA Excel, plage trop grande pour calculer ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

VBA Excel, plage trop grande pour calculer ?

lundi 29 septembre 2008 à 12:06:43 | VBA Excel, plage trop grande pour calculer ?

DrDoak

Bonjour,

J'ai rédigé une petite fonction Excel pour calculer une statistique à partir d'un échantillon, d'une plage de données dans ma feuille.
Les calculs sont simples, mais nombreux et fastidieux.
J'ai donc fait ce module ci-dessous.
 
En résumé, je definie le type des variables, je les initialise (à zéro pour la plupart) puis les calculs commencent.

Cette fonction marche bien, MAIS ! si et seulement si je lui donne une plage de moins de 210 valeurs seulement ; au delà, Excel m'assène sa "#VALUE!".

Est-ce que ce sont les premières étapes itératives qui le limitent ?
Je vois bien qu'elles sont laborieuses, mais je n'ai pas trouvé plus simple.

Merci d'avance,



************************************************************­************

Function STATAGOSTINO(rPlage As Range)

Dim n As Long
Dim A As Double
Dim B As Double
Dim C As Double
Dim D As Double
Dim E As Double
Dim F As Double
Dim G As Double
Dim H As Double
Dim J As Double
Dim K As Double
Dim L As Double
Dim Z As Double
Dim Y As Double
Dim O As Double
Dim T As Double
Dim p As Double
Dim q As Double
Dim r As Double
Dim X As Double
Dim s As Double
Dim stat As Double
Dim i As Long

n = rPlage.Cells.Count
A = 0
B = 0
C = 0
D = 0
E = 0
F = 0
G = 0
H = 0
J = 0
K = 0
L = 0
Z = 0
Y = 0
O = 0
T = 0
p = 0
q = 0
r = 0
X = 0
s = 0
stat = 0

For i = 1 To n
X = X + (rPlage.Cells(i) / n)
Next i

For i = 1 To n
s = s + (rPlage.Cells(i) - X) ^ 2
Next i
s = s / (n - 1)
s = s ^ (1 / 2)

For i = 1 To n
p = p + (((rPlage.Cells(i) - X) ^ 3) / n)
Next i

For i = 1 To n
q = q + (((rPlage.Cells(i) - X) ^ 2) / n)
Next i

For i = 1 To n
r = r + ((((rPlage.Cells(i) - X) / s) ^ 4))
Next i

O = p / (q ^ (3 / 2))
A = O * (((n + 1) * (n + 3)) / (6 * (n - 2))) ^ (1 / 2)
B = (3 * (n ^ 2 + 27 * n - 70) * (n + 1) * (n + 3)) / ((n - 2) * (n + 5) * (n + 7) * (n + 9))
C = (2 * (B - 1)) ^ (1 / 2) - 1
D = C ^ (1 / 2)
E = 1 / ((Log(D)) ^ (1 / 2))
F = A / (2 / (C - 1)) ^ (1 / 2)
Z = E * Log((F + (F ^ 2 + 1) ^ (1 / 2)))

T = r * (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3)) - (3 * (n - 1) ^ 2) / ((n - 2) * (n - 3))
G = (24 * n * (n - 2) * (n - 3)) / (((n + 1) ^ 2) * (n + 3) * (n + 5))
H = (T * (n - 2) * (n - 3)) / ((n + 1) * (n - 1) * (G ^ (1 / 2)))
J = ((6 * (n ^ 2 - 5 * n + 2)) / ((n + 7) * (n + 9))) * (((6 * (n + 3) * (n + 5)) / (n * (n - 2) * (n - 3))) ^ (1 / 2))
K = 6 + (8 / J) * ((2 / J) + ((1 + (4 / (J ^ 2))) ^ (1 / 2)))
L = (1 - (2 / K)) / (1 + H * ((2 / (K - 4)) ^ (1 / 2)))
Y = ((1 - (2 / (9 * K)) - (L ^ (1 / 3))) / ((2 / (9 * K)) ^ (1 / 2)))

stat = (Z ^ 2) + (Y ^ 2)

STATAGOSTINO = stat

End Function

************************************************************­***********
lundi 29 septembre 2008 à 14:18:34 | Re : VBA Excel, plage trop grande pour calculer ?

thierry la fronde

Membre Club
Réponse acceptée !
Bonjour

Moi je commencerai par repérer quelle est la ligne qui pose problème. (mode Debug ligne par ligne après la dernière boucle for)
Une fois la ligne déterminée, contrôler qu'il n'y a pas un dépassement (de capacité?).

thierry la fronde
lundi 29 septembre 2008 à 15:18:31 | Re : VBA Excel, plage trop grande pour calculer ?

DrDoak

Merci pour l'idée, seulement, je n'ai pas trouvé comment faire étape par étape en 'Debug Mode'.
Mais pas grave, je l'ai fait "à la main" et ce sont effectivement les calculs de X, s, p, r et q (les pseudo-boucles) qui posent problème : au delà de 210 valeurs, c'est une erreur "#VALUE!" qui apparaît si j'appelle la valeur de X, s, p, r ou q comme résultat de la fonction.

C'est fou, quoi ; ça me paraît bas comme limite de calcul...
C'est matériel ou logiciel ?


lundi 29 septembre 2008 à 16:04:39 | Re : VBA Excel, plage trop grande pour calculer ?

DrDoak

N'importe quoi, désolé, les boucles marchent trés bien, c'est la ligne de calcul de B qui semblent poser problème.
Je vais essayer de la saucissoner un peu.
lundi 29 septembre 2008 à 18:50:33 | Re : VBA Excel, plage trop grande pour calculer ?

68manu


Salut,

dis moi as tu deja essaye a la main de faire cette operation ?

B = (3*(210^2+27*210-70)*211*213)/(208*215*217*219))

A mon avis B devrait etre egal a 3.15 etc...

Mais en fait ce n'est pas le cas, car pendant ton initialisation de B, tu as declaré B=0, et tu l'as transforme implicitement en Long..., limite a 2147483647 or
(210^2*27*210-70)*211*213 depasse cette limite !!!!

Donc je te conseille d'essayer d'initialiser B et toutes les autres variables ainsi :

B = 0#

J'ai pas teste mais ca devrait aller mieux

Quel mal de crane ton truc ! J'espere que c'est la solution...

bOnn e soiree


_____________________
No problems, only soluces
mardi 30 septembre 2008 à 10:49:29 | Re : VBA Excel, plage trop grande pour calculer ?

NHenry

Membre Club Administrateur CodeS-SourceS
Bonjour,

68manu> B est explicitement déclaré en Double (voir le code), donc, il ne sera jamais Long.

Ma signature pour pointer sur mon site
mardi 30 septembre 2008 à 13:03:10 | Re : VBA Excel, plage trop grande pour calculer ?

DrDoak

Bonjour à tous,
Et merci pour vos propositions qui m'ont sorti de cette affaire.

Je penserai maintenant à chercher la ligne qui pose problème avant de poster.

En fait, ce qui semble l'avoir bloqué, ce sont les lignes trop longues, avec les (n-1)*(n+5)^2*etc...
Il m'a fallu réécrire la fonction en opérant une seule opération (sic) par ligne.
Donc c'est beaucoup plus long, c'est pas beau, mais ça marche avec mes 30000 lignes maintenant.

Merci à tous,
@*+


Cette discussion est classée dans : to, for, double, cells, rplage


Répondre à ce message

Sujets en rapport avec ce message

Matrice, textbox & Co - Galère !!! [ par noelaurent ] Bonjour,Après avoir passé de très nombreuses heures sur un problème de débutant, je fais à nouveau appel à notre bienveillante communauté, en essayant Macro Excel AutoFill divers VBA [ par Gegeleblond ] Hello ! Je dois remplir 64 colonnes d'une feuille Excel avec pour chaque colonne une formule differente sachant par ailleurs que les 64 colonnes ne so Code de regression polynomiale: [ par Nukix ] Bonjour à tous !je suis nouveau sur le fofo, on m'a dit qu'il y avait des pros qui trainaient dans le coin, alors je suis venu voir. Voilà, je suis in Macro Excel AutoFill divers [ par a506920 ] Hello ! Premièrement je me pose la question de savoir si me placer dans le theme Visual Basic 6/Divers/Debutants est une bonne chose mais ne sachant p conversion double to string [ par ShayW ] Salut comment convertir 34.0 en string "34.0" si j'écris [code=vb]dim d as double dim str as string d = 34.0 str = d.ToString[/code] dans str j'a Supprimer un bloc en VBA [ par ilma ] Bonjour à Tous, Je galère en ce moment avec VBA ( débutante ) Je vous explique mon problème : j'ai une feuille excel avec 4400 lignes et 44 Etendre une plage de recherche sur un code VB déjà existant [ par LaureneK ] Bonjour à tous! Je suis au bord du gouffre, et pas loin de faire un pas en avant ^^ Je souhaitais avoir la possibilité de faire une recherche multip Optimiser une macro [ par Alban83 ] Bonjour tt le monde, J'ai créé une macro qui fait une recherche verticale sur deux tableaux de deux feuilles. Mon problème est que dans les tableau [Déplacé .Net --> VBA] Optimiser une macro [ par Alban83 ] Bonjour tt le monde, J'ai créé une macro qui fait une recherche verticale sur deux tableaux de deux feuilles. Mon problème est que dans les tableaux [déplacé VB.NET -> VBA] problème de variables boucle loop [ par titeuf136 ] Bonjour, A partir de données de ma feuille excel je rempli des textbox dans un userform. Plus tard ce userform me permettra de selectionner les textb


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,196 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales