valeur d'une cellule dans l'en-tête (ou pied de page)

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Monsieur Raoul
Fraîchement OOthentifié
Messages : 5
Inscription : 02 oct. 2006 09:17

valeur d'une cellule dans l'en-tête (ou pied de page)

Message par Monsieur Raoul »

Bonjour,
Je cherche une manière simple (je viens de lotus 123!) d'incorporer la valeur d'une cellule dans l'en-tête.
(j'ai rien trouvé dans la très bonne aide d'Open Office, mais je suis loin d'être bon pour les recherches dans les aides)
Merci...
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour

Je n'ai pas trouvé non plus... et je crains que cela ne soit pas prévu...

Il faut donc se débrouiller avec les zones d'impression et le format de page.

Seul truc tellement mauvais que j'hésite même à le signaler : renommer la feuille ou le classeur du nom figurant dans la cellule qu'on voudrait mettre dans l'en-tête. Il devient alors possible d'insérer cela (encore faut-il que ce contenu soit un nom autorisé pour un classeur ou une feuille).

J'espère que d'autres seront plus inspirés...
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

bonsoir,
Il n'y aurait pas une macro qui permettrait une concanétation ?
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Ci-dessus un exemple simplifié par macro. Par simplifié, j'entends :

- Que le code ci-dessous ne traite que le style de page Standard
- Qu'il ne gère que l'en-tête (adaptation facile pour le pied)
- Qu'il suppose qu'on utilise le même contenu à gauche et à droite
- Que le texte à récupérer se trouve dans une cellule (et non une plage)
- Que seul le texte récupéré constitura la zone (gauche, centre, droite) de l'en-tête. Si on veut plusieurs données, il faut les concaténer dans la cellule en question

L'utilisation est je pense assez simple :
- Nommer CelluleTitre la plage à récupérer en en-tête (ou autre nom si on change la constante en début de code)
- Editer l'en-tête (Format Page ou modification du style Standard) et mettre dans la zone gauche et/ou, centre, et/ou droite le même texte CelluleTitre.

Après exécution de la procédure, le texte aura été remplacé par le contenu de la cellule.

Code : Tout sélectionner

option explicit

sub PysMajEntete
const PysNomPlage = "CelluleTitre"				'Nom à donner à la cellule dont on veut récupérer le texte en en-tête
dim PysClass as object, PysEntete as object
dim PysCol as integer, PysRow as integer, PysFeuille as integer, PysText as string

PysClass = thisComponent											'Accès au classeur courant

if PysClass.NamedRanges.hasByName(PysNomPlage) then				'S'il contient un nom de plage "CelluleTitre" 
	with PysClass.NamedRanges.getByName(PysNomPlage).ReferencePosition		'Récupére les références de cette plage (feuille, ligne, colonne)
		PysFeuille = .sheet
		PysCol = .column
		PysRow = .row
	end with
	PysText = PysClass.sheets(PysFeuille).getCellByPosition(PysCol, PysRow).string		'Récupère le texte de cette plage nommée
	PysEntete = PysClass.StyleFamilies.getByName("PageStyles").getByName("Default").RightPageHeaderContent	'Accès à l'entête de droite du style de page standard
	if PysEntete.LeftText.String = PysNomPlage then						'Si la zone de gauche contient le texte "CelluleTitre" (sans guillemets)
		PysEntete.LeftText.String = PysText 								'Remplace ce texte par le contenu de la cellule
	end if
	if PysEntete.CenterText.String = PysNomPlage then					'Ibid. pour la zone milieu
		PysEntete.CenterText.String = PysText 
	end if
	if PysEntete.RightText.String = PysNomPlage then						'Ibid. pour la zone de droite
		PysEntete.RightText.String = PysText 
	end if
	PysClass.StyleFamilies.getByName("PageStyles").getByName("Default").RightPageHeaderContent = PysEntete		'Met à jour l'en-tête
else
	msgbox "Le classeur ne comprend pas le nom de plage " & PysNomPlage 
end if
end sub
Monsieur Raoul
Fraîchement OOthentifié
Messages : 5
Inscription : 02 oct. 2006 09:17

Message par Monsieur Raoul »

Merci, je vais esayé ce we...