1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 'La procédure suivante permet d'écrire la formule dans la cellule Cell(X, Y)
'Avec X: la ligne de destination de la formule (pour ton cas soit la ligne 28 ou la ligne 29)
'Y: la colonne correspondant à la cellule modifiée dans le tableau B2:XX27)
'Mais on est dans le cas où la cellule modifiée n'est pas forcément prise en compte dans la formule
'd'où la necessité de comparer si la cellule modifiée appartient à la plage (variable Plage) prise pour la formule
'En fait Plage correspondant à la formule de la colonne B. Exemple Range("B4,B5,B10,B11,B13,B14,B15,B16,B18,B19,B21,B25,B27")
'Si on fait pas ce test, la modification de la cellule B7 par exemple, inscrira la formule alors qu'elle n'intervient pas dans la moyenne
'On aura donc #DIV/0!
'LigDest: ligne 28 ou 29
'Plage: Plage à moyenner
'CelModif: Cellule modifiée
Private Sub Remplir(ByVal LigDest As Integer, ByVal Plage As Range, ByVal CelModif As Range)
'Si la ligne de la cellule modifié coupe Plage. càd la cellule sera prise en compte dans la formule
If Not Intersect(Plage, Range("B" & CelModif.Row)) Is Nothing Then
'on écrit la formule dans la cellule correspondante
'Plage.Offset(, CelModif.Column - 2).Address(0, 0) étant l'adresse de la plage de cellules décalée de CelModif-2 à droite
'Exemple, si on modifie la cellule D13, la ligne 13 a une intersection avec Plage qui est Range("B4,B5,B10,B11,B13,B14,B15,B16,B18,B19,B21,B25,B27")
'Donc on aura une moyenne à transcrire
'càd: Cells(28,4).formula="=AVERAGE(" & Range("B4,B5,B10,B11,B13,B14,B15,B16,B18,B19,B21,B25,B27").Offset(, 2).Address(0, 0) & ")"
'càd: Cells(28,4).formula="=AVERAGE(D4,D5,D10,D11,D13,D14,D15,D16,D18,D19,D21,D25,D27)"
Cells(LigDest, CelModif.Column).Formula = "=AVERAGE(" & Plage.Offset(, CelModif.Column - 2).Address(0, 0) & ")"
End If
End Sub |