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

Résolu
MarcAn23 -  
MarcAnP23 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   4 724
 
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   Statut Membre Dernière intervention  
 
Merci beaucoup !!! ça fonctionne maintenant !! :)
0