Re : Probème de boucle avec plusieurs variables
Autant pour moi,
Je pensais pouvoir avoir juste une manière générale de réaliser ce type de code avec plusieurs variables.
Je commence juste en VBA, et n'a que des notions générales.
En fait, j'ai une formule que je souhaite faire varier selon plusieurs paramètres.
Ensuite, j'intègre l'ensemble des résultats obtenues dans une liste de mon tableau.
Le fichier ci joint est en version d'essai.
C'est pour réaliser un calcul des rayonnements solaires, pour l'instant j'ai fait une imbrication de for.. Next" Mais cela n'a pas l'aire de marcher...
Si ca peut vous aider, voici le code en question que vous pourrez retrouver dans le fichier ci joint.
(Rien de confidentiel)
Dim SC, E, Latitude, Déclinaison, Imois, Izéro, h, Oméga_1, Oméga_2, IglobhH, IdiffH, Kt, Alpha, IDirH, TetaZ, Pi As Double
Dim wb As Workbook
Dim ws As Worksheet
'Ouverture d'un fichier Excel
Set wb = Workbooks.Open("Document correspondant")
'wsExcel correspond à la première feuille du fichier
Set ws = wb.Worksheets(1)
Pi = 3.141592654
Dim i, z, x As Integer
'Constante solaire [W/m²]
SC = 1367
'Excentricité orbitale [sans unité]
E = 0.01671022
Latitude = Range("A11").Select
' Indice du mois en case [I, 1]
For z = 1 To 24 'Nomre de lignes correspondantes
Imois = Cells(z, 9)
For x = 1 To 24
' Indice du rayonnment global Horizontal en case [L, 1]
IglobhH = Cells(x, 12)
Déclinaison = 23.45 * Sin((0.896 * (-15 + (365 / 12) * Imois) - 80) * (Pi / 180)) * (Pi / 180)
' Indice de l'heure en case [A, 1]
For i = 1 To 24
h = Cells(i, 1)
Oméga1 = Pi * ((h - 12) / 12)
If h = 24 Then
Oméga_2 = Pi * ((h - 12) / 12)
Else: Oméga_2 = Pi * (((h + 1) - 12) / 12)
End If
Izéro = SC * E * (Cos(Latitude) * Cos(Déclinaison) * (Sin(Oméga_2) - Sin(Oméga_1)) + Sin(Latitude) * Sin(Déclinaison) * (Oméga_2 - Oméga_1))
Kt = IglobhH / Izéro
Call Algorithme_position_Soleil_dans_ciel
'Alpha = 90 - TetaZ (TetaZ = Angle Zénital Solaire; Alpha = Hauteur Solaire ou Angle d'altitude solaire
Alpha = 90 - TetaZ
If 0 <= Kt <= 0.3 Then
IdiffH = IglobhH * (1.02 - 0.254 * Kt + 0.0123 * Sin(Alpha))
Else
If 0.3 <= Kt <= 0.78 Then
IdiffH = IglobhH * (1.4 - 1.749 * Kt + 0.177 * Sin(Alpha))
Else
If 0.78 < Kt Then
IdiffH = IglobhH * (0.486 * Kt + 0.182 * Sin(Alpha))
Else: End If
End If
End If
Call Mettre_Valeur_IgloghH_dans_liste
IDirH = IglobhH - IdiffH
Call Mettre_Valeur_IDirH_dans_liste
Next i
Next z
Next x
End Sub
Désolé, je ne vois pas comment réaliser les fenêtres comme certains peuvent faire!