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:
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!
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: