[Résolu][Calc] Le texte loge-t-il dans la 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 !
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

[Résolu][Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

Bonjour

Je viens de aire une recherche, mais, je ne trouve pas...
J'aimerai savoir s'il est possible à l'aide d'une macro de savoir si le texte qui est dans une cellule loge dans la cellule. Mon but serait d'optimiser la taille des caractères de la cellule. Malheureusement, le texte étant sur plusieurs lignes, je ne peux utiliser Format->cellule->Alignement->Ajuster à la taille de la cellule.

Si vous voulez un exemple de fichier, le voici : lors du remplissage de la cellule D6 de la feuille Cartes2 qui est automatiquement générée lors de la modification de la cellule AH22 de la feuille recto du fichier suivant : h**ps://troumad.org/COF/Feuille_Chronique_cartes.ods (on pourrait avoir l'information à la ligne 745 de la macro voie de Standard->armures )

La modération vous a écrit: 1- Pour la bonne tenue de ce forum, veillez à respecter la syntaxe des balises (première lettre en majuscule puis le reste en minuscules, le tout entre crochets).
2- Lien externe neutralisé. Mettez en ligne votre fichier correctement. : Comment joindre un fichier

Dernière modification par micmac le 01 avr. 2022 15:01, modifié 3 fois.
Raison : Une fois de plus nous avons ajouté la coche verte pour vous.
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

Salut,

Regarde du côté de la méthode getStringWidth dans l'interface XFonts.


PS : pour des questions de pérennité, il est de coutume sur ce forum de joindre ici le document.
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

Bonjour et merci

je viens de regarder. Je ne trouve pas les éléments indiqués. J'ai fait un appel de Xray sur une cellule que je souhaite évaluer. Pour y accéder, il suffit de changer le profil. On clique sur le profil et une flèche menu apparaît à sa droite. Ceci ferra apparaître 6 fois la boite de dialogue Xray. Peut-être que je ne cherche pas sur le bon élément.
test.ods
nb : je n'arriverai pas à envoyer la pièce jointe ! Je viens de comprendre pourquoi, elle fait 11 Mo !
Je l'avais mis en lien : h**ps://troumad.org/OOo/test.ods

J'ai enlevé des fonds de page et ça a pu passer.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

Et que faut-il faire avec ton document ?
Quelle feuille, quelle cellule, quel texte ?
Ton problème est sans doute limpide pour toi mais si tu ne fournis pas un minimum d'explication, tu surestimes nos pouvoirs de divination.

:roll:
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

Le document comporte beaucoup de case qui sont remplies automatiquement en fonction des choix qu'on fait dans les menus Profils ou Race.
Par exemple les 5 dernières lignes (23 à 27) de la page recto. Le texte à mettre est parfois très long, pour que tout soit visible je peux manuellement modifier les hauteurs des 5 dernières lignes, je peux aussi manuellement modifier la taille des caractères dans les cases.
Pour commencer, j'aimerai essayer de modifier la taille des caractères dans les cases (mettre 10 ou moins) afin que tout le texte soit visible et pas trop petit, avec l'âge, j'aime de moins en moins quand c'est écrit petit :(

Il y a le même problème pour les 5 dernières lignes de la page verso, la case B15 de recto et les 4 cases utilisées des cases Cartes et Cartes2. Si je commence à le faire avec une case, je peux passer ensuite aux autres. Enfin, quand je trouve le temps, il faut aussi travailler et prendre l'air !

Le but est bien sûr de garder la même mise en page et de pouvoir imprimer les pages recto et verso en recto-verso sur une seule feuille blanche.
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

troumad a écrit :Par exemple les 5 dernières lignes (23 à 27) de la page recto. Le texte à mettre est parfois très long, pour que tout soit visible je peux manuellement modifier les hauteurs des 5 dernières lignes, je peux aussi manuellement modifier la taille des caractères dans les cases.
Où se trouve le problème ?
capture.png
En plus ta feuille est protégée.
Encore une fois, il faut fournir un exemple simplifié, exploitable et limité à la seule problématique.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

La feuille est protégée sans mot de passe : ce n'est pas un problème. Le script fait sauter la protection quand il a besoin d'écrire et la remet automatiquement dès qu'il écrit.
Le problème, c'est que j'aimerai pouvoir écrire en plus gros. 8 par exemple pour cet exemple avec l'arquebusier en C-23. Et passer à 10 si on choisit le magicien. Sur la feuille verso, j'aimerai profiter de cette astuce pour pouvoir écrire plus facilement l'équipement et la description. Et là, le contenu ne peut être connu par avance, c'est le joueur qui choisit ou imagine ce qu'il veut ou peut prendre.
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

Bis repetitae
Dude a écrit :Encore une fois, il faut fournir un exemple simplifié, exploitable et limité à la seule problématique.
En gros, j'ai le texte "bidule..." que je veux écrire en cellule A1 de la feuille X.
Comment faire pour que le texte soit en police Y et en taille Z ou que la cellule soit de largeur W.
Tu fournis le classeur et tu ajoutes une copie écran pour l'effet escompté.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

Bonjour

Voici la feuille toute simple. Je voudrais adapter la taille du texte de la cellule A1. Vous pouvez voir sur la cellule A8, sur une seule ligne, c'est possible. Mais, sur plusieurs lignes, ça ne l'est pas.

taille par défaut de 10 :
avant.png
diminution de la taille à 8.5 pour que ça rentre dans la case :
apres.png
je voudrais que la diminution se fasse automatiquement. Un peu comme ce qu'il se passe pour une seule ligne dans la cellule A8.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

Franchement, je ne vois pas l'intérêt à ce qu'un texte devienne illisible.
Par exemple pour ta cellule A1, on tombe à une taille de 4,3. :shock:

Code : Tout sélectionner

Sub CalculTaillePolice
   Dim oFD as new com.sun.star.awt.FontDescriptor
	oDoc = ThisComponent
	oCC = oDoc.currentController
	oFrame = oCC.getFrame()
	nPix =	oFrame.componentwindow.info.pixelPerMeterx /100 'mm > pixel
	oSel = oDoc.CurrentSelection
	With oSel
		sTexte = .String
		sPolice = .CharFontName
		nTaille = .CharHeight
		nLarg = .Size.Width / nPix
    End with
    oFen = oFrame.getContainerWindow()
	oFDs() = oFen.getFontDescriptors()
	For each oFD in oFDs
		if oFD.Name = sPolice then exit for
	next
	oFD.Height = nTaille
	oPolice = oFen.getFont(oFD)
	nRet = oPolice.getStringWidth(sTexte)
	while nRet > nLarg
		nTaille = nTaille - 0.1
		oFD.Height = nTaille
		oPolice = oFen.getFont(oFD)
		nRet = oPolice.getStringWidth(sTexte)	
	wend	   	
	msgbox "Taille idéale : " & nTaille

End Sub
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

Ceci marche si je souhaite mettre le texte sur une ligne, dans le cas, il suffit de bien formater la cellule comme la case A8 en activant dans l'onglet "Alignement" la case "Ajuster à la taille de la cellule" et pas besoin de macro. Le problème, c'est que cette option n'est pas applicable dès qu'on active "renvoi à la ligne automatique".
Le problème, c'est que dans la case A1, le renvoi à la ligne est activé pour que le texte soit lisible. Le but serait de trouver la taille de 8.6 si on avance de dixième en dixième.

Je cherchais plus une information disant que le texte déborde de la case, que la flèche rouge qu'on peut voir ci-dessous est visible :
fleche_rouge.png
nb : ici, la taille de police est de 8,7.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

Et bien tu reprends le code fourni et tu l'adaptes.
Si la largeur du texte est supérieure à celle de la cellule, forcément elle débordera.
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

Comment savoir le nombre de lignes qui sera utilisé ? Le nombre maximum de ligne possible en fonction de la taille de caractère ? Et après, il faut trouver où la coupure des mots se fait en fin de ligne. Parce que toutes les lignes n'ont pas toutes la même longueur.
Si le système arrive à afficher la flèche rouge, c'est qu'il sait que la case déborde. Et si il sait que ça déborde, on pourrait lui demander...
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

troumad a écrit :Comment savoir le nombre de lignes qui sera utilisé ?
Comme tu le dis plus haut, tu ne peux pas cumuler "Renvoi à la ligne" et "Ajuster à la taille de cellule".
C'est soit l'un ou l'autre.
troumad a écrit :Si le système arrive à afficher la flèche rouge, c'est qu'il sait que la case déborde. Et si il sait que ça déborde, on pourrait lui demander...
Il n'existe pas d'API pour ça.
Si c'est un besoin vital pour toi, tu ouvres une demande d'amélioration et tu balises [Issue] en mettant ici le n° du rapport.
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

C'est bien parce que ce n'était pas disponible directement, que j'ai regardé au niveau des macros. Là non plus, ça ne marche pas.
C'était juste un plus que j'aurais aimé pouvoir rajouter. Dommage. Le point suivant aurait été d'ajuster la taille des 5 lignes du tableau.
Je vais voir ce qu'on me répond quand je parle de demander l'api pour pour avoir cette information. Si je fais une demande j'en parle ici.

Merci
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

troumad a écrit :Là non plus, ça ne marche pas.
Ca marche mais il faut faire un algorithme de découpage qui analyse la longueur pour arriver au résultat voulu.
Je t'ai donné le code pour renvoyer la taille en pixel d'une chaîne, à toi de l'adapter.
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

On vient de me donner une astuce :
1) Je mets la taille des lignes en mode "Hauteur optimale" et je regarde la hauteur de la ligne (ou de l'ensemble de lignes)
2) J'ajuste la police de caractère pour que la hauteur soit correcte.

Comme ça, je fais du 2 en 1 : après je comptais ajuster la taille des 5 lignes pour que la taille des polices soient équivalentes dans les 5 lignes.
Je finis la mise au point de mon code et je peux le passer si ça intéresse.
Dude a écrit :Je t'ai donné le code pour renvoyer la taille en pixel d'une chaîne, à toi de l'adapter.
Question bête : c'est quoi la taille d'un pixel ?
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

troumad a écrit : Question bête : c'est quoi la taille d'un pixel ?
Est-ce que tu as étudié au moins le code que je t'ai donné ?

Code : Tout sélectionner

   nPix =   oFrame.componentwindow.info.pixelPerMeterx /100 'mm > pixel
:evil:
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

J'ai comme un problème...

Pour avoir une hauteur de 15 cm, je dois faire :

Code : Tout sélectionner

        taille_max=4*doc.currentController.getFrame().componentwindow.info.pixelPerMeterx
  	taille_c=10.1
	if delta=0 then
		do
			taille_c=taille_c-0.1
			REM commande pour passer la taille à taille_c des cases B23 à Z27 : encore en test, mais semble marcher dans l'état, il y a des amélioration à porter
			taille_caract(1,23,24,4,taille_c)
			REM récupération de la différence de position des lignes 22 à 27 (donc des numéro 23 à 28 => place des lignes numéro 23 à 27)
			taille=f_page.getCellByPosition(colonne,27).Position.Y-f_page.getCellByPosition(colonne,22).Position.Y
		loop while taille>taille_max and taille_c>5
D'après le nom, je pensais plutôt faire :

Code : Tout sélectionner

taille_max=15*doc.currentController.getFrame().componentwindow.info.pixelPerMeterx/100
Et ton commentaire est surprenant : /100 pour passer des m au mm ?

Soit mon code est bancal, soit, il y a quelque chose que je ne comprends pas!

édit :
1) je persiste sur la taille... Pour 8 cm, j'ai fait :

