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 !
Après quelques moins "d'abstinence" je me replonge dans les macros libreOffice et je crois bien avoir perdu quelques trucs en cours de route...
Je travaille actuellement sur les filtres et je cherche à isoler dans une liste volumineuse ( 53.000 lignes) les lignes qui comportent des caractères problématiques ( &,/,*)
With champsFiltre(0) 'Parametre le 1er critère de filtre
.Field = 0 'Filtre la colonne A
.Operator = com.sun.star.sheet.FilterOperator.EQUAL
.IsNumeric = false 'Utilise une chaîne et non un nombre.
.StringValue = ".*/.*" 'Valeur a chercher n'importe ou dans le champ
End With
mais je n'arrive pas à chercher les * ... forcément. Je pense que ce que je recherche ( .StringValue = ".***." ) n'est pas bon, sans savoir par quoi le remplacer
Merci d'avance
Dernière modification par Phane le 06 févr. 2018 14:36, modifié 2 fois.
@ home, Libre Office Version: 6.3.3.2 et Xubuntu 18.04.3 LTS/ W7
@ pro fixe, Libre Office 4.3.7.2 et W7 ( Obligation de version )
@ pro portable , Libre Office 5.2.6.2 et W10 ( Obligation de version )
option explicit
'===============================================================
Sub Filtre_PP_Caracteres
'===============================================================
'Récupère les lignes avec des caractères parasites
'---------------------------------------------------------------
Dim mafeuille as object
Dim monFiltre as object, pointresu as object, ZoneImport as object
Dim champsFiltre(2) as New com.sun.star.sheet.TableFilterField
Dim y as long
'---------------------------------------------------------------
Mafeuille = Thiscomponent.sheets.getbyname("Test") ' Feuille source
ZoneImport = Mafeuille.getCellRangeByposition(0,0,0,5) 'zone à filtrer
pointResu = Mafeuille.Getcellbyposition(2,0)
'paramètres personnalisés du filtre
With champsFiltre(0) 'Parametre le 1er critère de filtre
.Field = 0 'Filtre la colonne A
.Operator = com.sun.star.sheet.FilterOperator.EQUAL
.IsNumeric = false 'Utilise une chaîne et non un nombre.
.StringValue = ".*/.*" 'Valeur a chercher n'importe ou dans le champ
End With
With champsFiltre(1) 'Parametre le 1er critère de filtre
.Connection = com.sun.star.sheet.FilterConnection.OR
.Field = 0 'Filtre la colonne A
.Operator = com.sun.star.sheet.FilterOperator.EQUAL
.IsNumeric = false 'Utilise une chaîne et non un nombre.
.StringValue = ".*&.*" 'Valeur a chercher
End With
With champsFiltre(2) 'Parametre le 1er critère de filtre
.Connection = com.sun.star.sheet.FilterConnection.OR
.Field = 0 'Filtre la colonne A
.Operator = com.sun.star.sheet.FilterOperator.EQUAL
.IsNumeric = false 'Utilise une chaîne et non un nombre.
.StringValue = ".***." 'Valeur a chercher
End With
MonFiltre = ZoneImport.createFilterDescriptor(True)
With MonFiltre
.CopyOutputData = True
.ContainsHeader = true
.outputposition = pointResu.CellAddress
.UseRegularExpressions = true
.FilterFields = champsFiltre()
End with
ZoneImport.filter(MonFiltre) 'Appliquer le filtre
End sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
@ home, Libre Office Version: 6.3.3.2 et Xubuntu 18.04.3 LTS/ W7
@ pro fixe, Libre Office 4.3.7.2 et W7 ( Obligation de version )
@ pro portable , Libre Office 5.2.6.2 et W10 ( Obligation de version )
Je travaille actuellement sur les filtres et je cherche à isoler dans une liste volumineuse ( 53.000 lignes) les lignes qui comportent des caractères problématiques ( &,/,*)
S'il n'y a rien de confidentiel, je suis preneur du fichier pour tester à l'ancienne. Avec la liste des caractères à rechercher.
5 000 lignes donneraient déjà une idée.
Si c'est confidentiel, je suis toujours preneur, mais il t'appartient de le rendre anonyme.
cOOordialement
--- AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide... XRay + SDK
--- Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Ohhh Jeff, comme j'aimerais prendre le temps de partager une petite mousse pour cette solution qui fonctionne avec mes données
@churay :Les données sont plutôt sensibles mais j'aurais faire l'effort de les rendre anonymes sans la solution de Jeff. Merci en tout cas de cette (tres) gentille proposition
Merci à tous
@ home, Libre Office Version: 6.3.3.2 et Xubuntu 18.04.3 LTS/ W7
@ pro fixe, Libre Office 4.3.7.2 et W7 ( Obligation de version )
@ pro portable , Libre Office 5.2.6.2 et W10 ( Obligation de version )
J'ai recopié ton exemple, jusqu'à la ligne 50 034 :
- jusqu'à 250 lignes, le filtre est instantané,
- à 260 je n'ai pas la patience d'attendre... Je crains sérieusement pour 50 000 lignes...
Une simple macro de balayage, met
- 1 mn 15 s pour copier les chaînes en colonne C des 50 033 lignes à tester...
- 2 mn à 2 mn 30 s pour changer la couleur de fond des cellules contenant les caractères recherchés sur les 50 033 lignes à tester...
cOOordialement
--- AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide... XRay + SDK
--- Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...