Choisir plage jusqu'à la dernière cellule contenant une valeur [Résolu/Fermé]

Signaler
-
Messages postés
1
Date d'inscription
lundi 14 décembre 2015
Statut
Membre
Dernière intervention
15 décembre 2015
-
Bonjour,

Je suis débutant avec les macros. J'aimerais savoir comment programmer une macro dans laquelle une formule utilise l'ensemble des données d'une colonne, c'est-à-dire jusqu'à la dernière cellule non vide afin que je puisse l'utiliser avec d'autres bases de données avec une nombre de lignes variable.

Voici ce que j'ai comme code (j'ai utiliser l'option enregistrer une macro) :

Sub ST_35_MP()
'
' ST_35_MP Macro
'

'
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("D1").Select
Selection.FormulaArray = "=SUM(1/COUNTIF(R[2]C:R[254]C,R[2]C:R[254]C))"
ActiveWindow.ScrollRow = 217
ActiveWindow.ScrollRow = 215
ActiveWindow.ScrollRow = 212
ActiveWindow.ScrollRow = 210
ActiveWindow.ScrollRow = 206
ActiveWindow.ScrollRow = 202
ActiveWindow.ScrollRow = 198
ActiveWindow.ScrollRow = 193
ActiveWindow.ScrollRow = 187
ActiveWindow.ScrollRow = 182
ActiveWindow.ScrollRow = 176
ActiveWindow.ScrollRow = 165
ActiveWindow.ScrollRow = 156
ActiveWindow.ScrollRow = 148
ActiveWindow.ScrollRow = 129
ActiveWindow.ScrollRow = 118
ActiveWindow.ScrollRow = 114
ActiveWindow.ScrollRow = 107
ActiveWindow.ScrollRow = 104
ActiveWindow.ScrollRow = 101
ActiveWindow.ScrollRow = 97
ActiveWindow.ScrollRow = 93
ActiveWindow.ScrollRow = 89
ActiveWindow.ScrollRow = 86
ActiveWindow.ScrollRow = 82
ActiveWindow.ScrollRow = 78
ActiveWindow.ScrollRow = 74
ActiveWindow.ScrollRow = 71
ActiveWindow.ScrollRow = 67
ActiveWindow.ScrollRow = 64
ActiveWindow.ScrollRow = 62
ActiveWindow.ScrollRow = 59
ActiveWindow.ScrollRow = 56
ActiveWindow.ScrollRow = 54
ActiveWindow.ScrollRow = 52
ActiveWindow.ScrollRow = 50
ActiveWindow.ScrollRow = 47
ActiveWindow.ScrollRow = 44
ActiveWindow.ScrollRow = 41
ActiveWindow.ScrollRow = 39
ActiveWindow.ScrollRow = 37
ActiveWindow.ScrollRow = 36
ActiveWindow.ScrollRow = 34
ActiveWindow.ScrollRow = 32
ActiveWindow.ScrollRow = 31
ActiveWindow.ScrollRow = 29
ActiveWindow.ScrollRow = 27
ActiveWindow.ScrollRow = 26
ActiveWindow.ScrollRow = 24
ActiveWindow.ScrollRow = 22
ActiveWindow.ScrollRow = 20
ActiveWindow.ScrollRow = 18
ActiveWindow.ScrollRow = 16
ActiveWindow.ScrollRow = 8
ActiveWindow.ScrollRow = 7
ActiveWindow.ScrollRow = 5
ActiveWindow.ScrollRow = 3
ActiveWindow.ScrollRow = 1
Rows("2:2").Select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$BL$255").AutoFilter Field:=10, Criteria1:=">=34", _
Operator:=xlAnd
ActiveSheet.Range("$A$2:$BL$255").AutoFilter Field:=14, Criteria1:="=M", _
Operator:=xlAnd
ActiveSheet.Range("$A$2:$BL$255").AutoFilter Field:=15, Criteria1:="=P", _
Operator:=xlAnd
Range("AD1").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[44]C:R[216]C)"
Range("AE1").Select
ActiveCell.FormulaR1C1 = "=RC[-1]/RC[-27]"
Range("AE2").Select
End Sub


Bref, dans les formules SUM et SUBTOTAL, j'aimerais remplacer R[254]C et R[216]C par la dernière cellule de la colonne non vide afin de pouvoir utiliser la macro avec d'autres bases de données

Merci d'avance pour votre aide

1 réponse

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 152
Bonjour,

Pour SUBTOTAL tu peux utiliser :
Range("AD1").FormulaR1C1 = "=SUBTOTAL(9,R[44]C:R" & Cells(Rows.Count, "AD").End(xlUp).Row & "C)"
et idem pour SUM
Range("D1").FormulaArray = "=SUM(1/COUNTIF(R[2]C:R" & Cells(Rows.Count, "D").End(xlUp).Row & "C,R[2]C:R" & Cells(Rows.Count, "D").End(xlUp).Row & "C))"

Tu peux aussi supprimer
.Select
Selection

qui ne sont pas utiles ainsi que tes lignes
ActiveWindow.ScrollRow
Messages postés
1
Date d'inscription
lundi 14 décembre 2015
Statut
Membre
Dernière intervention
15 décembre 2015

Merci beaucoup !!! ça fonctionne maintenant !! :)