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