Poser votre question
0

les macros ne fonctionnent pas

posée 2019-03-30 14:32:42 +0200

Image Gravatar de Claude 1954

bonjour, j'ai un document reçu avec des macros, exemple; majuscule pour les 1 ère lettre, sur exel tout allait bien, mais avec libre office, rien ne va, j'ai pourtant clic sur exécuter les macros et suis allé dans sécurité et mis exécuter toutes les macros, rien ni fait. j'ai un fichier .XLSM et ne peut vous l'envoyer je viens de mettre le dossier en XLS , les macros se font mais libre office cesse de fonctionner? je joint le XLS que faire, merci C:\fakepath\EC Aublain 1796-1812.xls

éditer requalifier signaler fermer fusionner supprimer

1Réponse

0

répondue 2019-03-31 07:25:23 +0200

Image Gravatar de pierre-yves samyn

Bonjour

Même si LibreOffice fait ce qu'il peut pour assurer de son côté la plus grande compatibilité, les deux suites sont différentes et ceci est particulièrement vrai pour ce qui concerne la programmation.

Ainsi, si les "structures" sont en gros les mêmes (variables, tests, boucles...) le "modèle objet" est différent (en gros la façon d'accéder et d'utiliser les objets (classeur, feuille, cellule, texte, nombre...).

Mon premier conseil... est en général de ne pas utiliser de macro quand on peut l'éviter :)

Mon deuxième : si c'est vraiment nécessaire il vaut mieux utiliser le format de fichier du logiciel qu'on utilise. En effet cela évite les conversions à chaque ouverture/enregistrement et assure un fonctionnement optimal.

En conclusion, il vaut mieux réécrire le code...

J'ai regardé rapidement le code du classeur joint. Si j'ai bien compris il s'agit de mettre en majuscule certaines colonnes et de capitaliser la première lettre pour d'autres (par parenthèse le code n'est guère optimisé et ne gère pas les prénoms composés).

Outre le code redondant, il est par ailleurs gênant de figer le fonctionnement sur des colonnes fixes (tu ne peux déplacer les colonnes). Je te propose dans l'exemple joint de fonder le code sur les styles de cellule. Le fonctionnnement optimal de LibreOffice repose sur les styles. Dans cet exemple il suffit d'appliquer le style Majuscules ou Prénom à une plage pour que le code soit opérationnel. J'ai mis en oeure cela dans la feuille décés.

Le code est devenu plus simple puisque tout peut être remplacé par :

Sub pysCasse(oEvent)

dim oService as object

if oEvent.supportsService("com.sun.star.table.Cell") then
    select case oEvent.cellStyle
        case "Majuscules"
            oEvent.formula = ucase(oEvent.formula)
        case "Prénom"
           oService = CreateUnoService("com.sun.star.sheet.FunctionAccess")
            oEvent.formula = oService.callFunction("PROPER", array(oEvent.formula))
    end select
end if
End Sub

Pour appliquer le traitement aux autres feuilles :

  • Appliquer les styles aux colonnes concernées (sélection puis double-clic sur le nom du style dans le volet latéral)
  • Clic droit sur l'onglet de la feuille▸Événéments de la feuille▸Sélectionner Contenu modifié
  • Cliquer sur Macro▸cliquer sur les + pour déplier le nom du classeur (EC Aubain...)▸StandardModule1▸sélectionner pysCasseOk

Cordialement

éditer signaler supprimer permalien plus

Commentaires

merci beaucoup

Image Gravatar de Claude 1954Claude 1954 ( 2019-03-31 11:07:16 +0200 )éditer
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2019-03-30 14:32:42 +0200

Consultée: 80 fois

Mise à jour: Mar 31