le AutoFiltre d'OpenOffice vs le Filtre Automatique d'Excel2004 (comment trier ?)

Bonjour,
Salut, il y a un point dans le code qui me pose question :
args1(0).Value = "file:///Users/ccciolll/Documents/myfile.csv"
rem adapter le chemin et le nom du fichier dans le code, le programmer est plus compliqué

Est-ce à dire que si je crée cette macro il faudra que j'enregistre toujours mes fichiers txt au même emplacement, déterminé dans ladite macro ?
oui, c'est pour te montrer vite fait un code fonctionnel, mais pas optimisé pour autant.

pour te permettre de choisir le dossier qui va bien, il faut en effet préparer une interaction homme/machine à coups de boîtes de dialogue, de filepicker, etc.
Or, je ne sais pas encore le faire sous LibreOffice Basic.

Des ressources, si tu as le temps, sont disponibles et
Navré.
 
D'accord.
Quand j'en serai venu à bout je le copierai sur mes différents postes que j'ai tous basculés en LibreOffice du coup.
 
En tout cas je viens de tester la macro de base et ça marche.
Il me reste maintenant à identifier comment créer la boîte de dialogue pour l'emplacement du fichier et comment créer un raccourci clavier pour éxécuter cette macro (ou un bouton)
 
En tout cas je viens de tester la macro de base et ça marche.
Il me reste maintenant à identifier comment créer la boîte de dialogue pour l'emplacement du fichier et comment créer un raccourci clavier pour éxécuter cette macro (ou un bouton)
Bonjour,

pour la partie que je connais :
- créer un raccourci clavier passe par Outils>Personnaliser, onglet Clavier
- affecter une macro à un bouton : barre d'outils "Contrôles de formulaire", dessiner le bouton, puis Propriétés
L'inconvénient est que le bouton restera attaché à la feuille de calcul sur lequel il aura été créé.
Plus ergonomique est la barre d'outils dédiée, que tu peux créer via Outils>Personnaliser, onglet Barres d'outils.
 
En effet, cette solution ne me convenait pas car, comme tu le dis, le bouton était dans le tableur et pas dans la barre d'outils.
Finalement la solution était simple.
Il faut donc aller dans Outils > Macro > Gérer les macros > Libre Office Basic
Puis choisir la macro en question et cliquer sur Assigner

J'avais indiqué cette solution sur le site où j'avais cru trouver la réponse mais je viens de voir la réaction des modos à mon intervention. Ce n'est pas la première expression de psycho-rigidité que je constate chez eux mais ça n'a de cesse de m'effarer de la part de personnes qui sont dans le logiciel collaboratif…)
 
Bonjour,

Je reviens sur la question pour essayer de comprendre un des détails que je m'étais contenté de copier-coller

COMMENT ON RÈGLE LE FORMAT D'EXPORT ?

Je devine que cela va se régler sur le code suivant
Bloc de code:
props1(1).Value = "9,34,MAC,1,,0,false,true,true,false"
ça marche bien avec ces valeurs là (enfin ça exporte dans le format dont j'avais besoin à ce moment-là)
ça permet d'obtenir le réglage suivant (ou à peu près) :
Jeu de caractères :Europe Occidentale (Apple Macintosh)
Séparateur de champs {tabulation}
et le reste je ne sais pas trop mais le résultat me convient.



Bon, si je suppose que les codes correspondent aux déplacement dans la fenêtre de dialogue…
9 je ne sais pas ce que c'est.
34 ça pourrait être le choix « Europe Occidentale (Apple Macintosh) » sauf que le 34e choix du menu déroulant c'est plutôt « Europe de l'Est (Apple Macintosh) ». Le choix « Europe Occidentale (Apple Macintosh) » c'est plutôt le 42e.
Ensuite MAC, je sais pas non plus.
1,,0, pareil, je ne comprends pas.
Ensuite les false et true, il y en a 4, je suppose que ça correspond aux cases à cocher. True pour « case cochée » ?

Bon… Ça me parait assez hasardeux, je crois que je suis encore un peu loin de la vérité.


Est-ce qu'il existe qqpart un tableau expliquant les choix possibles pour ce props1(1).Value ?
Je voudrais trouver les valeurs pour obtenir le résultat suivant :
Jeu de caractères : Europe occidentale (Windows-1252/WinLatin 1)
Séparateur de champs ; (point virgule)
et le reste par défaut (non coché)

J'ai compté que le choix Europe occidentale (Windows-1252/WinLatin 1) est le 54e de la liste déroulante.
 
Bonjour,
Bonjour,

Je reviens sur la question pour essayer de comprendre un des détails que je m'étais contenté de copier-coller

COMMENT ON RÈGLE LE FORMAT D'EXPORT ?

Je devine que cela va se régler sur le code suivant
....
Cela dépend fortement du filtre, pour celui-là, voir peut-être https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options (enfin si cela n'a pas changé depuis), ce qui donnerait:
- séparateur de champs: 9=tab,
- séparateur de texte: 34="
- character set: MAC ?
- première ligne à exporter:1,
- après cela ne correspond plus...

Voir peut-être du côté de https://ask.libreoffice.org/en/ques...xt-encoding-for-reading-from-text-file-macro/ , où il semble donner une macro pour lire les options de la boite de dialogue :
Bloc de code:
Sub showFilterOptions
Dim args(),i%
args() = thisComponent.getArgs
for i = 0 to uBound(Args())
    if args(i).Name = "FilterOptions" then inputbox "","",args(i).value
next
End Sub
 
Sur le site OpenOffice ils m'ont dirigé sur cette page


Et après qqes pérégrinations, voici à quoi j'en suis arrivé (je résume un peu) :

cette page, même en Anglais elle me semble incomplète. En effet, au chapitre Filter Options for the CSV Filter > Tokens 1 to 5 ils expliquent bien qu'il faut, exemple, token 1, un code pour le séparateur et mettent en exemple 44 pour virgule. Mais nulle part je ne trouve de listing des autres codes possibles (genre 62 pour un point-virgule, 73 pour une tabulation (j'ai mis des codes au hasard /!\ ne les utilisez pas) et même chose pour les autres token)
[…]
Si je décortique un peu les 2 exemples de string pour props1 que j'avais dans les exemples de macro de mon premier post

