OpenOffice.org/Calc/Macros
|
|
|
||||||||||||
Sections |
[modifier] Menu
Il 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).
[modifier] Syntaxe
Pour 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éfinit par le système d'exploitation. Par exemple :
xShell.execute("c:\Users\Admin\Desktop\Importations.xls", "", 0)
est susceptible se 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
[modifier] Exemples
[modifier] Supprimer les doublons entre deux colonnes
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("Ma feuille") ' 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
[modifier] Transcrire des lignes en colonnes
Par 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("Ma feuille") 'la feuille initiale feuille2 = feuilles.getByName("Ma feuille2") 'La feuille finale for i = 1 to 10 feuille2.getCellByPosition(i,2).String = feuille1.getCellByPosition(1,i).String + 000 next i End Sub