[Résolu][Calc] "Additionner" des bordures / mises en forme de cellule

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: 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 !
Tad
Membre lOOyal
Membre lOOyal
Messages : 49
Inscription : 07 déc. 2022 08:42

[Résolu][Calc] "Additionner" des bordures / mises en forme de cellule

Message par Tad »

Bonjour,

Je sais que mon titre n'est pas explicite mais je ne sais pas comment formuler autrement.

Pour illustrer mon propos, je me servirais du comportement d'une "msgbox".
Pour une boite de message, il est possible d'adapter l'apparence de celle-ci par addition des constantes "MB_".
Les 3 formulations sont strictement équivalentes et produisent le même résultat :

Code : Tout sélectionner

 msgbox("Ceci est un test utilisant les constantes MB", MB_OKCANCEL + MB_ICONEXCLAMATION + MB_DEFBUTTON2,"TEST")
 
 msgbox("Ceci est un test utilisant les valeurs MB", 1 + 48 + 256,"TEST")
 
 msgbox("Ceci est un test utilisant la somme MB", 305,"TEST")
Est-il possible d'appliquer une même méthodologie pour les bordures d'une cellule ? Le but étant, sur des cellules déjà mises en forme par une autre macro, d'ajouter une bordure basse supplémentaire sans toucher les autres bordures.

Contexte explicatif :
- j'ai une macro qui réalise une mise en forme "globale" à la fin de son exécution en traitant par "bloc verticaux" (exemple : [D20:D250] puis [F20:F250])
- j'aimerai une macro additionnelle pour que certaines lignes aient, en plus, une bordure en bas de cellule, sans rien modifier des bordures droite/gauche existantes.

J'ai parcouru les suprêmes et snippets de code sans trouver (ma demande est soit trop spécifique, soit mal formulée, soit encore une fois je m'y prend comme un manche). De même que cette page que j'ai tenté d'adapter.

Liste partielle d'autres manip réalisées sur une base faite à l'enregistreur de macro :
- en commentant tout ce qui concernait "topBorder", "TopDistance", BottomBorder" et "BottomDistance" dans la première macro de mise en forme des cellules ; puis en commentant tout ce qui concernait "Left[...]" et "Right[...]" dans la seconde macro que je cherche à écrire.
- en tentant de tracer cette bordure avant le traitement par bloc : elles disparaissent (off course)
- en tentant de le faire après le traitement par bloc : il ne reste plus que les bordures de bas de cellule

A noter qu'à chaque usage de l'enregistreur, j'ai fait attention que les lignes "grisées" (qui disent que sur la plage sélectionnée toutes les cellules n'ont pas une mise en forme identique) le restent : sans changement sur le résultat...
cellule.jpg
Dans les résultats de l'enregistreur, il y apparait les mentions "flags" ( BorderInner.Flags et BorderInner.ValidFlags). Peut-être que s'y niche une partie de la solution, sauf que rien trouvé sur ces "flags".

Si une piste existe (sans avoir besoin de traiter toutes les cellules une par une...), je suis tout ouïe !

Merci

TAD
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Tad le 26 août 2024 07:21, modifié 1 fois.
LibreOffice 7.6 sous W10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Dude »

Salut,
Tad a écrit : 29 juil. 2024 09:31 Je sais que mon titre n'est pas explicite mais je ne sais pas comment formuler autrement.
Déjà commence par fournir un document et un mode pas-à-pas détaillé de ce que tu cherches à obtenir.
Je ne vois pas l'intérêt, ni l'objectif de cette addition.

Il existe une extension pour faciliter la mise en place de bordures : viewtopic.php?t=8689
Tad
Membre lOOyal
Membre lOOyal
Messages : 49
Inscription : 07 déc. 2022 08:42

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Tad »

Salut,

Voici un exemple. J'y ai mis 2 macros.

Bouton 1 : la mise en forme standard (qui traite en colonne). Déjà utilisée de base.
Bouton 2 : la mise en forme complémentaire (qui traite une ligne).
et en dessous ce à quoi je veux arriver en chainant les 2 macros si possible.

