Bonjour à tous,

Ceci est mon premier mail sur cette liste, donc je me présente ... Olivier, 36 ans. J'utilise OOo à titre perso depuis quelques années et j'essaie de le promouvoir dans l'entreprise où je travaille (à défaut de le faire adopter pour l'instant).

Une des fonctionnalité qui peut poser un problème est à mon avis l'autofiltre.

En effet, à ma connaissance, toute action effectuée sur une selection "autofiltrée" (donc avec lignes cachées) s'applique à toutes les cellules de la selection, y compris celles qui sont cachées.

Je me suis donc décidé à écrire une macro qui transforme cette selection en une selection multiple excluant les lignes cachées. Associée à un bouton dans une barre d'outils, cette macro à pour l'instant résolu mon problème.

Je n'ai qu'environ un mois de macros OOo derrière moi... Donc beaucoup à apprendre de vous !!
Si elle est mal écrite ou si vous pouvez l'ameliorer, n'hésitez pas !

Olivier



La macro :

Sub split_selection

Dim Doc as object
Dim Sheet as object
Dim Cell as object
Dim mySel
Dim myNewMultipleSel
Dim myRows
Dim myColumns
Dim myStartColumn
Dim myStartRow
Dim myRange

Doc = ThisComponent
Sheet = Doc.CurrentController.ActiveSheet
mySel = Doc.getCurrentSelection()

If mySel.SupportsService("com.sun.star.sheet.SheetCellRange") then
    myNewMultipleSel = Doc.CreateInstance("com.sun.star.sheet.SheetCellRanges")
    myRows = mySel.Rows.Count
    myColumns = mySel.Columns.Count
    myStartColumn = mySel.RangeAddress.StartColumn
    myStartRow = mySel.RangeAddress.StartRow
    For i = 0 to myRows-1
        Cell = mySel.GetCellByPosition(0, i)
        if Cell.Rows.IsVisible then
            myRange = Sheet.getCellRangeByPosition(myStartColumn, myStartRow+i, _
                      myStartColumn+myColumns-1, myStartRow+i)
            myNewMultipleSel.AddRangeAddress(myRange.GetRangeAddress(), True)
        endif
    Next i
    Doc.CurrentController.Select(myNewMultipleSel)
Else
    Print "Une seule selection supportée..."
End If

End Sub

Répondre à