Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Ma macro pour effectuer un tri en fonction de la valeur d'une cellule fonctionne parfaitement sauf que j'aimerais que celle ci ne transpose pas les formules mais uniquement les valeurs.
Pourriez-vous m'aider s'il vous plaît ?
Voici la macro que dois je ajouter comme ligne pour arriver à mes fins.
Option Explicit
Sub Tri1
Dim oDoc as Object, fBase as Object, fSel1 as Object, fSel2 as Object
Dim maZone as Object, oFilterDesc as Object, maCellule as Object
Dim oFields(0) As New com.sun.star.sheet.TableFilterField
Dim CellVides as Variant, y as Long
oDoc = thisComponent
fBase = oDoc.Sheets.getByName("Tri O_U Today")
fSel1 = oDoc.Sheets.getByName("Selection Over Today")
fSel2 = oDoc.Sheets.getByName("Selection Under Today")
maZone = fBase.getCellRangeByName("A1:A1000")
CellVides = maZone.queryEmptyCells.RangeAddresses
y = CellVides(UBound(CellVides)).StartRow
maZone = fBase.getCellRangeByName("A1:Ak" & y)
oFilterDesc = maZone.createFilterDescriptor(True)
With oFields(0)
.Field = 36
.IsNumeric = True
.NumericValue = 1.8
.Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
End With
With oFilterDesc
.CopyOutputData = True
.ContainsHeader = False
.Orientation = com.sun.star.table.TableOrientation.COLUMNS
maCellule = fSel1.getCellRangeByName("A1")
.OutputPosition = maCellule.CellAddress
.FilterFields = oFields()
End With
maZone.filter(oFilterDesc)
oFilterDesc = maZone.createFilterDescriptor(True)
With oFields(0)
.Field = 36
.IsNumeric = True
.NumericValue = 0.2
.Operator = com.sun.star.sheet.FilterOperator.LESS
End With
With oFilterDesc
.CopyOutputData = True
.ContainsHeader = False
.Orientation = com.sun.star.table.TableOrientation.COLUMNS
maCellule = fSel2.getCellRangeByName("A1")
.OutputPosition = maCellule.CellAddress
.FilterFields = oFields()
End With
maZone.filter(oFilterDesc)
End Sub
Dernière modification par micmac le 19 sept. 2019 13:22, modifié 2 fois.
Raison :Ajout de [Résolu]. La coche verte ne suffit pas.
libO 5.4
windows 7 professionnel
Obligation de version
Je voudrais juste savoir si il est possible de rajouter une ligne dans la macro qui permettrait que les lignes filtrées qui arrivent sur la feuille de destination ne prennent pas en compte les formules de la feuille de départ mais juste les valeurs.
Merci d'avance pour votre aide
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
libO 5.4
windows 7 professionnel
Obligation de version
Bonjour,
En espérant que tu utilise xray
Il y une astuce qui consiste à remplacer les formules de la zone à trier par leurs valeurs respectives avant de trier puis de redonner à la zone les formules telles qu'elle étaient lorsque le tri est terminé.
Par contre j'ai un soucis avec ton fichier que je ne reproduis pas avec un fichier vierge.
J'ignore si ton fichier contient des scories venues d'Excel ou d'un copier/coller à partir d'internet ou des surcharges de style, mais après exécution de la macro, les colonnes sur lesquelles tu as appliqué 2 décimales reviennent à un format à 4 ou 5 décimales.
Tu devrais sélectionner toute la feuille puis clic droit dans une cellule>>Effacer le formatage direct et créer des styles pour formater tes cellules.
Option Explicit
Sub Tri1
Dim oDoc as Object, fBase as Object, fSel1 as Object, fSel2 as Object
Dim maZone as Object, oFilterDesc as Object, maCellule as Object
Dim oFields(0) As New com.sun.star.sheet.TableFilterField
Dim CellVides as Variant, formules As Variant, y as Long
oDoc = thisComponent
fBase = oDoc.Sheets.getByName("Feuille1")
fSel1 = oDoc.Sheets.getByName("Feuille2")
fSel2 = oDoc.Sheets.getByName("Feuille3")
maZone = fBase.getCellRangeByName("A1:A1000")
CellVides = maZone.queryEmptyCells.RangeAddresses
y = CellVides(UBound(CellVides)).StartRow
maZone = fBase.getCellRangeByName("A1:Ak" & y)
'=================================
formules = maZone.GetFormulaArray
maZone.SetFormulaArray(maZone.DataArray)
'=================================
oFilterDesc = maZone.createFilterDescriptor(True)
With oFields(0)
.Field = 36
.IsNumeric = True
.NumericValue = 1.8
.Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
End With
With oFilterDesc
.CopyOutputData = True
.ContainsHeader = False
.Orientation = com.sun.star.table.TableOrientation.COLUMNS
maCellule = fSel1.getCellRangeByName("A1")
.OutputPosition = maCellule.CellAddress
.FilterFields = oFields()
End With
maZone.filter(oFilterDesc)
oFilterDesc = maZone.createFilterDescriptor(True)
With oFields(0)
.Field = 36
.IsNumeric = True
.NumericValue = 0.2
.Operator = com.sun.star.sheet.FilterOperator.LESS
End With
With oFilterDesc
.CopyOutputData = True
.ContainsHeader = False
.Orientation = com.sun.star.table.TableOrientation.COLUMNS
maCellule = fSel2.getCellRangeByName("A1")
.OutputPosition = maCellule.CellAddress
.FilterFields = oFields()
End With
maZone.filter(oFilterDesc)
'==========================
maZone.SetFormulaArray(formules)
'==========================
End Sub
En principe, toujours à jour des dernières versions dites stables AOO LibreOffice Debian 10 et 11