Lien entre les coordonnes de cellule

paulowan Messages postés 8 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 12 février 2009 - 7 mai 2007 à 19:01
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 - 11 mai 2007 à 10:32
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

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

MPi
0
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
11 mai 2007 à 10:32
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
0
Rejoignez-nous