[Calc] Insérer une formule par macro

Bonjour,

j'ai un tableau de suivi des dépenses construit comme suit

A;B;C;D;E;F;G;H;I;J
DATE;MODE;NUM;OBJET;Débit;Crédit;Solde;Sous-catégorie;Catégorie;NATURE
dim. 1/01/2017;CB;;OPÉRATION 42737-3;414,00;;-414,00;COMPTE 1;PLACEMENT;Débit
dim. 1/01/2017;CB;;OPÉRATION 42737-4;154,00;;-154,00;DIVERS;COURANT;Débit
lun. 2/01/2017;CHQ;99919;OPÉRATION 42737-5;475,00;;-475,00;ÉQUIPEMENTS;COURANT;Débit

La colonne NATURE (J) contient cette formule
=SI(E2;"Débit";"Crédit")

La macro ci-dessous insère cette formule en dernière ligne. Elle est déclenchée à chaque enregistrement du classeur.
Du coup, l'insertion se répète inutilement, ajoute des lignes vides au tableau, ce qui fausse les Tables de pilote mises en place pour l'analyse.

>sub insertionformulenature|
>>
    >
    rem ------------------define
    variables---------------------------------
    dim document as Object
    dim dispatcher as object
       rem
    ----------------------------------------------------------------------

    rem get access to the document
       document = ThisComponent.CurrentController.Frame
       dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

    rem
    ----------------------------------------------------------------------
    dim args1(0) as new com.sun.star.beans.PropertyValue
       args1(0).Name = "ToPoint"
       args1(0).Value = "tetenature" rem "$J$1"

       dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0,
    args1())

    rem
    ----------------------------------------------------------------------
    dim args2(1) as new com.sun.star.beans.PropertyValue
       args2(0).Name = "By"
       args2(0).Value = 1
       args2(1).Name = "Sel"
       args2(1).Value = false

       dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData",
    "", 0, args2())
    rem -------repérer la ligne de la cellule active
    Dim CelluleActive As Object, LigneCelluleActive As Variant

      CelluleActive = ThisComponent.getCurrentSelection
      LigneCelluleActive= CelluleActive.CellAddress.Row

    rem
    ----------------------------------------------------------------------
    dim args3(0) as new com.sun.star.beans.PropertyValue
       args3(0).Name = "By"
       args3(0).Value = 1
       rem dispatcher.executeDispatch(document, ".uno:GoUpSel", "", 0,
    args3())
       dispatcher.executeDispatch(document, ".uno:GoDownSel", "", 0,
    args3())

       dispatcher.executeDispatch(document,
    ".uno:JumpToNextUnprotected", "", 0, Array())
       dispatcher.executeDispatch(document, ".uno:FillDown", "", 0,
    Array())

    rem
    ----------------------------------------------------------------------
    dim args4(1) as new com.sun.star.beans.PropertyValue
       args4(0).Name = "By"
       args4(0).Value = 1
       args4(1).Name = "Sel"
       args4(1).Value = false
       dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args4())

    end Sub|

Or, Je souhaite que l'insertion de la formule n'intervienne pas plus bas que la dernière ligne saisie.
Pouvez-vous me mettre sur la piste de mon erreur ?

NB : je n'ai pas trouvé la syntaxe Basic pour tester la position de cette dernière ligne.

Merci,
LC

...en sortant quelque peu du sujet, avez-vous envisagé d'utiliser un logiciel de comptes comme http://www.grisbi.org/ ?

Je la 12/04/2017 11:18, LC_Libre skribis :

Je l'ai utilisé pendant quelques années, puis abandonné après des plantages à répétition.
J'y reviendrai peut-être sous Linux, quand le Mac devra être abandonné.

J'ai eu récemment besoin des fonctions d'analyse permises par les tables de pilote de Calc.

LC

C'est surtout le développement de grisbi qui semble avoir été abandonné : pas de mise à jour depuis 2014 et la plupart des pages du site sont signalées comme à venir (depuis 2014 !).

J'ai aussi eu cette impression, les plantages risquent de ne pas être corrigés de sitôt.

LC

Je la 12/04/2017 12:04, LC_Libre skribis :

