Erreur de type overflow alors que macro marche pour certaines données

Douie

XLDnaute Nouveau
Bonjour a tous!

Je fais tourner une énorme macro (34Mo de fichier excel) qui me permet de calculer certains paramètres via des équations. Bref j'ai 90 jours dans l'année avec des mesures de température et d'oxygène toutes les 5 minutes.

Afin de calculer plusieurs paramètres, des formules sont écrites dans la feuille excel tandis que d'autres sont écrites dans la macro, grâce a des boucles. Tout tourne pour mes 90 jours de janvier à avril, mes paramètres sont calculés. Je teste ensuite de avril à juin et là j'ai une erreur de type 6, 'overflow/dépassement de capacité'.

Pourtant, dans la feuille excel, rien a changé sauf les valeurs des données qui ne sont d'ailleurs pas si différentes. Voici le code de la macro, au moment ou ça plante:

Code:
'Creation NEPhr and PFD hour



Dim T2 As Double, U2 As Double
Dim T3 As Double, U3 As Double
Dim T4 As Double, U4 As Double
Dim T13 As Double, U13 As Double
Dim T15 As Double, U15 As Double

'T is for NEPmin
T2 = 0
T3 = 0
T4 = 0
T13 = 0
T15 = 0

'U is for PFD
U2 = 0
U3 = 0
U4 = 0
U13 = 0
U15 = 0


'_____tank 2

For j = 0 To 2158
    For i = 5 + j * 12 To 16 + j * 12
        T2 = T2 + Worksheets("Sheet2").Range("AS" & i).Value
        U2 = U2 + Worksheets("Sheet2").Range("BC" & i).Value
    Next i
    Worksheets("Sheet2").Range("AX" & j + 4).Value = T2 / 12
    Worksheets("Sheet2").Range("BH" & j + 4).Value = U2 / 12
    T2 = 0
    U2 = 0
Next j

For i = 25913 To 25923
    T2 = T2 + Worksheets("Sheet2").Range("AS" & i).Value
    U2 = U2 + Worksheets("Sheet2").Range("BC" & i).Value
Next i
Worksheets("Sheet2").Range("AX" & 2163).Value = T2 / 11
Worksheets("Sheet2").Range("BH" & 2163).Value = U2 / 11
T2 = 0
U2 = 0


'_____tank 3

For j = 0 To 2158
    For i = 5 + j * 12 To 16 + j * 12
        T3 = T3 + Worksheets("Sheet2").Range("AT" & i).Value
        U3 = U3 + Worksheets("Sheet2").Range("BD" & i).Value
    Next i
    Worksheets("Sheet2").Range("AY" & j + 4).Value = T3 / 12
    Worksheets("Sheet2").Range("BI" & j + 4).Value = U3 / 12
    T3 = 0
    U3 = 0
Next j

For i = 25913 To 25923
    T3 = T3 + Worksheets("Sheet2").Range("AT" & i).Value
    U3 = U3 + Worksheets("Sheet2").Range("BD" & i).Value
Next i
Worksheets("Sheet2").Range("AY" & 2163).Value = T3 / 11
Worksheets("Sheet2").Range("BI" & 2163).Value = U3 / 11
T3 = 0
U3 = 0


'_____tank 4

For j = 0 To 2158
    For i = 5 + j * 12 To 16 + j * 12
        T4 = T4 + Worksheets("Sheet2").Range("AU" & i).Value
        U4 = U4 + Worksheets("Sheet2").Range("BE" & i).Value
    Next i
    Worksheets("Sheet2").Range("AZ" & j + 4).Value = T4 / 12
    Worksheets("Sheet2").Range("BJ" & j + 4).Value = U4 / 12
    T4 = 0
    U4 = 0
Next j

For i = 25913 To 25923
    T4 = T4 + Worksheets("Sheet2").Range("AU" & i).Value
    U4 = U4 + Worksheets("Sheet2").Range("BE" & i).Value
Next i
Worksheets("Sheet2").Range("AZ" & 2163).Value = T4 / 11
Worksheets("Sheet2").Range("BJ" & 2163).Value = U4 / 11
T4 = 0
U4 = 0


'_____tank 13

For j = 0 To 2158
    For i = 5 + j * 12 To 16 + j * 12
        T13 = T13 + Worksheets("Sheet2").Range("AV" & i).Value
        U13 = U13 + Worksheets("Sheet2").Range("BF" & i).Value
    Next i
    Worksheets("Sheet2").Range("BA" & j + 4).Value = T13 / 12
    Worksheets("Sheet2").Range("BK" & j + 4).Value = U13 / 12
    T13 = 0
    U13 = 0
Next j

For i = 25913 To 25923
    T13 = T13 + Worksheets("Sheet2").Range("AV" & i).Value
    U13 = U13 + Worksheets("Sheet2").Range("BF" & i).Value
Next i
Worksheets("Sheet2").Range("BA" & 2163).Value = T13 / 11
Worksheets("Sheet2").Range("BK" & 2163).Value = U13 / 11
T13 = 0
U13 = 0


'_____tank 15