A noter : en fonctionnement normal, pour la macro liée au bouton 1 son paramètre "lastligne" lui est passé par la macro appelante (ici je l'ai mis en constante)
Dude a écrit : 29 juil. 2024 11:20 Je ne vois pas l'intérêt, ni l'objectif de cette addition.
  • parce que parcourir un tableau de quelques centaines de lignes pour y repérer entre 0 et quelques centaines de lignes où faire cette mise en forme complémentaire à la main c'est longuet et qu'il y a un risque d'en rater quelques unes
  • parce que ces lignes que j'aimerais "souligner" ne sont pas toujours dans le même ordre, ni même ne sont présentes à chaque fois (sur un tableau de 300 à 1000 lignes, cette mise en forme complémentaire serait utile sur 0 à 95% des lignes selon les cas)
  • parce que cette (ces) macro(s) s'appliquent sur une feuille de résultats, laquelle est produite par une macro plus vaste qui centralise les infos utiles de plusieurs autres feuilles, et qu'il est plus facile d'identifier la ligne sur laquelle appliquer la mise en forme additionnelle au moment où elle est reportée sur la feuille de résultat qu'après la mise en forme générale des colonnes (qui se fait en fin de process)
  • parce que traiter les lignes une par une (cas toujours possible mais oh combien consommateur de ressources !) en appliquant une mise en forme différente (avec ou sans pointillés en bordure basse) ne me semble pas un modèle d'efficacité. Une vieille habitude de dessinateur industriel sur table :oops: , où il est d'usage de tracer toutes les lignes d'une même orientation en une seule passe (toutes les verticales, PUIS toutes les horizontales, etc)
  • parce que le but d'une automatisation c'est justement de faciliter ce genre de job
  • parce que, dans la mesure du possible et si employé dans le champ des possibilités techniques dudit outil, j'aime bien que mes outils fassent ce que je veux (j'aime que le marteau tape sur le clou et non sur mes doigts, quand bien même il trouverait le contact avec mes doigts plus agréable)
  • certes, je l'entend, mais moi, tout simplement, j'y trouve un intérêt (visuel) et un objectif (faciliter la lecture) ;) Même si j'avoue que c'est purement cosmétique.
PS : extension testée (le principe est très intelligent !), mais je n'ai pas l'impression qu'elle réponde à ma demande. Et les touches ALT + 2/4/6/8 sont déjà employées à d'autres besoins, du coup seul le ALT+8 fonctionne ici (une fois sur 4...)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6 sous W10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Dude »

Je ne vois pas le
Dude a écrit : 29 juil. 2024 11:20 mode pas-à-pas détaillé de ce que tu cherches à obtenir.

Tad a écrit : 29 juil. 2024 13:04 parce que parcourir un tableau de quelques centaines de lignes pour y repérer entre 0 et quelques centaines de lignes où faire cette mise en forme complémentaire à la main c'est longuet et qu'il y a un risque d'en rater quelques unes
C'est normalement avec un formatage conditionnel qu'on réalise cela.
Tad
Membre lOOyal
Membre lOOyal
Messages : 49
Inscription : 07 déc. 2022 08:42

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Tad »

Oui mais dans le cas présent cela ne semble pas possible. Ce serait trop simple :cry:
Les données sont issues de plusieurs feuilles (dans le même classeur). La condition qui permettrait le formatage conditionnel n'apparait pas dans la feuille de résultat

A moins qu'une MFC puisse être adaptée et appelée "au vol" dans une macro ? Ce qui revient à traiter ligne par ligne ? :think: (j'ai aussi pensé à l'application de styles, mais j'ai justement supprimé cette piste car c'était du "ligne à ligne" et le test réalisé présente les mêmes défauts : on efface la MEF initiale [logique])

