[Calc] Intervertir 1 ligne sur 2 ou annuler via même bouton

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 11:29
Localisation : Les Corbières

[Calc] Intervertir 1 ligne sur 2 ou annuler via même bouton

Message par ThierryM »

Bonjour à tous,
Voici une macro qui permet d'intervertir une ligne sur deux d'une liste. Ça peut être utile lorsque l'on veut par publipostage imprimer le verso de cartes d'identification afin que les noms correspondent avec le recto.
Il est possible aussi de revenir à l'état initial en appuyant sur le même bouton (qui change de couleur et d'intitulé selon l'ordre de la liste). Je m'appuie pour cela sur la propriété "tag" du bouton.
En espérant que ça serve, cordialement,
Thierry

Code : Tout sélectionner

REM  *****  BASIC  *****
Option Explicit

Sub InverserEleve_2_par_2(oEvent)
'Macro pour permettre de réaliser le verso de cartes
' pour qu'elles correspondent au recto via la fonction Publipostage dans Writer
 Dim monDocument As Object, lesFeuilles as Object, maFeuille As Object, maCellule As Object
 Dim ligne As Long, zDepart As Object, cArriv As Object
 Dim bouton as object
 Dim texteBoutonNormal As String, texteAideNormal As String
 Dim texteBoutonInverse As String, texteAideInverse As String

 monDocument=ThisComponent
 lesFeuilles=monDocument.Sheets
 maFeuille=oEvent.source.model.parent.parent.parent.CurrentController.ActiveSheet
 ligne=1 '2e ligne de la feuille
 'Insère une ligne au-dessous du premier nom si la ligne au-dessous n'est pas vide
 maCellule=maFeuille.getCellByPosition(0,ligne+1)
 If maCellule.String<>"" Then maCellule.Rows.insertByIndex(0,1)
 'Déplace la 2e ligne dans la nouvelle
 zDepart=maFeuille.Rows(ligne)
 cArriv=maFeuille.getCellByPosition(0,ligne+1)
 maFeuille.moveRange(cArriv.CellAddress, zDepart.RangeAddress)
 'Remonte les lignes 3 et impaires suivantes de 2 lignes
 ligne=3
 maCellule=maFeuille.getCellByPosition(0,ligne)
 Do While maCellule.String<>""
 	zDepart=maFeuille.Rows(ligne)
 	cArriv=maFeuille.getCellByPosition(0,ligne-2)
 	maFeuille.moveRange(cArriv.CellAddress, zDepart.RangeAddress) 
 	ligne=ligne+2
 	maCellule=maFeuille.getCellByPosition(0,ligne)
 Loop
 
 'Modifie l'intitulé du bouton ainsi que le texte d'aide
 bouton=oEvent.source.model
 texteBoutonNormal="Inverser 2 par 2"
 texteAideNormal="Intervertit 1 ligne sur 2 pour réaliser un verso de carte par publipostage."
 texteBoutonInverse="Rétablir l'ordre de départ"
 texteAideInverse="Remet les lignes selon l'ordre de départ (annule les inversions)."
 If bouton.tag="Ordre normal" Then
 	bouton.tag="Ordre inversé"
 	bouton.label=texteBoutonInverse
 	bouton.HelpText=texteAideInverse
 	bouton.BackgroundColor=13434624
 	Else
 	bouton.tag="Ordre normal"
 	bouton.label=texteBoutonNormal
 	bouton.HelpText=texteAideNormal	
  	bouton.BackgroundColor=16750848
 End If 

End Sub
Classe_modèle_recto_verso.ods - LibreOffice Calc_485.png
Classe_modèle_recto_verso.ods - LibreOffice Calc_486.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
DeGlinGo117
Fraîchement OOthentifié
Messages : 1
Inscription : 07 nov. 2017 13:23

Re: [Calc] Intervertir 1 ligne sur 2 ou annuler via même bou

Message par DeGlinGo117 »

Génial, Merci beaucoup !

Ainsi que pour les commentaires qui aident à s'y retrouver :)
OpenOffice 3.3.0 sous Windows 10