Monsieur Excel
Pour tout savoir faire sur Excel !

17 novembre 2007

Généralisation de notre macro

Dans les deux derniers messages, nous avons tout d’abord créé une première macro en l’enregistrant, puis nous avons simplifié cette macro enregistrée.

Aujourd’hui, nous présentons la version « finale » de cette macro dans laquelle nous avons rendu la macro totalement flexible. Cela signifie que, quelque soit le nombre de lignes et de colonnes du bloc, la macro continuera à fonctionner.

Dans les deux versions antérieures, la macro ne fonctionnait bien que si le bloc initial comportait exactement six lignes et sept colonnes. C’était en effet le cas du bloc à partir duquel la macro initiale avait été enregistrée.

Voici le code de la macro finale, totalement flexible :

Sub Totaux_fin()
'
' Totaux Macro
' Macro modifiée le 16/11/2007 par Hervé Thiriez
'
Dim nb_Lig As Integer
Dim nb_Col As Integer
Selection.CurrentRegion.Select
nb_Lig = Selection.Rows.Count
nb_Col = Selection.Columns.Count
Selection.Cells(nb_Lig + 1, 1).Select
ActiveCell.FormulaR1C1 = "Total"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=SUM(R[-" & nb_Lig - 1 & "]C:R[-1]C)"
ActiveCell.AutoFill Destination:=ActiveCell.Range(Cells(1, 1), Cells(1, nb_Col)), _
Type:=xlFillDefault
ActiveCell.Cells(1 - nb_Lig, nb_Col).Select
ActiveCell.FormulaR1C1 = "Total"
ActiveCell.Offset(1, 0).FormulaR1C1 = "=SUM(RC[-" & nb_Lig & "]:RC[-1])"
ActiveCell.Offset(1, 0).AutoFill Destination:=ActiveCell.Range("A2:A" & nb_Lig)
End Sub


Ce sont les variables nb_Lig et nb_Col qui permettent la flexibilité de la macro.

Remarque – Grâce à ces deux variables, nous pouvons nous passer totalement des end(xlDown), end(xlUp) et end(xlToRight) antérieurs…