Pour le PàP, je ne sais pas quoi dire de plus qui soit utile, mais le fonctionnement (actuel) du bouzin c'est :
  1. des données sont rentrées dans plusieurs feuilles
  2. on clique sur un bouton qui enclenche une macro
  3. cette macro va parcourir chacune des feuilles (de 2 à 6, ce n'est pas fixe) pour y prélever les données et, grâce à celles-ci, rédiger ligne à ligne une fiche de synthèse
  4. à la fin de la macro, on enclenche la mise en forme (pour faire les cadres de visa, tracer les colonnes, etc ) → 1er bouton
  5. la fiche de synthèse ainsi mise en forme est imprimée en PDF
  6. l'ensemble est archivé
  7. tout est remis à zéro et on repart pour un tour
Dans le monde merveilleux et bisounouresque dans lequel je vis, il y aurait :
→ 3 bis : si les données utilisées pour la rédaction de la ligne en synthèse contiennent (parmi les éléments qui ne seront pas copiés) un critère particulier alors on trace une ligne de pointillés après rédaction de ladite ligne de synthèse. Ce point ne me pose pas de problème (2éme bouton)
→ 4 : à la fin de la macro, on enclenche la mise en forme en conservant les lignes pointillées déjà tracées
C'est sur ce point que mon arc-en-ciel se fracasse lamentablement : il ne semble pas possible de conserver, avec une mise en forme par macro, ce qui est déjà existant. Alors que cela se fait très bien à la souris...

Dis moi si je peux fournir d'autres précisions (je n'ai pas l'impression d'apporter plus d'info utiles qu'à mon premier post :oops: ), car il est possible que je n'ai pas compris ce qu'englobait le terme "mode pas-à-pas détaillé"
LibreOffice 7.6 sous W10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Dude »

Tad a écrit : 29 juil. 2024 14:48 A moins qu'une MFC puisse être adaptée et appelée "au vol" dans une macro ?
Dans ce fil, je montre comment recopier une MFC : viewtopic.php?p=372607#p372607
Tad a écrit : 29 juil. 2024 14:48 pas compris ce qu'englobait le terme "mode pas-à-pas détaillé"
Fournir deux copies écran montrant la feuille au départ et à l'arrivée.
Tad
Membre lOOyal
Membre lOOyal
Messages : 49
Inscription : 07 déc. 2022 08:42

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Tad »

Merci Dude pour ta patience.
Je vais regarder ton lien (pas tout de suite, la fin de semaine s'annonce très agitée avant les congés...) et voir si je peux m'en sortir avec. Je ne donnerais peut-être pas de nouvelles avant le 2 septembre :( (si les modos pouvaient garder le fil ouvert ...)

Pour le PàP, voilà 2 images qui décomposent au mieux l'actuel (normal.jpg) et ce que je vise (desiree.jpg). Sachant que les lignes sont créées l'une après l'autre ; que si je crée les pointillés à la rédaction de la ligne, ceux-ci sont (actuellement) supprimés dès qu'on passe aux étapes 2 et 3.
Les 2 macros du classeur fourni plus haut sont celles employées dans le service.
Les données n'ont en soit pas d'importance intrinsèque : cela pourrait être des feuilles de matchs, des organisations d'équipes, des relevés d'heure, des factures, des plannings de maintenance, des recettes de cuisine ou en ce qui me concerne des résultats de mesures sur banc en chambres d'essais climatiques.

Etapes 1 : la rédaction ligne par ligne. On voit en "Desiree.jpg" qu'une ligne est bordée de pointillé.
Etapes 2 et 3 : le tracé des cadres finaux, permettant le tracé des colonnes

BàT

Tad
normal.jpg
Desiree.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6 sous W10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Dude »

En créant deux styles de cellule (BordG et BordD), on applique ça aux colonnes de la plage :

Code : Tout sélectionner

Sub Main
	FormatageBord("B18:F22")
End Sub

Sub FormatageBord(sPlage)
	oDoc = ThisComponent
	oFeuil = oDoc.CurrentController.ActiveSheet
	oPlage = oFeuil.getCellRangeByName(sPlage)
	'convertit l'adresse en coordonnées
	oCoord = oPlage.getRangeAddress()	
	nLigDep = oCoord.StartRow
	nLigFin = oCoord.EndRow
	'1ere colonne BordG
	nColSel = oCoord.StartColumn
	oColonne = oFeuil.getCellRangeByPosition(nColSel,nLigDep,nColSel,nLigFin)
	oColonne.CellStyle = "BordG"
	'2e colonne BordD
	nColSel = nColSel +1
	oColonne = oFeuil.getCellRangeByPosition(nColSel,nLigDep,nColSel,nLigFin)
	oColonne.CellStyle = "BordD"
	'3e colonne BordG
	nColSel = nColSel +1
	oColonne = oFeuil.getCellRangeByPosition(nColSel,nLigDep,nColSel,nLigFin)
	oColonne.CellStyle = "BordG"
	'4e colonne BordD
	nColSel = nColSel +1
	oColonne = oFeuil.getCellRangeByPosition(nColSel,nLigDep,nColSel,nLigFin)
	oColonne.CellStyle = "BordD"
	'5e colonne BordD
	nColSel = nColSel +1
	oColonne = oFeuil.getCellRangeByPosition(nColSel,nLigDep,nColSel,nLigFin)
	oColonne.CellStyle = "BordD"
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Tad
Membre lOOyal
Membre lOOyal
Messages : 49
Inscription : 07 déc. 2022 08:42

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Tad »

Bonjour,

Malheureusement ça ne fonctionne pas.
Le comportement de ta macro reproduit exactement, et d'une manière plus élégante :super: , ce que fait piteusement la mienne et que je veux éviter : les lignes de bord sont certes bien tracées, mais ce faisant les pointillés sont supprimés (voir gif ci-dessous). J'ai passé les pointillés en noir pour qu'ils soient plus visibles même si on garde l'affichage de la grille.
FormatageBord_Dude.gif
Ce que je souhaite, si c'est techniquement possible, c'est de reproduire le comportement qu'on constate en utilisant l'outil "Formater les cellules" (Ctrl + 1) comme ci-dessous
Methode_visee.gif

Je vois que tu utilises OpenOffice, et moi LibreOffice. Y aurait-il un comportement différent des macros entre les 2 suites ?

Note / PS : comme je l'ai dit, c'est juste pour apporter du confort de lecture à mes collègues (et aussi aux clients qui reçoivent les pdf, off course), donc si techniquement on ne peut pas, on ne va pas en faire une montagne :) Idem si, pour y arriver, il faut une usine à gaz qui ralentira la rédaction de la fiche synthèse, on laissera tomber et/ou on (je) m'y re-pencherai à heures perdues car ce mystère technique m'intéresse... Déformation professionnelle...
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6 sous W10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Dude »

Les bordures en pointillé n'existent pas sous OpenOffice cf. demande d'amélioration 8275

Mais bon le principe reste le même avec l'ajout de deux styles supplémentaires.
Reste à établir la règle qui détermine son usage.
Tad
Membre lOOyal
Membre lOOyal
Messages : 49
Inscription : 07 déc. 2022 08:42

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Tad »

Un peu plus que 2 styles en plus ;)
- Cellule avec bordure droite avec pointillé en bordure basse
- Cellule avec bordure droite sans pointillé en bordure basse
- idem à gauche
- idem pour les cellules qui n'ont de bordure ni à droite ni à gauche, mais qui peuvent en avoir (ou pas) en bas (dans mon classeur de démo ci-dessus, ce qui couvre D et E va en réalité de D à G dans le vrai classeur)

