IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Transformer une macro VBA pour l'utiliser avec LibreOffice [OpenOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Candidat au Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2016
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Transformer une macro VBA pour l'utiliser avec LibreOffice
    Bonjour à tous et toutes,

    J'espère être au bon endroit pour poser ma question.

    J'ai récupéré une macro sur internet pour Excel, qui fait exactement ce que je souhaite faire.
    Néanmoins, je souhaite créer ma société et n'utiliser ni OS, ni logiciel Microsoft vu le prix des licences.
    J'ai donc besoin d'adapter/convertir le code (VBA) en code Basic (si je ne me trompe pas) pour que ma macro soit utilisée sur Calc de LibreOffice, ET créer un nouveau fichier au format .ODS, et non plus .XLSX.

    Cette macro permet:
    1) Incrémenter la cellule B12 de +1 à l'ouverture du fichier (.xlsm).
    2) Créer un nouveau fichier dont le nom est FactureX.xlsx ou X est la valeur de la cellule B12 incrémentée).
    3) Il n'y a pas de demande d'enregistrement des modification à la fermeture de ce fichier (.xlsm).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Option Explicit
    Private Sub Workbook_Open()
        Range("E12") = Range("E12") + 1
        ActiveWorkbook.Save
    End Sub
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Chemin As String, Numéro_facture As Integer
     
    Chemin = ActiveWorkbook.Path
    Numéro_facture = Range("E12")
    Application.DisplayAlerts = False
     
        ActiveWorkbook.SaveAs Filename:= _
            Chemin & "\Facture " & Numéro_facture & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
     
    End Sub
    J'espère que vous pourrez me venir en aide car je n'ai aucune connaissance en langage de programmation.
    Mil merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    dans Libreoffice il n' y a pas de Open et de BeforeClose. Il faut passer par l'affectation des événements d'ouverture et de fermeture de document à une macro :
    dans le menu outils/personnaliser onglet Evénements , choisir :
    1 - Ouvrir le document puis cliquer sur le bouton Macro (Assigner) et choisir sa macro d'ouverture de document
    2 - Le document va être fermé puis cliquer sur le bouton Macro (Assigner) et choisir sa macro de fermeture de document

    Les fonctions appelées pourraient ressembler à un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub MacroOuverture()
    Dim oDoc As Object , Feuille As Object 
    Dim Cellule As Object 
     
    oDoc = ThisComponent
    Feuille = oDoc.getSheets.getByName("Feuille1")  
    '------- 
    'Identification par l'adresse de la cellule (E12) 
    Cellule = Feuille.getCellRangeByName("E12")
    'incrémentation par 1 de la valeur de la cellule 
    Cellule.Value = Cellule.Value +1
    'écriture du classeur en cours
    ThisComponent.Store()
    End Sub
     
    Sub MacroFermeture()
    Dim Chemin As String, Numero_facture As Integer
    Dim oDoc As Object , Feuille As Object 
    Dim Cellule As Object 
    Dim Fichier As String 
    Dim Args(0) As New com.sun.star.beans.PropertyValue 
    REM Load the included "Tools" library
     GlobalScope.BasicLibraries.LoadLibrary("Tools")
    oDoc = ThisComponent
    Feuille = oDoc.getSheets.getByName("Feuille1")  
    Cellule = Feuille.getCellRangeByName("E12")
    Numero_facture = Cellule.Value
    chemin = DirectoryNameoutofPath( ThisComponent.getURL() , "/" )   
    Fichier = ConvertToURL(chemin & "/facture" & Numero_Facture & ".ods") 
    ThisComponent.storeAsURL(Fichier, Args())
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Candidat au Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2016
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous et à toutes, et merci jurassic pork pour ta réponse.

    J'ai omis d'indiquer que mon fichier de départ est un .ods (j'ai enregistré sous ce format, mon fichier d'origine .xslx avec Calc).
    Je vais faire le test et reviens vers vous pour vous dire ce qu'il en est dès que possible.

    Encore mil fois merci
    Harsss

  4. #4
    Candidat au Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2016
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je viens de faire les essais, et il ne se passe rien:
    - Pas d'incrémentation de la cellule
    - Pas de création de fichier à la fermeture du fichier contenant la macro.

    J'ai rajouté au code proposé le "End Sub" à la fin du code (il me semble que c'est obligatoire

    Si j'exécute la macro d'ouverture ou de fermeture, telle qu'elle est écrit plus haut (Outils - Macros - Exécutez la Macro), j'ai une erreur :
    Erreur de syntaxe BASIC.
    Symbole inattendu : *.

    Si je clic sur OK, cette erreur reste affiché sur 4 clic consécutifs (sur Ok), et le message d'erreur s'efface après.

    J'ai remplacé Feuille1 par Feuil1, car c'est le nom de ma feuille, mais cela ne change rien.

    Une idée ?

  5. #5
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    effectivement j'avais oublié dans le code publié le end sub de la deuxième macro.
    C'est bizarre moi je n'ai pas d'erreur. As-tu une valeur numérique en E12 ( 1 au départ) ? .Quelle version de Libreoffice utilises-tu ? Peux-tu remettre le code de tes deux macros ou même mieux ton fichier si il n'est pas confidentiel ?
    Tu parlais de B12 mais dans ton code tu utilises E12 est-ce normal ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  6. #6
    Candidat au Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2016
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton aide.
    Ma version de LibreOffice est 5.0.3.2
    Pour la cellule, j'ai modifier mon fichier et au final, c'est la cellule F18 que j'utilise mais cela ne change rien du fait que j'ai apporté les modification au code.

    Ma cellule de départ est à 0 puisque la cellule étant incrémenté au 1er lancement du fichier, il faut que ma 1ère facture ai le numéro 1.
    Ci-joint mon fichier.Facture.ods

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub MacroOuverture()
    Dim oDoc As Object , Feuille As Object 
    Dim Cellule As Object 
     
    oDoc = ThisComponent
    Feuille = oDoc.getSheets.getByName("Feuil1")  
    '------- 
    'Identification par l'adresse de la cellule (F18) 
    Cellule = Feuille.getCellRangeByName("F18")
    'incrémentation par 1 de la valeur de la cellule 
    Cellule.Value = Cellule.Value +1
    'écriture du classeur en cours
    ThisComponent.Store()
    End Sub
     
    Sub MacroFermeture()
    Dim Chemin As String, Numero_facture As Integer
    Dim oDoc As Object , Feuille As Object 
    Dim Cellule As Object 
    Dim Fichier As String 
    Dim Args(0) As New com.sun.star.beans.PropertyValue 
    REM Load the included "Tools" library
     GlobalScope.BasicLibraries.LoadLibrary("Tools")
    oDoc = ThisComponent
    Feuille = oDoc.getSheets.getByName("Feuil1")  
    Cellule = Feuille.getCellRangeByName("F18")
    Numero_facture = Cellule.Value
    chemin = DirectoryNameoutofPath( ThisComponent.getURL() , "/" )   
    Fichier = ConvertToURL(chemin & "/Facture" & Numero_Facture & ".ods") 
    ThisComponent.storeAsURL(Fichier, Args())
    End Sub

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    les macros ne se trouvent pas dans un module basic de ton fichier est-ce normal ? Il faut que les macros soient dans le fichier et pas en macros personnelles pour que cela fonctionne
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Candidat au Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2016
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Facture_2.ods
    Je viens de la déplacer sur mon fichier mais cela ne change rien.

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Peux-tu essayer le fichier en pièce jointe ?
    Fichiers attachés Fichiers attachés
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Candidat au Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2016
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    SUPERRRRRRRRRR !!!
    Ca marche nickel !
    Mil millions de MERCIIIIIIIII

  11. #11
    Candidat au Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2016
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    OUPS...
    Si j'ouvre le fichier créé à la fermeture du fichier original, la macro est toujours fonctionnelle, c'est à dire qu'elle incrément de 1 la cellule concerné, mais il ne faut pas qu'elle le fasse car la facture créée ne doit pas être modifier.
    Y a t-il possibilité de modifier le code pour non pas créer un .ods, mais un .pdf à la fermeture?
    J'ai modifié en mettant pdf à la place d'ods, mais cela ne fonctionne pas, le fichier obtenu ne peut-être ouvert.

  12. #12
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    pour écrire en pdf c'est plus compliqué que de changer uniquement l'extension du fichier :
    il faut utiliser un paramètre (FilterName) qui dit en quel type de fichier on sauvegarde et il faut utiliser la fonction StoreToUrl

    Voici ce que cela donne pour la macro de fermeture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub MacroFermeture()
    Dim Chemin As String, Numero_facture As Integer
    Dim oDoc As Object , Feuille As Object 
    Dim Cellule As Object 
    Dim Fichier As String 
    Dim Args(1) As New com.sun.star.beans.PropertyValue 
    REM Load the included "Tools" library
     GlobalScope.BasicLibraries.LoadLibrary("Tools")
    oDoc = ThisComponent
    Feuille = oDoc.getSheets.getByName("Feuil1")  
    Cellule = Feuille.getCellRangeByName("F18")
    Numero_facture = Cellule.Value
     
    Args(0).Name = "FilterName"
    Args(0).Value = "calc_pdf_Export"
     
    chemin = DirectoryNameoutofPath( ThisComponent.getURL() , "/" )   
    Fichier = ConvertToURL(chemin & "/Facture" & Numero_Facture & ".pdf") 
    ThisComponent.storeToURL(Fichier, Args())
    End Sub
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Candidat au Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2016
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    C'est carrément génial.
    Et ben encore mil millions de merci, je vais pouvoir créer ma boite avec ça de moins à faire.
    J'espère que cette aide, et j'en doute pas , pourra en aider d'autre dans le même cas que moi.

    C'est très sympa à toi de m'avoir aidé.
    Salutations

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème lors de la 1ère utilisation d'une macro VBA pour copie de feuille
    Par youp_youp_ dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/06/2014, 10h54
  2. Transformer une macro VBA en .exe ?
    Par BBe8127 dans le forum Général VBA
    Réponses: 4
    Dernier message: 05/03/2009, 11h36
  3. Réponses: 2
    Dernier message: 24/09/2007, 12h47
  4. Réponses: 2
    Dernier message: 24/04/2007, 13h52
  5. [JSTL] Récupérer une variable JSTL pour l'utiliser avec JSP
    Par pitit777 dans le forum Taglibs
    Réponses: 3
    Dernier message: 28/03/2006, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo