Macro remplacant formule conditionnelle?

Fermé
aurelie91220 Messages postés 12 Date d'inscription lundi 5 mars 2012 Statut Membre Dernière intervention 28 juillet 2014 - 23 juil. 2014 à 17:47
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 - 1 août 2014 à 08:36
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!
A voir également:

4 réponses

ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
28 juil. 2014 à 14:03
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
2
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
28 juil. 2014 à 15:25
Salut ccm81

mon +1 répondrait-il à ta question?
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
28 juil. 2014 à 15:48
Tout à fait
Quant au +1, merci, mais ça me parait beaucoup, 0.5 aurait largement suffi ;-)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
Modifié par pijaku le 28/07/2014 à 15:57
ça t'apprendra à faire le malin + 2 ;-)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
24 juil. 2014 à 09:21
Bonjour,

Pourquoi ne pas faire saisir la date en H5?
0
aurelie91220 Messages postés 12 Date d'inscription lundi 5 mars 2012 Statut Membre Dernière intervention 28 juillet 2014
28 juil. 2014 à 13:52
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.
0
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 243
1 août 2014 à 08:36
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
0