[Résolu][Calc] Rafraichir cellule avant traitement

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
seb05
Fraîchement OOthentifié
Messages : 9
Inscription : 06 janv. 2015 09:00

[Résolu][Calc] Rafraichir cellule avant traitement

Message par seb05 »

Bonjour,
Je souhaite faire une petite appli qui compare 2 dates ( Date Livraison demandée et Date Livraison prévue ) et qui lance une macro si la date de livraison prévue est supérieure à la date de livraison demandée. J'utilise pour cela la fonctionnalité " Données/Validité/" Message d'erreur " dans laquelle je lance ma macro quand la date de livraison saisie dans la cellule est supérieure. Ma macro se lance bien dans ce cas mais problème : la macro récupère l'ancienne valeur de la cellule et pas la nouvelle valeur qui vient d'être saisie qui qui vient de lancer la macro.
Pouvez vous me dire comment je peux rafraichir cette cellule avant que la macro la lise?
Voici ma macro :

Code : Tout sélectionner

sub Alerte_date() 
Dim monDocument As Object, lesFeuilles As Object
Dim maFeuille As Object, maZone As Object
Dim CelluleActive As Object
Dim Feuille As Object
Dim ligne as integer
Dim colonne as integer
Dim Date_Livraison_demandee as DATE
Dim Date_Livraison_prevue as DATE
   
monDocument = ThisComponent
lesFeuilles = monDocument.Sheets
maFeuille = lesFeuilles.getByName("Feuille1")
Feuille = monDocument.getSheets.getByName("Feuille1")
CelluleActive = ThisComponent.getCurrentSelection   
ligne=CelluleActive.CellAddress.Row
colonne=CelluleActive.CellAddress.Column

maZone = maFeuille.getCellRangeByPosition(0,ligne,7,ligne)

Date_Livraison_demandee =litCellule(4,ligne)
Date_Livraison_prevue =litCellule(5,ligne)
MsgBox(Date_Livraison_prevue)

   With maZone      
          if Date_Livraison_demandee<Date_Livraison_prevue then
        
             .CellBackColor = RGB(0,255,0)
          else
               .CellBackColor = RGB(255,0,0)
          end if
   End With
End sub
Merci.
Seb.
OpenOffice Version : 4.3.5.2 sous sept et 8.1
OpenOffice Version : 3.5.5 sous XP
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Rafraichir cellule avant traitement

Message par zeguedon »

Bonjour,

Tu demandes à ta macro de colorer une cellule selon un critère en passant par le menu Données>Validité.

Le formatage conditionnel est fait pour ça, et il n'y a pas besoin de macro, ni de validité. Menu Format>Formatage conditionnel

Tout sur le formatage conditionnel (MFC)
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
seb05
Fraîchement OOthentifié
Messages : 9
Inscription : 06 janv. 2015 09:00

Re: [Calc] Rafraichir cellule avant traitement

Message par seb05 »

Merci pour cette réponse.
En fait a ce stade ma macro est encore sous une forme très basique mais je vais la faire évoluer ( calculs, envoi de mail .... ) donc j'ai vraiment besoin de pouvoir récupérer la nouvelle valeur de la cellule qui a lancé ma macro.
OpenOffice Version : 4.3.5.2 sous sept et 8.1
OpenOffice Version : 3.5.5 sous XP
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Rafraichir cellule avant traitement

Message par zeguedon »

Bonjour,

Si tu veux programmer, il faut un minimum de logique pour que ça fonctionne correctement.

Tu demandes à la validité d'interdire la saisie d'une valeur sous une condition et de déclencher une macro. Comment veux tu récupérer cette valeur puisqu'elle est interdite ?
Si tu annules la validation pour permettre la saisie, la macro ne sera pas appelée.

C'est un peu le chien qui court après sa queue

Il faut que tu passes par d'autres méthode, tel qu'un "écouteur de cellule, un listener" tu vas trouver plein d'exemple ici en faisant quelques recherches.

HS : ta macro, en l'état n'est pas encore fonctionnelle et incapable de récupérer la moindre valeur, même valide. Avant d'aller plus loin, essaye déjà de récupérer la valeur d'une cellule valide et ensuite essaye d'effectuer un traitement.

Une dernière chose, joindre un fichier pour voir sa structure serait sans bien plus judicieux pour obtenir de l'aide.

A+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] Rafraichir cellule avant traitement

Message par OOotremer971 »

