Lien entre les coordonnes de cellule

Signaler
Messages postés
8
Date d'inscription
mardi 9 mai 2006
Statut
Membre
Dernière intervention
12 février 2009
-
Messages postés
169
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
7 avril 2008
-
Bonjour,


DAns excel vba


je ne comprends pas bien le lien entre les differentes denominations de coordonnées de cellule


 


je voudrais calculé des moyennes de colonne qui s affiche 2 lignes apres la fin de mon tableau etj'étends cette formule sur 4 colonnes


j arrive a recupérer le numero de la derniere ligne (LastRow) mais ma formule ne marche pas


Range(Cells(LastRow + 2, 21), Cells(LastRow + 2, 21)).Select
 ActiveCell.FormulaR1C1 = "=AVERAGE(cells(4,21):cells (LastRow, 21))"
    Range(Cells(LastRow + 2, 21), Cells(LastRow + 2, 21)).Select
    Selection.AutoFill Destination:=Range(Cells(LastRow + 2, 21), Cells(LastRow + 2, 24)), Type:=xlFillDefault

Merci d avance pour vos réponses

désolé si je ne suis pas tres clair

2 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Range("U" & LastRow + 2).Formula = "=AVERAGE(U4:U" & LastRow & ")"

MPi
Messages postés
169
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
7 avril 2008
2
Salut,

Tu as passé des variables VBA dans la formule et non leur valeurs, ce qui ne te fournira pas le résultat escompté.

il faut remplacer cette ligne
    ActiveCell.Formula = "=AVERAGE(cells(4,21):cells (LastRow, 21))"
par
    ActiveCell.Formula = "=AVERAGE(" & cells(4,21).address(0,0) & ":" & cells (LastRow, 21).address(0,0) & ")"

(Celle de MPi est plus simple mais la mienne te montre ton erreur)
ce qui donnera avec lastrow = 5 :

"=AVERAGE(U4:U5)"

à noter l'emploi de .address(0,0) qui permet de ne pas verrouiller la ligne et la colonne dans l'adresse de la cellule.

afin d'éviter ce genre de soucis, passe ta formule dans une variable et regarde le résultat avant de l'inscrire dans ta cellule avec un debug.print :

MaFormule = "=AVERAGE(cells(4,21):cells (LastRow, 21))"
debug.print MaFormule

Ensuite, inutile de selectionner deux fois la même cellule dans :
    Range(Cells(LastRow + 2, 21), Cells(LastRow + 2, 21)).Select
on se contentera de
    Cells(LastRow + 2, 21).Select

D'ailleurs, il est inutile de selectionner les cellules pour travailler dessus.

pour ma part, je simplifierais comme ça :

Sub Moyennes()

Dim Lastrow
Dim Mycell As Range

Lastrow = Range("u4").End(xlDown).Row
Set Mycell = Cells(Lastrow + 2, 21)

Mycell.Formula = "=AVERAGE(U4:U" & Lastrow & ")"
Mycell.AutoFill Range(Mycell.Address & ":" & Mycell.Offset(0, 3).Address)

End Sub

Voilà, @++

[mailto:K@lobit K@lobit] < Ne pas clicker ici
Mon Site < Mais ici