les macros ne fonctionnent pas

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
EC Aublain 1796-1812.xls

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 :slight_smile:

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

merci beaucoup