Macro remplacant formule conditionnelle?

Bonjour Chers Amis,

Je fais un tableau de suivi d'échéances de retour de dossier. Dans une des cellules ( G5) j'ai besoin que s'affiche trois conditions (" " , pas de relance, insérer date relance) cela en fonction d'une autre (E5) qui détermine si le dossier est retourné:OUI, retourné:NON ou En ATTENTE...
Pour cela j'ai fait une formule conditionnelle qui fonctionne bien:
=SI(E5="EN ATTENTE";"";SI(E5="OUI";"PAS DE RELANCE";SI(E5="NON";"INSÉRER DATE RELANCE";"")))
G5 me sert d'alerteur sur l'état du dossier mais aussi a indiquer si une relance est nécessaire. Donc lorsque apparait "INSÉRER DATE RELANCE" l'agent sait qu'il doit relancer et qu'il doit écrire dans cette cellule la date a laquelle il l'a fait. Cela sans écraser la formule, car j'ai créée une liste pour que les formules se régénèrent à chaque ligne.
J'ai pensé à une macro du coup mais sans trop savoir si cela serait possible et sans savoir comment faire.
Est-ce que quelqu'un pourrait m'aider?

Merci par avance!

4 réponses

  1. Bonjour

    il doit écrire dans cette cellule la date a laquelle il l'a fait. Cela sans écraser la formule qu'elle contient
    Une cellule contient soit une formule, soit une valeur, mais pas les deux à la fois, et la modification de son contenu qu'elle provienne du clavier ou de vba écrase l'ancien contenu. J'ai bien peur que vba ne puisse contourner cette difficulté
    Je ne sais pas ce qu'en pense pijaku que je salue au passage

    Cdlmnt
    1. Modérateur
      Salut ccm81

      mon +1 répondrait-il à ta question?
    2. Tout à fait
      Quant au +1, merci, mais ça me parait beaucoup, 0.5 aurait largement suffi ;-)
    3. Modérateur
      ça t'apprendra à faire le malin + 2 ;-)
  2. Bonjour Pijaku,

    C'est une solution, mais au préalable je voudrais trouver quelque chose de plus automatique un peu basé sur la forme d'un formulaire...
    Je ferais ça si je ne trouve pas de macro.

    Merci quand même.
    1. Contributeur
      Bonjour,

      Pas très orthodoxe ton truc mais bon, un essai.
      A mettre dans le module de la feuille :
      Private Sub Worksheet_Change(ByVal Target As Range)
          Dim pl1 As Range, pl2 As Range, c As Range, lig As Long
          Set pl1 = [E2:E10]
          Set pl2 = [G2:G10]
          If Intersect(Target, Union(pl1, pl2)) Is Nothing Then Exit Sub
          Set pl1 = Intersect(Target.Offset(, 2), pl2)
          Set pl2 = Intersect(Target, pl2)
          If pl1 Is Nothing Then
              Set pl1 = pl2
          ElseIf Not pl2 Is Nothing Then
              Set pl1 = Union(pl1, pl2)
          End If
          If pl1 Is Nothing Then Exit Sub
          For Each c In pl1
              If Not IsDate(c) Then
                  lig = c.Row
                  Application.EnableEvents = False
                  c.FormulaLocal = "=SI(E" & lig & "=""EN ATTENTE"";"""";SI(E" & lig & "=""OUI"";""PAS DE RELANCE"";SI(E" & lig & "=""NON"";""INSÉRER DATE RELANCE"";"""")))"
                  Application.EnableEvents = True
              End If
          Next c
      End Sub

      Fait sur les lignes 2 à 10.
      La colonne E doit être une saisie (liste déroulante acceptée).
      Pour éviter de perdre une donnée je n'efface jamais la date. Si l'utilisateur modifie E il faudra supprimer la date en G pour récupérer le libellé.

      A la réflexion (maintenant que c'est fini), comme tu passes en vba pourquoi ne pas mettre directement le libellé plutôt qu'une formule ?
      Ca aurait été plus simple.
      https://www.cjoint.com/?DHba1QK7ImD

      eric