Appliquer le résultat d'un filtre/tri sur une deuxième feuille
Bonjour,
par macro j'effectue un filtrage de données sur la feuille 1, par exemple en ne gardant dans le tableau que les lignes dont la 6e colonne est non-vide :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| maZone1 = maFeuille1.getCellRangeByPosition(0,0,10,500) '11 colonnes 501 lignes par exemple
With champsFiltre(0)
.Field = 5 ' 6e colonne
.Operator = com.sun.star.sheet.FilterOperator2.NOT_EMPTY
End With
monFiltre = maZone1.createFilterDescriptor(True)
With monFiltre
.CopyOutputData = False
.ContainsHeader = False
.FilterFields2 = champsFiltre()
End With
maZone1.filter(monFiltre) |
Certaines lignes de la feuille 1 sont donc masquées. Mon objectif est maintenant de masquer les mêmes lignes sur la feuille 2 (sans effectuer de filtre sur cette 2e feuille). J'y suis parvenu mais je suis obligé de regarder ligne par ligne si chaque ligne de la feuille 1 est visible ou non et appliquer la même propriété sur chaque ligne de la feuille 2 avec une boucle Do While Loop ou For Next (voir ci-dessous). Cela prend plus de 10 secondes sur mon PC alors que le filtre de la feuille 1 est quasi instantané. C'est impossible d'attendre aussi longtemps pour les utilisateurs. Y a-t-il moyen de le faire cela d'un coup ? J'ai essayé de copier directement maZone1.Rows.IsVisible sur maZone2.Rows.IsVisible mais il semble que la propriété soit un scalaire et pas un tableau...
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| maZone2=maFeuille2.getCellRangeByPosition(0,0,10,500)
oRows1 = maZone1.getRows()
oRows2 = maZone2.getRows()
oRow1Enum = oRows1.createEnumeration()
oRow2Enum = oRows2.createEnumeration()
Do While oRow1Enum.hasMoreElements()
oRow1 = oRow1Enum.nextElement()
oRow2 = oRow2Enum.nextElement()
oRow2.IsVisible=oRow1.IsVisible
Loop |
A terme je souhaiterais faire la même chose avec un tri et pas simplement un filtre, c'est-à-dire appliquer la même permutation de lignes sur la feuille 2 que celle qui a été appliquée à la feuille 1.
Si quelqu'un a une solution, je suis preneur...