Voici le code du fichier d'exemple.
La macro
rafraichir_donnees() déclenche avec l'événèment
Contenu modifié de la feuille SORTIE.
Vous remarquerez que passer de 10 à 15 dans la cellule jaune ne donne pas les mêmes résultats selon que le code est
ou
Bonne fin de WE.
Code : Tout sélectionner
REM ***** BASIC *****
dim classeur, controleur, fenetre, feuilles, sortie, source, zone as object
dim TexteCopie, texte_cellule as string
dim DateCopie, date_cellule, date_cible as date
dim ligne_source, ligne_sortie as integer
dim gomme as long
rem ************************************************************
Sub rafraichir_donnees()
classeur = ThisComponent
controleur = classeur.CurrentController
fenetre = classeur.CurrentController.Frame.ContainerWindow
feuilles = classeur.Sheets
sortie = feuilles.getByName("SORTIE")
source = feuilles.getByName("SOURCE")
classeur.calculate()
date_cible = LitDate(sortie.getCellByPosition(3, 2)) rem la cellule rouge
ligne_source = 0 rem index 0 pour la ligne 1 du tableau
ligne_sortie = 5
rem nettoyage
gomme = com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.DATETIME
zone = sortie.getCellRangeByPosition(0, 5, 1, 31)
zone.clearContents(gomme)
texte_cellule = LitTexte(source.getCellByPosition(0, ligne_source)) rem index 0 pour la colonne A
while texte_cellule <> ""
date_cellule = LitDate(source.getCellByPosition(1, ligne_source))
if date_cellule < date_cible then
CopieTexte(source.getCellByPosition(0, ligne_source), sortie.getCellByPosition(0, ligne_sortie))
CopieDate(source.getCellByPosition(1, ligne_source), sortie.getCellByPosition(1, ligne_sortie))
ligne_sortie = ligne_sortie + 1
endif
ligne_source = ligne_source + 1
texte_cellule = LitTexte(source.getCellByPosition(0, ligne_source))
wend
End Sub
rem ************************************************************
Function LitDate(cible as object) as date
LitDate = cible.getvalue()
End Function
Function LitTexte(cible as object) as string
LitTexte = cible.getstring()
End Function
Sub CopieDate(depuis as object, vers as object)
DateCopie = depuis.getvalue()
if DateCopie <> 0 then
vers.value = DateCopie
else
vers.string = ""
endif
End Sub
Sub CopieTexte(depuis as object, vers as object)
TexteCopie = depuis.getstring()
vers.string = TexteCopie
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.