Rechercher : dans
Par :

Macro et openoffice

Dernière réponse le 31 mar 2008 à 17:28:21 olivier3006, le 15 sep 2005 à 20:02:11 
 Signaler ce message aux modérateurs

Bonjour,
Je veux ecrire une macro sous openoffice qui me créerai plusieurs nouvelles feuilles avec des noms différents mais je ne vois pas vraiment comment faire. Quelqu'un peut-il m'aider.

Merci

Meilleures réponses pour « macro et openoffice » dans :
Utiliser un dictionnaire sous OpenOffice VoirActivation de la correction orthographique - OpenOffice.org Par défaut, la correction orthographique de OpenOffice.org ne fonctionne pas car aucun dictionnaire n'est présent. L'installation dépendra de la connexion à Internet. il faut avant...
Compter les mots dans un document (OpenOffice.org ou Word) VoirIl est parfois utile de pouvoir compter le nombre de mots ou de caractères dans un document. Les deux principales suites bureautiques permettent de le faire très simplement : Avec Word Avec OpenOffice.org Avec Word Ouvrez votre document...
[OpenOffice] Une belle suite bureautique gratuite VoirOpenOffice.org Microsoft Office (payant) peut aisément être remplacé par OpenOffice.org (OOo) qui : est gratuit (légalement), est francisé (D'autres langues sont disponibles gratuitement.), sait gérer les...
Télécharger MOREFUNC (Macro complémentaire EXCEL) VoirMorefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont compatibles avec Excel 95 à 2007. Elles ne sont pas portables sur d'autres plate-formes que Windows, ni sur d'autres...
Télécharger Super Macro VoirSuper Macro est un logiciel gratuit qui permet de créer des macros sous Windows afin de déclencher diverses actions automatiques. En plus d’être gratuit, ce logiciel est facile à utiliser et ne requiert aucune connaissance en programmation. On doit...
Exécuter une macro VoirExécuter une macro Excel et Calc proposent plusieurs façons d’exécuter une macro : en la sélectionnant dans une liste, dans la boîte de dialogue Macro ; par un raccourci clavier ; en l’attachant à un bouton de la barre d’outils ; ...

1

Gihef, le 16 sep 2005 à 00:52:45

Bonjour,
Des feuilles de classeur ?
Clic droit sur un onglet de feuille de calcul—Insérer une feuille…—Indiquer le nombre.
Sinon, des noms comment ?

Répondre à Gihef

16

 jeje, le 31 mar 2008 à 17:28:21

Bonjour comment on fait pour faire des fichier sur imacro

Répondre à jeje

2

lami20j, le 16 sep 2005 à 01:29:15

Salut,
à adapter selon les besoins.

Sub AddSheet()
   Dim myDoc as Object, mySheets as Object
   Dim name1 as String, name2 as string

   myDoc = thisComponent
   mySheets = myDoc.Sheets
   
  ' le nom de la feuille après laquelle on crée la nouvelle
   name1 = InputBox("Insérer une feuille après : ")
   name2 = InputBox("La feuille crée aura pour nom : ")

   mySheets.insertNewByName(name2, getIndexByName(mySheets,name1) +1)
End Sub

Répondre à lami20j

3

olivier3006, le 16 sep 2005 à 18:06:07

Merci pour cette macro mais elle ne fonctionne pas. Je recois le message suivant:

Runtime error BASIC
La sous-procédure ou procédure fonctionnelle n'est pas définie

Que dois-je faire pour corriger cette erreur.

Merci

Répondre à olivier3006

4

lami20j, le 16 sep 2005 à 19:03:07

Re,

La sous-procédure ou procédure fonctionnelle n'est pas définie

C'est ma faute.
getIndexByName c'est une fonction dont je ne t'ai pas donné le code.

Maintenant tu as plusieurs posibilités :

1. tu ajoute la nouvelle feuille à la fin

Sub AddSheet()
   Dim myDoc as Object, mySheets as Object
   Dim name as String

   myDoc = thisComponent
   mySheets = myDoc.Sheets
   
   name = InputBox("La feuille crée aura pour nom : ")
   mySheets.insertNewByName(name2, -1)
End Sub


2. Ajouter la feuille par rapport à une autre feuille
Sub AddSheet()
 Dim myDoc as Object, mySheets as Object
 Dim name1 as String, name2 as string

 myDoc = thisComponent
 mySheets = myDoc.Sheets
   'le nom de la feuille après laquelle on crée la nouvelle
 name1 = InputBox("Insérer une feuille après : ")
 name2 = InputBox("La feuille crée aura pour nom : ")

 mySheets.insertNewByName(name2, _
                                     getIndexByName(mySheets, name1) +1)
End Sub

'en cas de succes la fonction renvoie l'index correspondant
'en cas d'échec elle affiche un message d'erreur
'et renvoie un index hors-limite (la feuille est ajouter à la fin)

Function getIndexByName(collection As Object, _
                            theName As String) As Long
Dim i As Long
for i = 0 to collection.Count -1
 if collection(i).Name = theName then
   getIndexByName = i ' renvoyer l'index correspondant au nom
   Exit Function
 end if
next
MsgBox("Feuille inexistante : " & theName & ". La nouvelle feuille a été ajoutée à la fin.", 16, "Collection")
getIndexByName = -100 ' la feuille est ajoutée à la fin si theName inexistant
End Function 



lami20j

Répondre à lami20j

5

Kobaya, le 16 sep 2005 à 20:26:38

Salut à Lamij et olivier3006,

lamij,

ta macro fonctionne certainement sous Microsoft Office Excel, mais olivier3006 s'interesse à openoffice ;-)

J'ai oOo, mais je n'ai pas encore eu le temps d'approfondir son basic. Voici ce que j'ai obtenu avec l'enregistreur de macro, pour ajouter une feuille dans un classeur existant :

sub Main
	rem ------------------------------------------------------------­----------
	rem define variables
	dim document   as object
	dim dispatcher as object
	rem ------------------------------------------------------------­----------
	rem get access to the document
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	rem ----------------------------------------------------------------------
	dim args1(1) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "Name"
	args1(0).Value = "Feuille4"
	args1(1).Name = "Index"
	args1(1).Value = 2
	
	dispatcher.executeDispatch(document, ".uno:Insert", "", 0, args1())
end sub


A+,
Kobaya.

Répondre à Kobaya

6

lami20j, le 16 sep 2005 à 20:37:55

Salut,

ta macro fonctionne certainement sous Microsoft Office Excel, mais olivier3006 s'interesse à openoffice ;-)


Je suppose que tu l'as tester sur Excel. Je parle de mon code. Et tu l'as testé aussi sous OpenOffice.

je crois que cette ligne devra te dire qu'on est dans OOoBasic

myDoc = thisComponent


Malheureusement, ta remarque m'a bien fait rigoler.
Je n'envoie jamais un code sans l'avoir tester avant. La seul faute que j'ai fait c'est que j'ai oublié la fonction
 getIndexByName
.

Et ça marche.

Répondre à lami20j

7

Kobaya, le 17 sep 2005 à 19:52:32

Salut lamij,

autant pour moi :-(
comme je l'ai dit, je n'ai pas eu le temps de tester oOo Basic en profondeur. Et le peu que j'en avais vu, le code oOo Basic ne m'avait pas semblé ressembler autant au Visual Basic.

sans rancune j'espère ? :-)

A+,
Kobaya.

Répondre à Kobaya

8

lami20j, le 17 sep 2005 à 21:11:29

Salut Kobaya,

ne t'inquiète pas, je ne suis pas rancunier.

Je crois que tu sais déjà que l'enregistrement des macros sous Excel est très bavard.

Ex.
Voilà ce que Excel écrit si on veut la feuille en paysage

Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 17/09/2005 par lami
'

'
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.787401575)
        .RightMargin = Application.InchesToPoints(0.787401575)
        .TopMargin = Application.InchesToPoints(0.984251969)
        .BottomMargin = Application.InchesToPoints(0.984251969)
        .HeaderMargin = Application.InchesToPoints(0.4921259845)
        .FooterMargin = Application.InchesToPoints(0.4921259845)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 96
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
    End With
End Sub


En fait on n'a besoin que de

Sub Macro2()
 ActiveSheet.PageSetup.Orientation = xlLandscape
End Sub


C'est pareil avec OpenOffice, lui aussi il est bavard.

Ex :
-pour écrire dans une cellule les 2 macros font la même chose

1. macro enregistée
sub test
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "StringName"
args1(0).Value = "Azerty"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())