Bonjour,
seb05 a écrit :J'utilise pour cela la fonctionnalité " Données/Validité/" Message d'erreur " dans laquelle je lance ma macro quand la date de livraison saisie dans la cellule est supérieure. Ma macro se lance bien dans ce cas mais problème : la macro récupère l'ancienne valeur de la cellule et pas la nouvelle valeur qui vient d'être saisie qui qui vient de lancer la macro.
Est-ce que tu peux joindre ton fichier car je ne reproduis pas ! Dans le fichier joint, j'ai mis une validité en D1 (cellule rouge) pour déclencher si la date est supérieure à aujourd'hui
  • Validité1.png
    Validité2.png
    La macro efface le contenu de la cellule A1 (Valeur numérique, Date, Formules, Format, Texte)

    Si je saisi une date non conforme en D1 (supérieure à aujourd'hui), la macro est appelée, la cellule A1 vidée de son contenu et la date saisie en D1 est bien présente.
Il sûrement un problème avec ton fichier

A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Calc] Rafraichir cellule avant traitement

Message par bm92 »

Bonjour,
seb05 a écrit :Ma macro se lance bien dans ce cas mais problème : la macro récupère l'ancienne valeur de la cellule et pas la nouvelle valeur qui vient d'être saisie qui qui vient de lancer la macro.
Etudie la solution proposée par alhazred dans cette intervention.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
seb05
Fraîchement OOthentifié
Messages : 9
Inscription : 06 janv. 2015 09:00

Re: [Calc] Rafraichir cellule avant traitement

Message par seb05 »

Bonjour et merci à tous pour vos remarques.
Je vais étudier toutes les pistes que vous m'avez donné.
PS : Je n'avais pas encore mis en PJ mon fichier. Je l'ai ajouté dans ce message. Pour info la cellule où il faut modifier la date est la " F3 ". J'ai ajouté un petit MsgBox qui retourne la valeur récupérée par la macro ( et qui n'est pas la bonne... )
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice Version : 4.3.5.2 sous sept et 8.1
OpenOffice Version : 3.5.5 sous XP
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Rafraichir cellule avant traitement

Message par zeguedon »

Bonjour,

Je me retrouve dans une impasse avec ta façon de procéder. En fait il faut trouver le moyen de lire non pas le contenu de la cellule, car lorsque la macro est appelée la saisie n'est pas encore validée, et c'est donc bien l'ancienne valeur qui est lue. Par contre le contenu de la nouvelle saisie est considéré car la coloration de la ligne s'opère si la condition est remplie. Il existe peut-être une méthode pour lire le contenu de la ligne de saisie, mais je ne trouve pas documentation sur le sujet.

Cependant, tu peux utiliser un autre méthode dont tu trouveras un exemple dans le fichier de ce fil : https://forum.openoffice.org/fr/forum/v ... 98#p250032

La macro se déclenche dès que la cellule est sélectionnée, ensuite si une condition définie est remplie (if then) l'exécution à lieu. C'est là qu'il faut comparer les deux dates et selon, récupérer la valeur de la cellule, et appliquer le formatage et les autres traitements.

C'est plus souple que la validité et facile à mettre en place.

A+ en attendant de meilleures solutions.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Rafraichir cellule avant traitement

Message par zeguedon »

Re,

Une autre solution avec une inputbox qui demande confirmation de la date dès que la macro est déclenchée. Elle initialise ta variable "Date_Livraison_prevue".
Bon dans le fichier joint je n'ai pas mis en place la gestion d'erreur de saisie pour s'assurer qu'il s'agit bien d'une date, c'est pas sure que tu adoptes cette solution.

J'ai commenté ta ligne

Code : Tout sélectionner

'Date_Livraison_prevue =litCellule(5,ligne)
et j'ai mis celle ci volontairement avant ta "msgBox", au lieu de la mettre à la place de la ligne précédente :

Code : Tout sélectionner

Date_Livraison_prevue = inputbox("Merci de confirmer la date") 
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Calc] Rafraichir cellule avant traitement

Message par bm92 »

Bonjour,
bm92 a écrit :Etudie la solution proposée par alhazred dans cette intervention.
LivraisonBM.ods
Remarques
  • J'ai changé le critère de validation, il acceptait toute date inférieure à 2000.
  • Changements dans la macro :

    Code : Tout sélectionner

    sub Alerte_date(cellValue As String, tableCell As String)
    
    Date_Livraison_prevue = cellValue
    MsgBox("Valeur récupérée par la Macro : " & cellValue & Chr$(13) & Date_Livraison_prevue)
  • Ce document provient d'un original Excel. On pourrait supprimer :
    - les modules Module1 et ThisWorkbook,
    - le REM en tête du module Feuil1.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
seb05
Fraîchement OOthentifié
Messages : 9
Inscription : 06 janv. 2015 09:00

Re: [Résolu] Rafraichir cellule avant traitement

Message par seb05 »

Merci Bernard ( bm92 ),
Tu as vraiment trouvé la solution à mon problème.
Merci aussi à tous ceux qui m'ont apporté leur aide.
@ bientôt.
Seb.
OpenOffice Version : 4.3.5.2 sous sept et 8.1
OpenOffice Version : 3.5.5 sous XP