LibreOffice et OpenOffice.org/Calc/Macros

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Tour d'horizon
Ciências sociais.png
Manuel d'utilisation
Nuvola apps kpdf recolored horizontal flip.png
Apprentissages
Nuvola apps package editors.png

Menu[modifier | modifier le wikicode]

Outils\Macros\Enregistrer une macro

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

Syntaxe[modifier | modifier le wikicode]

Pour sélectionner des cellules, il y a trois solutions :

  1. getcellrangebyname(« A1 »)
  2. getCellByPosition(l,c)
  3. 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[modifier | modifier le wikicode]

Supprimer les doublons entre deux colonnes[modifier | modifier le wikicode]

 
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[modifier | modifier le wikicode]

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("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

Références[modifier | modifier le wikicode]

  1. http://www.business-spreadsheets.com/vba2oo.asp