Macro Excel pour appliquer le format à l'avant-dernière ligne de la plage sélectionnée

J'utilise une macro pour append un formatting à une gamme sélectionnée de cellules. (Excel 2007) Le nombre de colonnes et de lignes de la plage sélectionnée est toujours différent. De même, les zones sélectionnées ne sont pas toujours sur la même feuille de calcul.

J'ai enregistré une macro et apporté quelques modifications mineures au code, mais j'ai été incapable de comprendre comment je pourrais appliquer le formatting aux cellules de l'avant-dernière ligne de la plage sélectionnée, ce qui serait dans ce cas double bordure de soulignement.

Sub feladat() Application.ScreenUpdating = False Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter End With Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .Weight = xlMedium End With With Selection.Borders(xlEdgeTop) .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .Weight = xlMedium End With With Selection.Borders(xlEdgeRight) .Weight = xlMedium End With With Selection.Borders(xlInsideVertical) .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .Weight = xlThin End With Selection.SpecialCells(xlCellTypeFormulas, 23).Select Selection.Font.Bold = True Application.ScreenUpdating = True End Sub 

J'ai essayé de find l'avant-dernière ligne à l'aide d'un décalage, mais sans chance, car après avoir exécuté la macro, la cellule active est toujours située à un endroit différent.

Tout d'abord, juste quelques conseils: si vous avez vraiment besoin d'appliquer votre format sur la sélection, vous devez utiliser .Select . Mais la première chose que vous devriez apprendre sur VBA: les sélections et les activations doivent être évitées afin d'écrire un code bon et efficace.

Quoi qu'il en soit pour get une sélection de l'avant-dernière ligne dans une gamme sélectionnée, vous pouvez utiliser une simple paire de commands:

 TheRow = Selection.Rows.Count-1 + Selection(1).Row With Workbooks("NameOfYourWorkbook").Worksheets("NameOfYourWorksheet").Rows(TheRow) ' Your formatting here WITHOUT writing Selection ' For example: .Borders(xlDiagonalDown).LineStyle = xlNone End With 

Cela permettra d'get le nombre de lignes dans votre sélection et de soustraire 1. Ensuite, ajoutez la ligne de la première cellule, de sorte que vous obteniez une adresse de ligne absolue claire.
Fait cela, vous pouvez appliquer votre formatting. Cela n'a pas besoin de nouvelles sélections aussi.

Essayez Ceci pour find et appliquer le format à Penultimate row Avant d'exécuter votre macro, select la gamme. modifier

 Sub NewMacro() ShtNm = ActiveSheet.Name Var = Split(Selection.Address, "$") Rwcnt = Var(UBound(Var)) NewRng = Var(1) & (Rwcnt-1) & ":" & Var(3) & (Rwcnt-1) Sheets(ShtNm).Range(NewRng).Select Call feladat 'Call your function End Sub