Props1 de zeguedon (le résultat en 3eme colonne reprend l'info donnée par Zeguedon dans son coder) :
Token1 (Field Separator) = 59 = ; (point-virgule)
Token2 (Text Delimiter) = 34 = " (guillemets anglais)
Token3 (Character Set) = 22 = occidental iso-8859-15
Token4 (Number of first line) = 1 = la première ligne


Props1 de luc1en complété par zeguedon (le résultat en 3eme colonne reprend l'info donnée par zeguedon dans son code, comme je l'utilise régulièrement je peux en valider certaines) :
Token1 (Field Separator) = 9 = (tabulation) (je confirme)
Token2 (Text Delimiter) = 34 = " (guillemets anglais)
Token3 (Character Set) = MAC = Europe Occidentale (Apple Macintosh) (je confirme que c'est du mac et que les accents sont bons)
Token4 (Number of first line) = 1 = la première ligne (je confirme)
Token5 (Format Code Column) = <vide> = ?
Token6 (Language identifier) = 0 = langage de l'interface utilisateur
Token7 (check box "Quote all text cells") = false = pas coché
Token8 (no UI equivalent) = true = the number cells are stored as numbers
Token9 (check box "Save cell contents as shown") = true = coché
Token10 ( // d'après la notice il n'existerait pas de token 10 \\ ) = false = ?


De tout cela je peux tenter de conclure que le code de base de zeguedon 59,34,22,1 me convient probablement si j'accepte le langage set en occidental iso-8859-15 plutôt que Windows. Allez, je l'accepte

Il restait juste un problème : il mettait des guillemets anglais autour des textes, ce qui ne me convenait pas.

j'ai fini par trouver une formule qui convient à mes besoins, c'est la suivante :
Bloc de code:
          props1(1).Value = "59,34,22,1,,,false"
          MsgBox(chr(13) & "59    =   Le séparateur de champs est: ; [point-virgule] " & chr(13) & chr(13) &_
              "34    =   délimiteur de texte est '' [guillemet Anglais]  " & chr(13) & chr(13) &_
              "22    =   Le jeu de caractères est:  occidental iso-8859-15 " & chr(13) & chr(13) &_
              "1     =   utiliser la première ligne " & chr(13) & chr(13) &_
              "false =   décocher la checkbox 'mettre entre guillemets toutes les cellules de texte' ")

Ouf…

Je me demande si le token 2 (34) ne serait pas inutile à partir du moment où je demande à décocher la chekbox du token 7 et si je ne pourrais pas mettre directement
Bloc de code:
          props1(1).Value = "59,,22,1,,,false"
          MsgBox(chr(13) & "59    =   Le séparateur de champs est: ; [point-virgule] " & chr(13) & chr(13) &_
              "22    =   Le jeu de caractères est:  occidental iso-8859-15 " & chr(13) & chr(13) &_
              "1     =   utiliser la première ligne " & chr(13) & chr(13) &_
              "false =   décocher la checkbox 'mettre entre guillemets toutes les cellules de texte' ")

Voilà.
 
Bonjour,
Sur le site OpenOffice ils m'ont dirigé sur cette page
En effet, au chapitre Filter Options for the CSV Filter > Tokens 1 to 5 ils expliquent bien qu'il faut, exemple, token 1, un code pour le séparateur et mettent en exemple 44 pour virgule. Mais nulle part je ne trouve de listing des autres codes possibles (genre 62 pour un point-virgule, 73 pour une tabulation (j'ai mis des codes au hasard /!\ ne les utilisez pas) et même chose pour les autres token)
....
Pour les premiers codes codant un caractère, il est clair que les valeurs inférieures à 128 correspondent aux codes Ascii https://fr.wikipedia.org/wiki/Ameri...on_Interchange#Table_des_128_caractères_ASCII. Après tu peux être aussi utiliser des valeurs supérieures à 128 en donnant la valeur du caractères en unicode mais le fichier sera tout sauf portable....

Note: en fait, cela doit être le numéro du caractère dans la table définie par le champ 3, mais comme pour les numéros inférieur à 128, tous les encodages utilisent les valeurs de la table ascii donnée (sauf si jamais tu choisis un "character set" très très vieux), ....
 
Dernière édition:
  • J’aime
Réactions: ccciolll
Je viens de m'apercevoir qu'entre la question de départ (titre de la discussion) et la problématique que j'aborde maintenant, à part OpenOffice, rien ne correspond. Un bel auto-trollage !