Boucle for et calcul en découlant
Bonjour à tous,
Je voudrais simplement crée une boucle for pour calculer l'éclairement sur toute une journée entière
Admettons cela
heure = 09.00
paramètre 1 = ...
paramètre 2 = ...
paramètre 3 = ...
éclairement à heure précise = ...
éclairement sur la journée totale (de 09h à 21h) = ...
En fait, sur ma feuille excel lorsque je change l'heure locale les paramètres se calculent 1 à 1 puis il finit par me donner l'éclairement pour cette heure précise
et bien moi je voudrais boucler le calcul de 08h à 21h en fait mais je n'y arrive pas pourtant j'suis sûre que c'est tout simple :/
(après je voudrais en tirer un graphique et moyenner ce graphique)
Merci beaucoup de votre aide
bonjour,
pas sûr de comprendre,
l'éclairement total = heure de fin - heure de début, non ?
à quoi sert la boucle ? que réprésente les paramètres ?
En fait le sujet est beaucoup plus complexe que ça:
c'est pour calculer l'éclairement reçu par un panneau solaire et cela dépend de beaucoup de paramètres tels que l'orientation du panneau, son inclinaison, la latitude/longitude etc.
Pour l'instant sur excel, je rentre moi même une heure quelconque par exemple 08h (08.00) et la feuille de calcul me donne l'éclairement reçu à cette heure
or, je voudrais avoir l'éclairement moyen reçu dans la journée donc, faire une boucle for pour qu'il calcule de 08h à 21h par exemple mais je ne sais pas quoi rentrer en instruction de cette boucle
ensuite une fois ça fait, faire le même genre de boucle mais avec la date en plus
ensuite tout à la fin une fois que j'aurais bien pigé le truc j'aimerais tirer deux graphiques pour chaque boucle et pouvoir les exploiter mais c'est un autre pb
merci
bonjour,
une ébauche de programme sur base de ce que j'ai compris, les adaptations à faire au programme en fonction de ton classeur sont regroupées au début.
Sub aargh()
' à adapter
With Sheets("parametres") ' feuille dans laquelle on introduit les paramètres
Set casejour = .Range("B2") ' cellule dans laquelle on introduit la date
Set caseheure = .Range("B3") 'cellule dans laquelle on introduit l'heure
Set casereponse = .Range("B4") 'cellule qui donne l'éclairement en fonction des paramètres ci-dessus
Set wsreponse = Sheets("reponse") 'feuille qui contiendra toutes les réponses par jour et par heure
premierjour = DateSerial(2017, 1, 1) 'date de départ pour la boucle des jours
dernierjour = DateSerial(2017, 12, 31) 'date de fin pour la boucle des jours
premiereheure = 8 ' heure de début pour la boucle des heures
derniereheure = 21 'heure de fin pour la boucle des heures
'-----
For jour = premierjour To dernierjour
casejour = jour
For heure = premiereheure To derniereheure
caseheure = heure
i = i + 1
wsreponse.Cells(i, 1) = casejour
wsreponse.Cells(i, 2) = caseheure
wsreponse.Cells(i, 3) = casereponse
Next heure
Next jour
End With
End SubTrès bien merci, cela fonctionne ! Enfin ... presque car ma date est séparée en mode une case qui représente jj et une autre pour mm
soit la date sous la forme jj/mm (osef de l'année)
du coup j'ai essayé d'adapter le code comme ceci
Sub Boucle_annee()
' à adapter
With Sheets("Calcul apports solaires thermiq") ' feuille dans laquelle on introduit les paramètres
Set casejour = .Range("D5") ' cellule dans laquelle on introduit le jour
Set casemois = .Range("D6") ' cellule dans laquelle on introduit le mois
Set caseheure = .Range("D20") 'cellule dans laquelle on introduit l'heure
Set casereponse = .Range("D41") 'cellule qui donne l'éclairement en fonction des paramètres ci-dessus
Set wsreponse = Sheets("Boucle_Heure") 'feuille qui contiendra toutes les réponses par jour et par heure
premierjour = 1 'date de départ pour la boucle des jours
dernierjour = 31 'date de fin pour la boucle des jours
premiermois = 1 'date de départ pour la boucle des mois
derniermois = 12 'date de fin pour la boucle des mois
premiereheure = 7 ' heure de début pour la boucle des heures
derniereheure = 22 'heure de fin pour la boucle des heures
'-----
For jour = premierjour To dernierjour
Range("D24").GoalSeek Goal:=0, ChangingCell:=Range("D25")
Range("D26").GoalSeek Goal:=0, ChangingCell:=Range("D27")
casejour = jour
For mois = premiermois To derniermois
casemois = mois
For heure = premiereheure To derniereheure
caseheure = heure
i = i + 1
wsreponse.Cells(i, 1) = casejour
wsreponse.Cells(i, 2) = casemois
wsreponse.Cells(i, 3) = caseheure
wsreponse.Cells(i, 4) = casereponse
Next heure
Next mois
Next jour
End With
End SubMais cela ne fonctionne pas car il ne run pas les commandes
Range("D24").GoalSeek Goal:=0, ChangingCell:=Range("D25")
Range("D26").GoalSeek Goal:=0, ChangingCell:=Range("D27")a chaque boucle
De plus, l'onglet des résultats s'affiche comme ceci
01/01/1900 1 7 44935,01686
01/01/1900 1 8 44935,01686
01/01/1900 1 9 44935,01686
01/01/1900 1 10 44935,01686
01/01/1900 1 11 44935,01686
etc ...
Alors que ça devrait être dans cet ordre :
jour mois heure résultat
vous voyez où peut se trouver l'erreur ?
Merci de l'aide en tout cas ça me débloque bien
re-bonjour,
une proposition de correction
Sub Boucle_annee()
' à adapter
With Sheets("Calcul apports solaires thermiq") ' feuille dans laquelle on introduit les paramètres
Set casejour = .Range("D5") ' cellule dans laquelle on introduit le jour
Set casemois = .Range("D6") ' cellule dans laquelle on introduit le mois
Set caseheure = .Range("D20") 'cellule dans laquelle on introduit l'heure
Set casereponse = .Range("D41") 'cellule qui donne l'éclairement en fonction des paramètres ci-dessus
Set wsreponse = Sheets("Boucle_Heure") 'feuille qui contiendra toutes les réponses par jour et par heure
premierjour = 1 'date de départ pour la boucle des jours
dernierjour = 31 'date de fin pour la boucle des jours
premiermois = 1 'date de départ pour la boucle des mois
derniermois = 12 'date de fin pour la boucle des mois
premiereheure = 7 ' heure de début pour la boucle des heures
derniereheure = 22 'heure de fin pour la boucle des heures
'-----
For mois = premiermois To derniermois
casemois = mois
Select Case mois
Case 1, 3, 5, 7, 8, 10, 12
dernierjour = 31
Case 4, 6, 9, 11
dernierjour = 30
Case 2
dernierjour = 28
End Select
For jour = premierjour To dernierjour
casejour = jour
For heure = premiereheure To derniereheure
caseheure = heure
.Range("D24").GoalSeek Goal:=0, ChangingCell:=.Range("D25")
.Range("D26").GoalSeek Goal:=0, ChangingCell:=.Range("D27")
i = i + 1
wsreponse.Cells(i, 1) = casejour
wsreponse.Cells(i, 2) = casemois
wsreponse.Cells(i, 3) = caseheure
wsreponse.Cells(i, 4) = casereponse
Next heure
Next jour
Next mois
End With
End Subpour ce qui concerne la réponse, il faut mettre la première colonne au format nombre et non date.
Parfait ça fonctionne ! Mais le résultat est toujours constant car il refuse catégoriquement de résoudre les équations suivantes
.Range("D24").GoalSeek Goal:=0, ChangingCell:=.Range("D25")
.Range("D26").GoalSeek Goal:=0, ChangingCell:=.Range("D27")bonjour,
pour voir si je peux t'aider, j'aurais besoin de ton classeur.
Le voilà mais je ne sais pas si tu vous allez vous y retrouver ^^
Re-bonjour,
voici quelques corrections, cela devrait être ok, même si il me semble qu'il y a quelques incohérences au niveau des heures d'ensoleillement.
Sub Boucle_annee()
' à adapter
Dim casejour As Range
Dim casemois As Range
Dim caseheure As Range
Dim casereponse As Range
With Sheets("Calcul apports solaires thermiq") ' feuille dans laquelle on introduit les paramètres
Set casejour = .Range("D5") ' cellule dans laquelle on introduit le jour
Set casemois = .Range("D6") ' cellule dans laquelle on introduit le mois
Set caseheure = .Range("D20") 'cellule dans laquelle on introduit l'heure
Set casereponse = .Range("D41") 'cellule qui donne l'éclairement en fonction des paramètres ci-dessus
Set wsreponse = Sheets("Boucle_Heure") 'feuille qui contiendra toutes les réponses par jour et par heure
premierjour = 1 'date de départ pour la boucle des jours
dernierjour = 31 'date de fin pour la boucle des jours
premiermois = 1 'date de départ pour la boucle des mois
derniermois = 12 'date de fin pour la boucle des mois
premiereheure = 7 ' heure de début pour la boucle des heures
derniereheure = 22 'heure de fin pour la boucle des heures
'-----
For mois = premiermois To derniermois
casemois.Value = mois
Select Case mois
Case 1, 3, 5, 7, 8, 10, 12
dernierjour = 31
Case 4, 6, 9, 11
dernierjour = 30
Case 2
dernierjour = 28
End Select
For jour = premierjour To dernierjour
casejour.Value = jour
For heure = premiereheure To derniereheure
caseheure.Value = heure
.Range("D24").GoalSeek Goal:=0, ChangingCell:=.Range("D25")
.Range("D26").GoalSeek Goal:=0, ChangingCell:=.Range("D27")
i = i + 1
wsreponse.Cells(i, 1).Value = jour
wsreponse.Cells(i, 2).Value = mois
wsreponse.Cells(i, 3).Value = heure
wsreponse.Cells(i, 4).Value = casereponse.Value
Next heure
Next jour
Next mois
End With
End SubJe vais tâcher de régler ça ! Merci beaucoup