end sub

2. macro écrit
sub test2 ()

ThisComponent.Sheets.getByName("Feuille1").getCellByPosition(0,0).string="Azerty"

end sub


A+

lami20j

Répondre à lami20j

9

Kobaya, le 18 sep 2005 à 10:42:12

Effectivement, côté bavardage, oOo n'est pas mal, peut-être même pire que VBA!

Merci du tuyau lamij :-)

A+,
Kobaya.

Répondre à Kobaya

10

allamezon, le 21 oct 2007 à 11:33:27

Bonjour,

Je voulais demander à lami20j s'il connaissait un bon moyen d'avoir le code du basic que oOo utilise ?

J'ai fait un outil sous Excel et voudrait le mettre sous openoffice mais j'avoue que ce n'est pas aussi facile de le dire que de le faire....

Merci d'avance,

Sébastien

Répondre à allamezon

11

lami20j, le 21 oct 2007 à 13:58:16

Salut,

un bon moyen d'avoir le code du basic que oOo utilise

je te recommande ce livre Programmation OpenOffice.org 2

en revanche si tu n'as besoin que pour ton application seulement tu peux m'envoyer le code de ton appli (voir le fichier excel entier) pour faire la conversion

tu peux aussi chercher sur google

à toi de voir
lami20j

Répondre à lami20j