For j = 0 To 2158
    For i = 5 + j * 12 To 16 + j * 12
        T15 = T15 + Worksheets("Sheet2").Range("AW" & i).Value
        U15 = U15 + Worksheets("Sheet2").Range("BG" & i).Value
    Next i
    Worksheets("Sheet2").Range("BB" & j + 4).Value = T15 / 12
    Worksheets("Sheet2").Range("BL" & j + 4).Value = U15 / 12
    T15 = 0
    U15 = 0
Next j

For i = 25913 To 25923
    T15 = T15 + Worksheets("Sheet2").Range("AW" & i).Value
    U15 = U15 + Worksheets("Sheet2").Range("BG" & i).Value
Next i
Worksheets("Sheet2").Range("BB" & 2163).Value = T15 / 11
Worksheets("Sheet2").Range("BL" & 2163).Value = U15 / 11
T15 = 0
U15 = 0




'_________________________________________________________________________________________
'Creation NETdaytime and Rdaytime

Dim number2 As Double, number3 As Double, number4 As Double, number13 As Double, number15 As Double
Dim X2 As Double, X3 As Double, X4 As Double, X13 As Double, X15 As Double
Dim Y2 As Double, Y3 As Double, Y4 As Double, Y13 As Double, Y15 As Double
Dim nb2 As Double, nb3 As Double, nb4 As Double, nb13 As Double, nb15 As Double
Dim nr2 As Double, nr3 As Double, nr4 As Double, nr13 As Double, nr15 As Double
Dim NEPdayt2 As Double, NEPdayt3 As Double, NEPdayt4 As Double, NEPdayt13 As Double, NEPdayt15 As Double
Dim Rday2 As Double, Rday3 As Double, Rday4 As Double, Rday13 As Double, Rday15 As Double
Dim Rdayt2 As Double, Rdayt3 As Double, Rdayt4 As Double, Rdayt13 As Double, Rdayt15 As Double

'Initialisation
number2 = 0
number3 = 0
number4 = 0
number13 = 0
number15 = 0
X2 = 0
Y2 = 0
nb2 = 0
nr2 = 0
X3 = 0
Y3 = 0
nb3 = 0
nr3 = 0
X4 = 0
Y4 = 0
nb4 = 0
nr4 = 0
X13 = 0
Y13 = 0
nb13 = 0
nr13 = 0
X15 = 0
Y15 = 0
nb15 = 0
nr15 = 0

'Put the name in first cells
Sheets("Sheet3").Range("B" & 1).Value = "NEPdayt 2 (um/L/d)"
Sheets("Sheet3").Range("C" & 1).Value = "NEPdayt 3 (um/L/d)"
Sheets("Sheet3").Range("D" & 1).Value = "NEPdayt 4 (um/L/d)"
Sheets("Sheet3").Range("E" & 1).Value = "NEPdayt 13 (um/L/d)"
Sheets("Sheet3").Range("F" & 1).Value = "NEPdayt 15 (um/L/d)"


'For each day, if PFD>1 then NEPday = sum NEPhr for each tank
For j = 0 To 89
    For i = 4 + j * 24 To 27 + j * 24
        If Sheets("Sheet2").Range("BH" & i).Value >= 0.5 Then
            X2 = X2 + Sheets("Sheet2").Range("AX" & i).Value
            nb2 = nb2 + 1
        End If
        
        If Sheets("Sheet2").Range("BI" & i).Value >= 0.5 Then
            X3 = X3 + Sheets("Sheet2").Range("AY" & i).Value
            nb3 = nb3 + 1
        End If
        
        If Sheets("Sheet2").Range("BJ" & i).Value >= 0.5 Then
            X4 = X4 + Sheets("Sheet2").Range("AZ" & i).Value
            nb4 = nb4 + 1
        End If
        
        If Sheets("Sheet2").Range("BK" & i).Value >= 0.5 Then
            X13 = X13 + Sheets("Sheet2").Range("BA" & i).Value
            nb13 = nb13 + 1
        End If
        
        If Sheets("Sheet2").Range("BL" & i).Value >= 0.5 Then
            X15 = X15 + Sheets("Sheet2").Range("BB" & i).Value
            nb15 = nb15 + 1
        End If
        
    Next i
        NEPdayt2 = X2 * Sheets("Sheet2").Range("H" & 4 + j * 288).Value * 24 * 1000 / (nb2 * 32)
        Sheets("Sheet3").Range("B" & j + 4).Value = NEPdayt2
        
        NEPdayt3 = X3 * Sheets("Sheet2").Range("H" & 4 + j * 288).Value * 24 * 1000 / (nb3 * 32)
        Sheets("Sheet3").Range("C" & j + 4).Value = NEPdayt3
        
        NEPdayt4 = X4 * Sheets("Sheet2").Range("H" & 4 + j * 288).Value * 24 * 1000 / (nb4 * 32)
        Sheets("Sheet3").Range("D" & j + 4).Value = NEPdayt4
        
        NEPdayt13 = X13 * Sheets("Sheet2").Range("H" & 4 + j * 288).Value * 24 * 1000 / (nb13 * 32)
        Sheets("Sheet3").Range("E" & j + 4).Value = NEPdayt13
        
        NEPdayt15 = X15 * Sheets("Sheet2").Range("H" & 4 + j * 288).Value * 24 * 1000 / (nb15 * 32)
        Sheets("Sheet3").Range("F" & j + 4).Value = NEPdayt15
        
        X2 = 0
        X3 = 0
        X4 = 0
        X13 = 0
        X15 = 0
        nb2 = 0
        nb3 = 0
        nb4 = 0
        nb13 = 0
        nb15 = 0