Je l'ai utilisé pendant quelques années, puis abandonné après des
plantages à répétition.
J'y reviendrai peut-être sous Linux, quand le Mac devra être abandonné.

C'est surtout le développement de grisbi qui semble avoir été abandonné : pas de mise à jour depuis 2014 et la plupart des pages du site sont signalées comme à venir (depuis 2014 !).

J'ai aussi eu cette impression, les plantages risquent de ne pas être corrigés de sitôt.

LC

Les plantages sont tjs sur la version Ubuntu du ppa, mais la version compilée en est débarrassée....par contre elle est obstinément en anglais....

Ma remarque initiale était générale, il y a d'autres logiciels de comptes...

LC_Libre a ecrit le 12/04/2017 11:18 :

j'ai un tableau de suivi des dépenses construit comme suit

A;B;C;D;E;F;G;H;I;J
DATE;MODE;NUM;OBJET;Débit;Crédit;Solde;Sous-catégorie;Catégorie;NATURE
[...]
La colonne NATURE (J) contient cette formule
=SI(E2;"Débit";"Crédit")

La macro ci-dessous insère cette formule en dernière ligne. Elle est déclenchée à chaque enregistrement du classeur.
Du coup, l'insertion se répète inutilement, ajoute des lignes vides au tableau, ce qui fausse les Tables de pilote mises en place pour l'analyse.

Bonjour,

J'essaie toujours d'aller au plus simple et me méfie des usines à gaz.
Donc, si je devais le faire pour moi, je me contenterais de recopier "à la main" vers le bas la formule dans la colonne J, avec une avance confortable sur ma saisie.
Il est en effet tout à fait possible d'aller au-delà de la dernière ligne saisie, il suffit de poser un filtre sur les Tables de pilote pour neutraliser les lignes encore "vides", (par exemple en excluant les lignes dont la date est vide).

D'ailleurs comment fais-tu pour la colonne G (le solde) ? Là aussi, la formule doit être recopiée.

Ceci dit, je serais curieux de voir fonctionner la solution par macro, mais hélas je ne peux pas t'aider.

Cordialement,
Paul

Bonjour,

oui, bien sûr, la recopie manuelle est ce que je faisais avant de penser macro –parce que j'aime bien m'éviter les gestes répétitifs.

La colonne G (masquée) contient la formule =SI(E2;E2*-1;F2) complétée par macro aussi, j'avais oublié qu'elle se remplissait aussi en dessous de la dernière ligne saisie.
Je cherche donc à résoudre aussi ce cas.

Un classeur exemple avec ses macros ici https://framadrop.org/r/lNZisNf2Na#bxJnXVKkzyuoMzCYnBvRp6zzr06P2jpbN/K1+yuIBeg=

LC

Bonjour,

Bonjour,

j'ai un tableau de suivi des dépenses construit comme suit

A;B;C;D;E;F;G;H;I;J
DATE;MODE;NUM;OBJET;Débit;Crédit;Solde;Sous-catégorie;Catégorie;NATURE
dim. 1/01/2017;CB;;OPÉRATION 42737-3;414,00;;-414,00;COMPTE
1;PLACEMENT;Débit
dim. 1/01/2017;CB;;OPÉRATION 42737-4;154,00;;-154,00;DIVERS;COURANT;Débit
lun. 2/01/2017;CHQ;99919;OPÉRATION
42737-5;475,00;;-475,00;ÉQUIPEMENTS;COURANT;Débit

La colonne NATURE (J) contient cette formule
=SI(E2;"Débit";"Crédit")

La macro ci-dessous insère cette formule en dernière ligne. Elle est
déclenchée à chaque enregistrement du classeur.
Du coup, l'insertion se répète inutilement, ajoute des lignes vides au
tableau, ce qui fausse les Tables de pilote mises en place pour l'analyse.

Et si au lieu d'insérer dans la dernière ligne, tu insérais la formule dans chaque ligne dont la colonne J est vide _et_ la colonne A ne l'est pas ?

Bonne journée
JBF

Bonjour,

ah merci. Le changement de point de vue qui me manquait !

Je vais chercher dans cette direction, mon niveau sur Basic est basique. L'acquis dans VBA ne m'est pas d'un grand secours.

Bonne journée,
LC