Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


Samuel Mounier (Liste CGO) a écrit :
Bonjour,

Je bloque sur un point assez basic... (Tout est relatif)

Par macro, je n'arrive pas à faire un Copier/Coller qui me conserve les formules et les mises en forme entre 2 classeurs différents.

J'ai tenté avec deux approches sans succès :
[...]
Finalement je me suis débloqué tout seul en recherchant des similarités
avec ce que j'ai pu trouvé sur Internet et le code de l'enregistrement
de macro.

Le code est certainement plus long que ce qu'il aurait pu être écrit proprement mais bon...

J'ai tout de même pu obtenir un résultat fonctionnel avec ceci.

' *****************************************
' Système de correction de QCM automatique
' *****************************************
' Ce code permet de copier/coller tout ce qui se trouve sur chaque feuille à partir
' du fichier contenant les solutions de la cellule F1 à la fin des données de la feuilles
' pour les recopier sur la feuille de même nom sur l'évaluation à corriger
sub Main

        dim document   as object
        dim     oeval2correct   as object
        dim dispatcher as object
        dim dispatcher2 as object
        dim oFileDialog  as object
        dim dummy()
    Dim Args(0) as new com.sun.star.beans.PropertyValue

    ' instanciation du document source sous forme d'objet
        document   = ThisComponent.CurrentController.Frame ' le document avec les solution

        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") ' Activation de Uno sur 
le 1er environnement
        
        dispatcher2 = createUnoService("com.sun.star.frame.DispatchHelper") ' Activation de Uno sur 
le 2nd environnement

        ' instanciation de l'objet boite de dialogue d'ouverture de fichier
        oFileDialog = CreateUnoService( "com.sun.star.ui.dialogs.FilePicker" )
        With oFileDialog
                .Title = "Selectionner l'évaluation à corriger"
        ' il est possible de personnalisé la boite de dialogue (son emplacement d'ouverture, les 
filtres ici)
        End With

        ' Si un fichier a été sélectionné, et que la boite de dialogue a été fermée par le bouton OK
        If oFileDialog.execute() = com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
            ' Récupération du fichier sélectionné
            sUrl = oFileDialog.Files(0)

        ' Ouverture du fichier et instanciation de l'objet permettant l'accès au fichier ouvert
        oeval2correct = StarDesktop.loadComponentFromURL( sUrl , "_blank", 0, dummy)
        
        ' Il faut aussi instancier oODS2correct. oeval2correct seul n'est pas suffisent pour la 
suite
        ' lorsqu'il sera utilisé dans UNO
        oODS2correct = oeval2correct.CurrentController.Frame

        ' Instanciation de l'objet "collection" de feuille
        OFeuillesSources = ThisComponent.Sheets()
        OFeuillesDestinations = oeval2correct.Sheets()
        
        ' Parcours des feuilles (le fichier solution est similaire à l'évaluation)
        I = 0
        do while I < OFeuillesSources.Count - 1
            ' -1 car il y a une feuille réservé pour le paramètrage enfin de classeur
            ' Cette feuille protégée génére sans cela un alerte de protection

            FeuilleSource = OFeuillesSources.getByIndex(I)
            FeuilleDestination = oeval2correct.Sheets.getByIndex(I) ' feuille no 2

            'Active la feuille du classeur solution
            args(0).Name = "Nr"
            args(0).Value = I + 1
            ' I + 1 car l'indexation s'effectue à partir de 1 et non pas 0 dans les arguments passés
            dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args())
                
            ' se place sur la cellule de départ
            args(0).Name = "ToPoint"
            args(0).Value = "$F$1"
            dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args())
                
            ' Sélectionne jusqu'à la fin
            args(0).Name = "Sel"
            args(0).Value = true
            dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args())
                
            ' Sélectionne jusqu'à la fin
            dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

            'Active la feuille du classeur à corriger (DISPATCHER2)
            args(0).Name = "Nr"
            args(0).Value = I + 1
            dispatcher2.executeDispatch(oODS2correct, ".uno:JumpToTable", "", 0, args())

            ' se place sur la cellule de destination du coller
            args(0).Name = "ToPoint"
            args(0).Value = "$F$1"
            dispatcher2.executeDispatch(oODS2correct, ".uno:GoToCell", "", 0, args())
                
            ' Colle ce qui a été copié
            dispatcher2.executeDispatch(oODS2correct, ".uno:Paste", "", 0, Array())
                
            I = I + 1
        
        loop
        oeval2correct.store

    end if

end sub

PS : Ce système de QCM va être très prochainement mis à disposition CC.
Est-ce qu'il existe sur le projet LibO un emplacement pour mettre ce genre d'outils comme pour OOo

A+

Samuel



--
Envoyez un mail à users+help@fr.libreoffice.org pour savoir comment vous désinscrire
Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être 
supprimés

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.