Créer une boucle incrémentant des cellules : Ci
Bonjour,
J'ai un feuille excel de plus de 4800 lignes.
Dans la première colonne (A), j'ai la date et l'heure : jj/mm/aaaa hh:mm, qui commence en A69 jusqu'à A4899.
Il est important que je vous précise que j'ai des résultats toutes les 10 minutes.
Dans la colonne B j'ai les résultats que je désire exploiter (NB: il s'agit de puissances)
Je souhaiterais calculer les moyennes de mes puissances (la moyenne sur une période de 2h) puis écrire ces moyennes dans une autre feuille "Moyenne Grue1". Dans cette nouvelle feuille, je souhaite organiser mes résultats de la forme suivante :
Date en Colonne A et mon échantillonnage toutes les 2h (c'est-à-dire : 0 2 4 6 8 10 12 14 ...) en 1ere ligne.
Pour cela, je souhaite créer une macro afin d'automatiser mes calculs, car j'ai 11 autres fichiers excel, de la même configuration, à exploiter.
Etant débutant vis-à-vis des macro d'Excel, j'ai lancé l'enregistrement de ma macro de "base", c'est-à-dire sur une ligne de mon document cible, puis j'ai étudier le code VBA associé.
Ensuite j'ai voulu créer une boucle afin d'instancier et automatiser ce calcul pour la totalité de mon document cible.
Sub MoyenneGrue1()
'
' MoyenneGrue1 Macro
'
Dim i As Integer
Dim j As Integer
For i = 4 To 37
For j = 69 To 4899
Range("Ci").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
'ici on récupère et on fait la moyenne des puissances de 00:10 à 01:00
j = j+12
'ici j est incrémenté de 12 afin de récupérer la valeur de puissance à 01:10.
Range("Di").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Ei").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Fi").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Gi").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Hi").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Ii").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Ji").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Ki").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Li").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Mi").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
j = j+12
Range("Bi+1").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!RjC2:Rj+11C2)"
' il s'agit d'un saut de ligne afin d'écrire la valeur à minuit sur la ligne suivante.
j = j + 12
Next j
Next i
End SubAvec ce code-ci, j'ai un message d'erreur n°1004 La méthode 'Range' de l'objet '_Global' a échoué.
J'ai essayé d'écrire comme ceci également :
Range("C(i)").Select
ActiveCell.FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!R(j)C2:R(j+11)C2)"
j = j + 12
Qui pourrait m'éclairer ou me débugger?
J'ai essayé d'être le plus claire possible.
Merci beaucoup pour votre attention et pour votre aide, bonne journée.
Salut,
Si dans le bout de code ci-dessous .....
For i = 4 To 37
For j = 69 To 4899
Range("Ci").Select.......tu veux sélectionner la première fois la cellule C4, tu dois utiliser
Range("C" & i).SelectPour le reste, si tu as encore besoin d'aide, je pense que tu dois fournir des fichiers exemples (avec une centaines de lignes réparties sur deux jours ça doit être amplement suffisant).
A te relire.
Salut JeremyP et le forum
Le principe du code, un peu modifié
Sub MoyenneGrue1()Dim i As Long, j As Long
For i = 4 To 37
For j = 69 To 4899
Cells(i, "C").FormulaR1C1 = "=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!R" & j & "C2:R" & j + 11 & "C2)"
j = j + 12
Cells(i, "D").FormulaR1C1 = "=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!R" & j & "C2:R" & j + 11 & "C2)"
j = j + 12
'....................
Cells(i, "M").FormulaR1C1 = "=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!R" & j & "C2:R" & j + 11 & "C2)"
j = j + 12
Cells(i + 1, "B").FormulaR1C1 = "=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!R" & j & "C2:R" & j + 11 & "C2)"
' il s'agit d'un saut de ligne afin d'écrire la valeur à minuit sur la ligne suivante.
j = j + 12
Next j
Next i
End SubMais pour le code en entier... il faudrait que je comprenne le but
Pour faire simple, sur la première boucle, on se retrouve avec C4 comme cellule dans laquelle on met la formule.
Pour toutes les valeurs de j, on modifie cette cellule => donc on aura uniquement les dernières formules calculées.
Juste avant le "Next j", tu augmentes de nouveau de 12, puis la boucle est finie et on retourne au début de la boucle, et donc J sera décalé de 12+1. Mais je ne sait pas ce qu'on doit avoir. De plus, (hormis le B(i+1)), on pourrais sans doute faire une autre boucle pour décaler les colonnes cells(i,x) avec j évoluant par pas de 12.
Mais sans données....
A+
Bonsoir
Sans fichier
macro à essayer
Sub MoyenneGrue1()
'
' MoyenneGrue1 Macro
'
Dim I As Integer
Dim J As Long
Dim K As Long
J = 69
For K = 4 To 37 ' De la ligne 4 à 37
For I = 3 To 13 ' De la colonne C à la colonne M
Cells(K, I).FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!R" & J & "C2:R" & J + 11 & "C2)"
J = J + 12
Next I
Cells(K + 1, "B").FormulaR1C1 = _
"=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!R" & J & "C2:R" & J + 11 & "C2)"
J = J + 12
Next K
End SubBonjour à toutes et à tous,
tout d'abord je souhaite vous remercier pour le temps que vous m'avez accordé, cela a été d'une aide précieuse. En effet, la macro de Banzai64 fonctionne et réalise exactement ce que je souhaitais ! Merci beaucoup. (je passe ce sujet en résolu)
Cependant, j'ai également essayé la macro de Gorfael, et mon executeur se bloque sur la première ligne de la boucle
Cells(i, "C").FormulaR1C1 = "=AVERAGE('Grue11-8Dec2011_15Mar2012.CSV'!R" & j & "C2:R" & j + 11 & "C2)"Et me ressort l'erreur 1004.
Merci Yvouille, j'avais changé intuitivement C4 en Ci dans ma macro test, mais il était trop beau de croire que celà fonctionnerait aussi facilement!
En vous souhaitant une très belle journée,
A bientôt!