Boucle pour faire une moyenne de données situées sur plusieurs onglets
Ci-joint un fichier excel comportant plusieurs onglets de relevés de températures (Th) de 23 thermomètres (c'est pourquoi il y a 23 onglets Th : Th1, Th2, Th3...
Dans l'onglet "Th Moy", je souhaite faire une moyenne des données présentes dans tous les onglets Th (de Th1 à Th23)
Ainsi, pour exemple, en cellule C26 de l'onglet "Th Moy", je fais le calcul suivant :
- je vais dans l'onglet Th1
- je fais la moyenne du range C2 à C22
- je retourne le résultat de cette moyenne en cellule C26, dans l'onglet "Th Moy"
2ème exemple, en cellule C27 je fais le calcul suivant :
- je vais dans l'onglet Th2
- je vais la moyenne du range C2 à C22
- je retourne le résultat de cette moyenne en cellule C27, dans l'onglet "Th Moy"
3ème exemple, en cellule C28 je fais le calcul suivant :
- je vais dans l'onglet Th3
- je vais la moyenne du range C2 à C22
- je retourne le résultat de cette moyenne en cellule C28, dans l'onglet "Th Moy"
et ainsi de suite...
La solution en VBA ferait certainement appel à une boucle, mais je ne sais pas faire. Pour le moment j'ai fait ce code qui est incomplet:
Sub Synthese()
Dim i As Byte
For i = 1 To 23
Worksheets("Th1").Cells(5, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th2").Cells(6, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th3").Cells(7, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th4").Cells(8, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th5").Cells(9, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th6").Cells(10, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th7").Cells(11, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th8").Cells(12, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th9").Cells(13, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th10").Cells(14, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th11").Cells(15, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th12").Cells(16, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th13").Cells(17, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th14").Cells(18, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th15").Cells(19, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th16").Cells(20, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th17").Cells(21, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th18").Cells(22, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th19").Cells(23, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th20").Cells(24, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th21").Cells(24, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th22").Cells(24, 3 + i) = Sheets(i).Range("C2:C22").Value
Worksheets("Th23").Cells(24, 3 + i) = Sheets(i).Range("C2:C22").Value
Next
End Sub
Qq'un aurait une idée?
Bonsoir ruliann voici une boucle de ton code
Sub Synthese()
Dim i As Integer
Dim wsMoy As Worksheet
Dim wsTh As Worksheet
' Référence à l'onglet "Th Moy"
Set wsMoy = ThisWorkbook.Sheets("Th Moy")
' Boucle à travers les onglets "Th1" à "Th23"
For i = 1 To 23
' Référence à l'onglet "ThX" où X est l'indice de boucle
Set wsTh = ThisWorkbook.Sheets("Th" & i)
' Calcul de la moyenne et l'insérer dans l'onglet "Th Moy"
wsMoy.Cells(25 + i, 3).Value = Application.WorksheetFunction.Average(wsTh.Range("C2:C22"))
Next i
End Sub
salut stepaustras
et grand merci pour ton code qui fait très bien le job pour le range C26 à C48 de l'onglet "Th Moy"
est ce que tu saurais faire la même chose de manière à ce que le code traite aussi toutes les colonnes suivantes, cêst à dire de la colonne D à la colonne CT ? ou me dire comment faire?
Essai ceci
Sub Synthese()
Dim i As Integer
Dim wsMoy As Worksheet
Dim wsTh As Worksheet
Dim col As Integer
' Référence à l'onglet "Th Moy"
Set wsMoy = ThisWorkbook.Sheets("Th Moy")
' Boucle à travers les onglets "Th1" à "Th23"
For i = 1 To 23
' Référence à l'onglet "ThX" où X est l'indice de boucle
Set wsTh = ThisWorkbook.Sheets("Th" & i)
' Boucle à travers les colonnes de D à CT
For col = 4 To 90
' Calcul de la moyenne et l'insérer dans l'onglet "Th Moy"
wsMoy.Cells(25 + i, col).Value = Application.WorksheetFunction.Average(wsTh.Cells(2, col).Resize(21, 1))
Next col
Next i
End Sub
super sympa merci!
bonne soirée!
De rien, bonne soirée