Calc condition SI

Bonjour,

je cherche à mettre une valeur dans ma cellule en fonction de la valeur d’une autre. Jusque là tout va bien.

Voici ce que j’ai :

dans la cellule A1 j’ai la formule : =JOUR(AUJOURDHUI())

Dans ma cellule A2 j’ai une valeur au format nombre

Ce que je veux faire :

Quand ma cellule A1 affiche la valeur 1 (premier jour du mois), je veux que ma cellule A2 soit égale à 0, sinon la valeur de A2 ne change pas, elle est incrémentée par une macro

Ce que j’ai fait :

=SI(A1=“1”;1;A2)

Ne fonctionne pas

=SI(A1=1;1;A2)

Ne fonctionne pas

=SI(A1=1;1;)

Ne fonctionne pas

Et quelques autres…

Je pense que le problème vient du fait que j’ai une formule dans la case A1. J’ai alors essayé en faisant une copie bête et méchante de la cellule, mais cela bug encore.

Pourriez-vous m’aider ?

Merci

Je pense que ton problème vient du fait que tu utilises un macro qui va effacer le résultat de ta formule. Ne peux-tu pas gérer ce problème avec la macro (ou supprimer la macro et faire tout dans la formule).

Je n’ai pas bien compris ce que tu voulais faire mais la formule ci-dessous ne pourrait-elle pas résoudre ton problème?

=$A1 - 1

Bonjour

@Jé a écrit:

Quand ma cellule A1 affiche la valeur 1 (premier jour du mois), je veux que ma cellule A2 soit égale à 0, sinon la valeur de A2 ne change pas

Ceci est un cas classique de “référence circulaire” (impossible) : en A2 tu veux mettre une formule qui utilise A2 pour le calcul.

De plus tu indiques modifier A2 par macro, ce qui, de toute façon effacera la formule : une cellule ne peut à la fois contenir une valeur et une formule.

Puisque tu utilises des macros tu peux procéder en utilisant par exemple les événements de la feuille : clic droit sur l’onglet pour y accéder puis naviguer pour associer à l’événement Contenu modifié une macro du type suivant.

Sub PysSheetChange(oEvent)

if oEvent.supportsService("com.sun.star.sheet.SheetCell") then
	if split(oEvent.AbsoluteName, ".")(1) = "$A$1" and oEvent.value = 1 then
		thiscomponent.currentController.activeSheet.getCellRangeByName("A2").value = 0
	end if
end if

End Sub
  • La macro vérifie d’abord que l’objet modifié qui a déclenché l’événement est une cellule.
  • Si oui, on vérifie qu’il s’agit bien de la cellule A1 et qu’elle contient 1.
  • Si oui on met 0 dans A2 (qui n’est pas modifiée dans tous les autres cas)

Voir l’exemple ModifAutreCellule.ods

Cordialement

En fait, j’ai lu trop vite… J’avoue que je ne connaissais pas cette fonctionnalité “Contenu modifié”.
Du coup tout fonctionne parfaitement !
Merci infiniment.

Bonsoir,

C’est exactement ça !
Merci beaucoup Monsieur Samyn.
Il ne me reste plus qu’à adapter à ma macro car la cellule est remplie automatiquement par une formule.
Merci encore.