Bonjour à tous,
Je cherche à réaliser une macro qui affiche / masque des sections selon les choix portés par une boite de dialogue avec liste déroulante à choix multiples.
Jusque là, je m'en suis sorti avec les fils du forum sur le sujet.
Je cherche toutefois à "épurer" les noms de sections pour ne garder que celles qui m'intéressent
Il s'agirait de faire un regex sur ces noms de sections ainsi listées pour n'en conserve à l'affichage de la boite de dialogue que certaines.
Difficile à expliquer, le mieux est un fichier avec l'exemple plus parlant.
Dites moi ce que vous en pensez.
D'ici là passez de bonnes fêtes.
[Résolu][Writer] Section affichée via dialogue et liste de choix multiples avec épurage par regex
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 !

Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- NOOuvel adepte
- Messages : 19
- Inscription : 09 oct. 2022 13:21
[Résolu][Writer] Section affichée via dialogue et liste de choix multiples avec épurage par regex
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Libro75 le 31 déc. 2023 10:17, modifié 3 fois.
LibreOffice 7.2.1.2 (x64)
Windows 10.0 Build 19044
Windows 10.0 Build 19044
-
- PassiOOnné
- Messages : 639
- Inscription : 09 août 2017 22:15
Re: [Writer] Affichage sections selon un dialogue avec liste de choix multiples / épurage par regex possible ?
Hello,
sous LibreOffice depuis la version 6.2 on peut appeler la fonction formule REGEX ( n'existe pas sous OpenOffice).
Exemple d'utilisation :
Ami calmant, J.P
sous LibreOffice depuis la version 6.2 on peut appeler la fonction formule REGEX ( n'existe pas sous OpenOffice).
Exemple d'utilisation :
Code : Tout sélectionner
Sub RegexSearch()
Dim Texte,elem, res, StartTicks As Long, StopTicks As Long
Texte = Array("Texte_Code_12345","Libelle_Code_67890","Texte_Code_67890","Autre_section_1","Autre_section_2")
StartTicks = GetSystemTicks()
res = ""
for each elem in Texte
if Not isempty(createUnoService("com.sun.star.sheet.FunctionAccess").callFunction("REGEX", Array(elem,"_\d{5}"))) then
res = res +elem + " - "
end if
Next elem
StopTicks = GetSystemTicks()
msgbox "Résultats : " + res + " temps : " + (StopTicks - StartTicks) + " ms"
End Sub
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
-
- NOOuvel adepte
- Messages : 19
- Inscription : 09 oct. 2022 13:21
Re: [Writer] Affichage sections selon un dialogue avec liste de choix multiples / épurage par regex possible ?
Merci Jurassic Pork !
Effectivement, j'ai donc réussi à faire deux arrays, un pour les items, mais je n'arrive pas à supprimer les doublons.
Et un array qui listerait les sections (je ne sais pas si c'est utile)
Après il me faudrait arriver à le faire le lien entre les deux. Refaire le schéma inverse avec les regex pour retrouver les sections Libelle_ et Texte_ qui correspondent ou moyen plus simple ?
Effectivement, j'ai donc réussi à faire deux arrays, un pour les items, mais je n'arrive pas à supprimer les doublons.
Et un array qui listerait les sections (je ne sais pas si c'est utile)
Après il me faudrait arriver à le faire le lien entre les deux. Refaire le schéma inverse avec les regex pour retrouver les sections Libelle_ et Texte_ qui correspondent ou moyen plus simple ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.2.1.2 (x64)
Windows 10.0 Build 19044
Windows 10.0 Build 19044
-
- IdOOle de la suite
- Messages : 25976
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Writer] Affichage sections selon un dialogue avec liste de choix multiples / épurage par regex possible ?
Salut,
Si l'objectif est d'extraire les 5 derniers chiffres dans une table mémoire sans doublon :
Si l'objectif est d'extraire les 5 derniers chiffres dans une table mémoire sans doublon :
Code : Tout sélectionner
GlobalScope.BasicLibraries.loadLibrary ("Tools")
DialogLibraries.loadLibrary("Standard")
Dialog1 = DialogLibraries.getByName("Standard").getByName("Dialog1")
oDlg = CreateUnoDialog(Dialog1)
oDoc = ThisComponent
lesSections = oDoc.TextSections
aListeSections = lesSections.ElementNames
Dim aListe(0)
for i = 0 to UBound(aListeSections)
sVal$ = Val(Right(aListeSections(i),5))
if not FieldinList(sVal, aListe()) then
aListe(j) = sVal
j = j+1
Redim Preserve aListe(0 to j)
endif
next
Redim Preserve aListe(0 to j-1)
aListeSections = aListe
-
- NOOuvel adepte
- Messages : 19
- Inscription : 09 oct. 2022 13:21
Re: [Writer] Affichage sections selon un dialogue avec liste de choix multiples / épurage par regex possible ?
Merci Dude, pas exactement cela mais çà m'a permis d'avancer !
Peut être pas très conventionnel mais le résultat est là.
Un dernier point peut-être je voudrais ajouter un texte explicatif derrière chaque "identifiant numérique"
Je les ai mis dans un dictionnaire
Dim dico As New Collection
dico.Add("12345", "Libellé explicatif Item pour 12345") '
dico.Add("67890", "Libellé explicatif Item pour 67890")
Et je voudrais donc ajouter le libellé explicatif pour chaque item dans ma boite de dialogue.
J'imagine qu'il faut que les repasses en revue et créé une condition sur la clé mais je n'y arrive pas.
Je remets mon fichier d'exemple ainsi mis à jour avec vos aides respectives
Peut être pas très conventionnel mais le résultat est là.
Un dernier point peut-être je voudrais ajouter un texte explicatif derrière chaque "identifiant numérique"
Je les ai mis dans un dictionnaire
Dim dico As New Collection
dico.Add("12345", "Libellé explicatif Item pour 12345") '
dico.Add("67890", "Libellé explicatif Item pour 67890")
Et je voudrais donc ajouter le libellé explicatif pour chaque item dans ma boite de dialogue.
J'imagine qu'il faut que les repasses en revue et créé une condition sur la clé mais je n'y arrive pas.
Je remets mon fichier d'exemple ainsi mis à jour avec vos aides respectives

Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.2.1.2 (x64)
Windows 10.0 Build 19044
Windows 10.0 Build 19044
-
- PassiOOnné
- Messages : 639
- Inscription : 09 août 2017 22:15
Re: [Writer] Affichage sections selon un dialogue avec liste de choix multiples / épurage par regex possible ?
Hello,
en ce qui concerne les expressions régulières j'ai retrouvé du code de l'excellent Bernard Marcelly qui utilise le service TextSearch :
Cela est plus rapide que l'utilisation de la fonction Regex et cela fonctionne sous LibreOffice et OpenOffice.
Ami calmant, J.P
en ce qui concerne les expressions régulières j'ai retrouvé du code de l'excellent Bernard Marcelly qui utilise le service TextSearch :
Code : Tout sélectionner
Sub SearchWithRegExp()
Dim rch As Object, resu As Object, r As Long, x As Long
Dim opts As New com.sun.star.util.SearchOptions
Dim Texte,elem, res, StartTicks As Long, StopTicks As Long
Texte = Array("Texte_Code_12345","Libelle_Code_67890","Texte_Code_67890","Autre_section_1","Autre_section_2")
StartTicks = GetSystemTicks()
res = ""
rch = createUnoService("com.sun.star.util.TextSearch")
with opts
.searchString = "_\d{5}"
.algorithmType = com.sun.star.util.SearchAlgorithms.REGEXP
.searchFlag = com.sun.star.util.SearchFlags.REG_EXTENDED
end with
rch.setOptions(opts)
for each elem in Texte
resu = rch.searchForward(elem, 0, Len(elem))
if resu.subRegExpressions = 1 then
res = res +elem + " - "
end if
Next elem
StopTicks = GetSystemTicks()
msgbox "Résultats : " + res + " temps : " + (StopTicks - StartTicks) + " ms"
End Sub
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
-
- NOOuvel adepte
- Messages : 19
- Inscription : 09 oct. 2022 13:21
Re: [Writer] Affichage sections selon un dialogue avec liste de choix multiples / épurage par regex possible ?
Merci à tous les deux
J'ai pris en compte le regex pour openoffice et j'ai solutioné mon problème de collection, j'avais inversé la clé et la valeur, voilà qui est donc résolu.
Terminez bien l'année
Le fichier au besoin si çà peut aider :
J'ai pris en compte le regex pour openoffice et j'ai solutioné mon problème de collection, j'avais inversé la clé et la valeur, voilà qui est donc résolu.
Terminez bien l'année
Le fichier au besoin si çà peut aider :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.2.1.2 (x64)
Windows 10.0 Build 19044
Windows 10.0 Build 19044