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 Sub

Trè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 Sub

Mais 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 or c'est hyper important et là j'ai un résultat constant

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 Sub

pour 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 Sub

Je vais tâcher de régler ça ! Merci beaucoup

Rechercher des sujets similaires à "boucle calcul decoulant"