[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.

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

Messagepar ThierryM » 08 Oct 2017 09:43

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   AgrandirRéduire
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
Capture 1
Classe_modèle_recto_verso.ods - LibreOffice Calc_486.png
Capture 2
Pièces jointes
Classe_modèle_recto_verso.ods
Fichier exemple utilisant la macro décrite ci-dessus.
(21.64 Kio) Téléchargé 55 fois
LibreOffice Version: 6.0.6.2 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi LibreOffice à l'école ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 368
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

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

Messagepar DeGlinGo117 » 26 Août 2018 21:00

Génial, Merci beaucoup !

Ainsi que pour les commentaires qui aident à s'y retrouver :)
OpenOffice 3.3.0 sous Windows 10
DeGlinGo117
Fraîchement OOthentifié
 
Message(s) : 1
Inscrit le : 07 Nov 2017 14:23


Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)