Next j

Pour expliquer le code: chaque NEPdayt doit être la moyenne des valeurs contenues dans les colonnes AX a BB quand quand il fait jour, c'est a dire quand les valeurs des colonnes BH a BL sont plus grandes que 0,5. Il y a 5 fois le même code car je travaille sur 5 citernes différentes. J'incrémente donc le paramètre X que je divise ensuite par le compteur nb pour pouvoir avoir la moyenne. Bon après, NEPdayt doit être multiplié par quelques nombres mais ils sont relativement constants..

Bref la ligne en gras est celle qui plante. Je ne vois pas pourquoi cela me dit overflow, cela ne vient pas du code puisque la macro marche parfaitement pour les 90 premiers jours. Les données de s90 suivants sont correctes donc cela ne peut pas venir de la non plus. Toutes mes variables sont déclarées comme 'Double'.

Je dois aussi rajouter, qu'avant, la macro marchait de janvier à juin. Depuis j'ai rajouté un bout de code, (celui qui se trouve juste avant que ca plante) car il y avait une mauvaise compréhension des formules:
Ce code permet de créer les colonnes AX à BB et BI à BL qui sont ensuite utilisées. Je ne pense pas que ce soit ce code qui fasse planter la macro car tout roule pour janvier à juin.

De plus, la macro plante au moment de calculer Ndayt qui est presque le résultat final, tous les paramètres intermédiaires sont bien calculés et ils ne semblent pas aberrants. Du coup je penchais plutôt pour un problème de dimension mais tout est en Double, que puis-je faire d'autre ? i, j sont declares en tant qu'integer.


Je ne vois plus trop quoi, faire quelqu'un pourrait m'aiguiller ?

Merci!

PS: je ne peux pas updater la fichier, trop gros!
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Erreur de type overflow alors que macro marche pour certaines données

Bonjour,

on ne voit pas comment sont déclarées / typées tes variables..... difficile à analyser avec juste des bouts de code jetés sur un post.....

bonne journée
@+
 

mutzik

XLDnaute Barbatruc
Re : Erreur de type overflow alors que macro marche pour certaines données

Bonjour Douie, Salut Pierrot,

comme le dit Pierrot, c'est très difficile de juger comme cela
un essai à faire, déclarer tes variables sans indiquer de type, excel se chargera de le faire
(j'y crois pas trop, mais essaie toujours, et de préférence sur un autre classeur - ou renomme le pour travailler sur une copie - jamais l'original)
 

Douie

XLDnaute Nouveau
Re : Erreur de type overflow alors que macro marche pour certaines données

Merci a tous les deux pour votre reponse,

Je sais que c'est difficile de juger sur des portions de code, je peux mettre tout le code car ca risque de prendre deux pages et la moitie des parametres sont calcules sur la feuille excel donc impossible a voir, j'ai essaye de faire au plus simple.

J'ai neanmoins rajoute la declarartion des variables.

J'ai essaye de ne pas declarer les variables mais toujours la meme erreur ...
Ce que je ne comprend pas c'est que ca marche pour les 90 premiers jours alors que les donnees ne sont pas si differentes...
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Erreur de type overflow alors que macro marche pour certaines données

Re, bonjour Bertrand:)

sans pouvoir tester, difficile à dire.... teste le code pas à pas (touche F8 dans l'éditeur vba) et vérifie lors du deboggage ce que vallent les variables concernées....
 

Pierrot93

XLDnaute Barbatruc
Re : Erreur de type overflow alors que macro marche pour certaines données

Re, bonjour Staple

A noter, pour éviter d'oublier des déclarations de variable, place un :
Code:
Option Explicit
sur la première ligne du module, oblige à la déclaration de toutes les variables...
 

ROGER2327

XLDnaute Barbatruc
Re : Erreur de type overflow alors que macro marche pour certaines données

Bonjour à tous


(...) Bref la ligne en gras est celle qui plante. (...)
Je ne vois pas de ligne en gras dans le code. Quelqu'un, doté d'une bonne vue, peut-il suppléer mes vieux yeux en citant cette ligne. Merci d'avance.​


ROGER2327
#6250


Samedi 7 Phalle 139 (Patrobas, pompier - fête Suprême Quarte)
30 Thermidor An CCXX, 5,3601h - moulin
2012-W33-5T12:51:51Z
 

Discussions similaires

Réponses
1
Affichages
285

Statistiques des forums

Discussions
294 039
Messages
1 935 784
Membres
187 447
dernier inscrit
Harvedo