12

allamezon, le 21 oct 2007 à 21:02:51

Salut et merci à toi pour la réponse !

Je vais voir pour ton bouquin, j'aimerais tellement basculer complètement sous openoffice et diffuser autour de moi pour faire en sorte que l'informatique soit pour tous et abordable !

En fait, j'aimerai te l'envouer tout en essayant de m'y mettre moi-même. Tu verras qu'il n'y a rien de compliqué. Tu peux même me donner quelques billes pour que je le fasse seul mais j'ai quelques soucis à démarrer, question de code.
Il me manque juste ton adresse électronique ?!

A bientôt !

Sébastien

Répondre à allamezon

13

lami20j, le 22 oct 2007 à 08:03:29

Salut,

Il me manque juste ton adresse électronique ?!
ou la tienne ;-))
tu peux mettre ton fichier sur http://cjoint.com
lami20j

Répondre à lami20j

14

allamezon, le 22 oct 2007 à 08:20:21

Bonjour,
fauvel.sebastien@wanadoo.fr

Répondre à allamezon

15

billouane, le 31 mar 2008 à 16:18:46

Hello tt le monde,

Je vois qu'il y en a qui maîtrise un max les macros sur Oo... n'étant pas aussi doué, je viens quérir un peu d'aide :-)

Voila, j'ai fais une macro trés simple sur Excel dont voici le but:
Si, dans la première feuille, on inscrit une valeur dans une cellule de la première colonne (exemple : 3:1), la macro va chercher dans la seconde feuille les renseignements (à savoir des références) associées à cette valeur et les copie dans les deux cellules suivantes ( 3:2 et 3:3).

Sub Copie_conditionnelle()
Dim i As Integer
Dim j As Integer
For i = 3 To 13
For j = 3 To 13
If Worksheets(2).Cells(j, 1) = Worksheets(1).Cells(i, 1) Then
Worksheets(1).Cells(i, 2) = Worksheets(2).Cells(j, 2)
Worksheets(1).Cells(i, 3) = Worksheets(2).Cells(j, 3)
End If
Next
Next
End Sub

Si quelqu'un pouvait me donner un coup de pouce pour la traduire en Open office 2.2 ce serait impecc!!!
Merci

Répondre à billouane
Collection CommentÇaMarche.net