LibreOffice et Apache OpenOffice/Calc/Macros
|
|
|
Menu
modifierIl est possible d'enregistrer des actions manuelles, et de les reproduire plusieurs fois en lançant une macro. Pour ce faire aller dans Outils\Macros\Enregistrer une macro.
Pour l'exécuter ou l'éditer, l'option est juste à côté.
Les macros peuvent être stockées dans le logiciel, ou dans le document, et pourront être copiées dans d'autres, et même converties en Visual Basic pour Microsoft Excel[1]. Globalement la syntaxe est assez similaire (ex : _ permet de revenir à la ligne sans couper la commande).
Syntaxe
modifierPour sélectionner des cellules, il y a trois solutions :
- getcellrangebyname(« A1 »)
- getCellByPosition(l,c)
- getCellRangeByPosition(left,top,right,bottom)
Pour créer un document texte :
oDoc = StarDesktop.loadComponentFromURL( "private:factory/scalc", "_blank", 0, Array() )
Pour ouvrir un document ou un répertoire :
sub Ouvrir
xShell = createUnoService("com.sun.star.system.SystemShellExecute")
xShell.execute("c:\Users\Admin\Desktop\", "", 0)
End Sub
Le fichier s'ouvrira ensuite avec le programme par défaut défini par le système d'exploitation. Par exemple :
xShell.execute("c:\Users\Admin\Desktop\Importations.xls", "", 0)
est susceptible de s'ouvrir sous Excel même si Calc est déjà ouvert.
Une solution pour manipuler malgré tout un tableau .xls est de passer par StarDesktop, qui lancera le fichier désiré via Calc quels que soient les paramètres de l'OS sur lequel on exécute la macro :
Sub RécupérerTableau
Dim Fichier As String
Dim Array() As Variant
Dim classeur, feuilles, feuille1 As Object
Fichier = "c:\Users\Admin\Desktop\Importations.xls"
Fichier = ConvertToURL(Fichier)
classeur = StarDesktop.LoadComponentFromURL(Fichier , "_blank", 0, Array())
feuilles = Classeur.Sheets
feuille1 = feuilles.getByName("Feuille1")
msgbox (feuille1.getCellByPosition(1,1).string)
classeur.close(true)
End Sub
Exemples
modifierSupprimer les doublons entre deux colonnes
modifier
Sub SuppressionDoublon()
'Supprime les lignes doublons dans l'une ou l'autre de deux colonnes
dim classeur as object
dim feuilles as object
dim feuille as object
dim cellule as object
dim champ As string
dim i,j as integer
classeur = thisComponent ' le classeur
feuilles = classeur.Sheets ' la collection des feuilles
feuille = feuilles.getByName("Feuille1") ' la feuille
for i = 1 to 10
for j = 1 to 10
if i = j then
else
If feuille.getcellrangebyname("A" & i).string = feuille.getcellrangebyname("B" & j).string then
If feuille.getcellrangebyname("B" & i).string = feuille.getcellrangebyname("A" & j).string then
feuille.getcellrangebyname("A" & j).string = ""
feuille.getcellrangebyname("B" & j).string = ""
end if
end if
end if
next j
next i
End Sub
Transcrire des lignes en colonnes
modifierPar exemple pour transcrire des lignes en colonnes, on peut reproduire un collage spécial en cochant la case "Transposer" :
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Toutefois, on peut aussi utiliser une macro contenant la fonction "getCellByPosition" : cela permet d'ajouter un traitement automatique pendant la transposition :
Sub transcription()
'Transcrit des lignes en colonnes, et y ajoute 000 en suffixe
dim classeur as object
dim feuilles as object
dim feuille as object
dim cellule as object
dim champ As string
dim i as integer
classeur = thisComponent ' le classeur
feuilles = classeur.Sheets ' la collection des feuilles
feuille1 = feuilles.getByName("Feuille1") 'la feuille initiale
feuille2 = feuilles.getByName("Feuille2") 'La feuille finale
for i = 1 to 10
feuille2.getCellByPosition(i,2).String = feuille1.getCellByPosition(1,i).String + 000
next i
End Sub