Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum 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 !
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 :
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
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
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.
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)
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.
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
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.
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.
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.
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.