(Solutionné)Erreur d'exécution Basic

Bonjour

J’utilise depuis plusieurs années un fichier Calc pour la gestion d’un compte de tutelle.

Ce fichier (de 3 onglets) est le reflet des achats effectués avec ventilations, totaux par rubrique/famille etc.

Pour faciliter les saisies, il est agrémenté de macros et fonctions.
Mon PC “tourne” sous LinuxMint 19.3 et LO 6.0.7.3

Récemment, j’ai voulu “upgrader” LinuxMint 20 avec son LO 6.4.6.2 : Grosse erreur.

Dans le fichier joint (extrait), j’utilise une fonction REMISE_PLU(ref_cellule).

Depuis ma mise à jour, dès l’activation des macros, un popup d’erreur
apparait autant de fois que les lignes remplies contiennent la formule en colonne H c’àd, que mon ichier contenant +/- 6500 lignes, le popup réapparait 6500 fois, pendant la phase de recalcul à l’ouverture.

Dans l’exemple joint, je n’ai laissé que 3 lignes présentant ce cas. Il faudra acquitter (clic) au moins 3 fois

L’utilisation du fichier est simple : laisser vide la ligne 62, puis saisir en A63, date, en B63 les premières lettres d’un magasin, C63, un code quelquonque, D63, un nom d’article (s’il existe dans la colonne, on profite de l’auto complétion) ou le taux de remise de la ligne supérieure tab le prix (si la fonction REMISE_PLU ) n’a pas trouvé dernier prix pratiqué dans ce même magasin; et ainsi de suite. Une ligne vierge termine la saisie de ce magasin et réinitialise le cumul.

L’ouverture du fichier joint fonctionne avec toutes versions de LO < 6.1.3.1, mais provoque le message d’erreur à partir de 6.1.4.1 .Nombreux tests avec Linux et windows, en “dur” et en VM (VirtualBox),avec purge du profil.
J’ai trouvé une solution de contournement par l’ajout, juste avant la fin de fonction, de deux lignes éfaçant la fonction de la colonne H, mais ce n’est pas élégant.

Sample_liste_caisse.ods

@Pierre de Cambrai, Bonjour

REMISE_PLU() est une fonction définie par l’utilisateur. Pour la voir, Outils > Macros > Editer les macros, puis sélectionner dans le volet de gauche le nom du fichier et dérouler Standard > Module1 > remise_PLU

Sélectionner une cellule problématique, comme G44 et retourner sur l’écran d’édition des macros. Une exécution en pas à pas (F8) montre le point de blocage : ligne 11 :

If IsMissing(data)Then

Comme D44 n’est pas renseigné, data est vide. Reste à voir comment contourner cette difficulté.

Edit de 11h09
Solution : Ajouter le mot Optional comme ceci :

Function remise_PLU(Optional data As Variant) 'Price Look Up

Belle journée, Michel

Re-bonjour,

Etonnament, votre fonction ne retourne pas un résultat pour la cellule qui la contient mais agit plutôt comme une macro sur plusieurs cellules.

A suivre, Michel

Exact, la Fonction agit sur plusieurs cellules (il n’y a qu’à travers une macro qu’une cellule peut en modifier une autre - non ?); pour redéfinir un peu le problème rencontré, c’est à l’ouverture du fichier, quand il y a re-calcul, que la fonction Remise_PLU se vautre et UNIQUEMENT là où elle a été utile (c’àd que D[n°ligne] n’est pas vide).
J’aimerai pouvoir retrouver les modifs entre versions de LO, mais ce n’est pas à la portée du premier venu)
En tout cas, merci de m’avoir lu et répondu.

Bonjour la communauté

Un contournement possible de mon problème est de déplacer dans la cellule Prix (colonne E de mon exemple) la formule de la colonne H; ainsi, en s’exécutant, elle “s’auto-efface” de sa colonne E pour les lignes renseignées mais ne génère plus d’erreur à l’ouverture (sa condition d’exécution n’est plus remplie) dans le cas de lignes vides. Ajouter à cela un format nombre “Défini par l’utilisateur = [>0]0,00;[<0][RED]-0,00;”" et le tableau devient propre.

Ce n’est pas une belle solution, mais c’en est une.


@mgl : merci de ta participation.