Les macros pour newbies

Bonjour. Je ne comprends pas le comportement erratique de LOO.
On me transmet un fichier avec des macros que j’active. Ça marche

  • J’ouvre en même temps un fichier à moi. La macro ne fonctionne plus. Il y a donc des interactions entres les fichiers ouverts qui génèrent un joli bor…

  • Je recopie les macros dans mon fichier et ferme le premier fichier.
    Des erreurs BASIC se signalent alors que je n’ai rien modifié.


PutChangedDate2.ods (9.4 KB)
Suivi magasins.ods (78.1 KB)
La ligne 20 fait une erreur et pourtant le fichier transmis fonctionne ?

Mais qu’est ce que j’ai oublié de faire ?

Bonjour,
comme vous n’expliquez pas ce que vous voulez faire, c’est difficile de vous aider.

Première remarque : L’ouverture du document exemple (PutChangeDate2.ods) exécute une macro à l’ouverture (Standard.Module1.DocOpened). Votre document (Suivi magasins.ods) référence une autre Sub… alors qu’elle n’existe pas. Modifiez pour pointer vers Standard.Module1.DocOpened.

Ensuite, notez bien que la plage surveillée dans l’exemple (F2:F10) n’est probablement pas celle qui vous intéresse dans votre propre document. Modifiez cette plage en conséquence (constante ValuesAddress).

Enfin, et j’y reviens : que voulez-vous faire ? Une macro est-elle nécessaire ? (n’oubliez jamais que la meilleure macro est celle dont on n’a pas besoin :slight_smile:

Effectivement, maintenant ça fonctionne sans message d’erreur. Mon but étant de mettre la date d’aujourd’hui dans la colonne D au cas ou la cellule de la colonne C est modifiée. Le forum m’a aidé pour ça: Create auto update process in Calc
On aurait pu aussi inventer une fonction pour la colonne D: SI(ESTMODIFIE(Cx);AUJOURDHUI();Dx)
Mais la fonction ESTMODIFIE() n’existe pas, d’ou la nécessité de passer par une macro.

Merci pour le coup de main.

Je constate une chose. Dans mes 2 tableaux:
Si je supprime une ligne, celle d’en dessous remontent. Par ce phénomène toutes les dates sont mises à jour. Peut-on éviter celà ?

Non, tel que le code est conçu, on ne peut pas : le listener réagit aux modifications opérées sur la plage surveillée F2:F10. Supprimer une ligne, c’est modifier la plage.

Il y a également un plantage si on insère une ligne dans la plage.
Il faudrait donc adapter le code de la sub RangeModify_modified() pour éliminer la source de l’erreur qui s’y produit.

Je propose une idée de quelqu’un qui n’y connait rien.
Ne pourrait on pas identifier le numéro de ligne, et s’il change inhiber le résultat de la fonction ?