Choisir plage jusqu'à la dernière cellule contenant une valeur

Résolu/Fermé
MarcAn23 - 14 déc. 2015 à 20:21
MarcAnP23 Messages postés 1 Date d'inscription lundi 14 décembre 2015 Statut Membre Dernière intervention 15 décembre 2015 - 15 déc. 2015 à 19:09
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

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 694
14 déc. 2015 à 23:18
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
0
MarcAnP23 Messages postés 1 Date d'inscription lundi 14 décembre 2015 Statut Membre Dernière intervention 15 décembre 2015
15 déc. 2015 à 19:09
Merci beaucoup !!! ça fonctionne maintenant !! :)
0