Code : Tout sélectionner

taille_max=4*thisComponent.currentController.getFrame().componentwindow.info.pixelPerMeterx*8/15
2) J'améliore
- au départ la hauteur des lignes est fixée => je la rends optimal par macro
- je modifie la taille des caractères tant que la ligne est trop haute
- par macro je force la ligne à la bonne taille : taille fixée. Ceci oblige de garder la bonne taille même s'il n'y a pas assez de texte ou si j'empêche de descendre à une police trop petite.
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par Dude »

Bis repetitae :
Dude a écrit :Encore une fois, il faut fournir un exemple simplifié, exploitable et limité à la seule problématique.
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

Dès que j'ai fini le code... Il marche, mais pas complètement testé...
Pour le moment, j'ai du TAF. J'ai juste donné l'idée.

Et après avoir testé mon programme, il va falloir que j'extrais le code intéressant pour ces remarques.

Une remarque depuis mon édition : il ne faut pas que les cellules soient fusionnées dans le sens de la hauteur car la hauteur automatique ne marche plus.
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)
Avatar de l’utilisateur
troumad
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 15 août 2019 12:52
Localisation : Genas (F-69)

Re: [Calc] Le texte loge-t-il dans la cellule ?

Message par troumad »

Voici le fichier avec tout ce qui est inutile de retirer. Il faut commencer à lancer à la main la macro ouverture et tout devient automatique.
taille_de_texte.ods
Si le script vous intéresse, utilisez le ! Si vous l'améliorez ou même si vous le corrigez, prévenez-moi !
J'ai extrait le code qui intéresse, mais sans chercher à optimiser.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice sous Mageia Linux Cauldron des dépôts de Mageia Cauldron (derrière version, voire version de test)
LibreOffice sous Mageia Linux Stable pour tests
Au travail : LibreOffice sous Windows (version qui peut varier d'un ordinateur à l'autre)