Pour l'usage : à part appliquer le style adhoc cellule par cellule au moment de la rédaction de la ligne, donc augmenter le temps de traitement... Je me re-pencherai à nouveau sur cette piste à la rentrée quand j'aurai un instant.

Je trouve étonnant que le comportement en mode GUI ne puisse pas être reproduit à l'identique par macro (du moins pas par l'enregistreur qui se soucie comme d'une guigne des bordures qui existeraient déjà). Encore un mystère sur ma liste !
Dude a écrit : 31 juil. 2024 09:13 demande d'amélioration 8275
[HS] Ah ouais ! 2002 tout de même ! [/HS]
LibreOffice 7.6 sous W10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Dude »

En ajoutant un 3e style, j'arrive au résultat.
Ajout_format_cellules.ods
Tad a écrit : 31 juil. 2024 13:52 Je trouve étonnant que le comportement en mode GUI ne puisse pas être reproduit à l'identique par macro
Non, tu ne peux faire l'opération de mise en forme en une seule fois via l'IHM.

Maintenant, tu peux toujours mémoriser les structures .table.BorderLine de chaque cellule.
Sers toi de XRay pour comprendre l'usage des propriétés Bottom, Right, Left et TopBorder.
Mais je ne suis pas sûr que le code soit plus lisible au final que par application de style.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Tad
Membre lOOyal
Membre lOOyal
Messages : 49
Inscription : 07 déc. 2022 08:42

Re: [Calc] "Additionner" des bordures / mises en forme de cellule

Message par Tad »

Merci, je crois que je vais partir sur cette solution !
LibreOffice 7.6 sous W10