Fixer une date sur excel

Bonjour,

Débutant sur Excel, je cherche un code ou une formule qui me permettrait de noter automatiquement la date du jour (et que celle-ci ne change plus) lorsque l'avancement d'une tâche est de 100%.
J'avais d'abord pensé à la formule =Si("avancement"=100%; AUJOURDHUI(); "") mais par définition la date change (et je voudrais conserver les dates de fin de tâches).
Si quelqu'un pouvait m'aider! Grand merci d'avance!

Cordialement,

tom

18 réponses

  1. Re,

    En supposant que la plage M11 à M291 est formatée en pourcentage et tu saisis simplement 25 pour 25%, si non comment est formatée la plage en standard et tu saisis ex 25%
    testes ce code et tiens moi au courrant

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("M11:M300")) Is Nothing Then
    If Target = 1 Then
    Target.Offset(0, -1) = Date
    Else
    Target.Offset(0, -1) = ""
    End If
    End If
    End Sub
    1. N'y a-t-il personne pour m'aider?
      S'il vous plait, vous me seriez d'un grand secours!
      1. salut,

        si ta question est toujours d'actualité, tu peux utiliser le bout de code suivant :

        'on récupère l'avancement
        avancement = Sheets(1).Range("B1").Value

        'on remplit la case A1 avec la date et l'heure actuelle
        If avancement = "100%" Then
        Sheets(1).Range("A1").Value = Now
        End if

        bonne continuation !
        1. Merci beaucoup! la demande est toujours d'actualité !!
          Mike, le problème évoqué ne correspond pas tout à fait à ce que je cherche.
          Ed, pour ta solution aurais-tu un code entier? Je suis vraiment une biquette incapable de mettre en forme un code. Et ta solution donne-t-elle une date fixe? en d'autres terme, la date qui s'est mise automatiquement dès qu'on a atteint les 100% va-t-elle changer le lendemain?
          Et pour avoir cette formule vraie sur une colonne j'imagine qu'on intervient au niveau du Range, non? Range("A1; A45") par exemple?

          Encore une fois merci !

          tom
          1. Autant pour moi Mike, je n'avais pas lu le sujet jusqu'au bout.
            Du coup il faut adapter un peu le code...mais je ne vois pas où il faut que j'intervienne pour mettre la condition inscrire la date en cellule A1 si la valeur 100% apparait en cellule B1...Tu penses pouvoir modifier ça ?
            merci beaucoup!
            tom
            1. Re,

              tout dépend comment sont saisie les valeurs dans ta plage
              exemple si ta plage A1 à A45 est formatée en pourcentage lorsque tu saisis 100 la valeur s'affiche automatiquement 100,00% dans la colonne B sur la même ligne s'affiche automatiquement la date et l'heure mais on peut se limiter à la date ou à l'heure suffit de préciser et si la valeur est inférieure à 100% colonne B reste vide

              Clic droit sur l'onglet de ta feuille/Visualiser le code et colle ce code,puis fais des essaies sur la plage A1 à A45

              Private Sub Worksheet_Change(ByVal Target As Range)
              If Not Intersect(Target, Range("A1:A45")) Is Nothing Then
              If Target = 1 Then
              Target.Offset(0, 1) = Now
              Else
              Target.Offset(0, 1) = ""
              End If
              End If
              End Sub
              1. Merci !! alors petite précision! Tu vas me trouver tatillon mais dans la réalité la colonne où s'affiche les pourcentages est après celle où doit s'afficher la date (c'est un planning avec des contraintes de présentation assez forte).Mais j'imagine que ça ne doit pas être trop compliqué à modifier, non ? Et, sans vouloir abuser de ta gentillesse, serait-il possible de faire apparaître dans le code la colonne ou va s'afficher la date (l'heure n'est pas importante dans mon cas)? au cas où, justement je devrais modifier l'ordre des colonnes...

                Gracie mille !
                tom
            2. Re,

              donne moi la plage qui doit conditionner le déclenchament du code exemple si je saisis entre F2 à F500 une valeur pourcentage la date doit s'afficher dans la colonne C
              1. La plage qui conditionne le déclenchement du code est de M11 à M291; si 100% s'affiche en cellule M11, la date s'affiche en L11, idem pour M12 la date s'affiche en M12 (et reste fixe). Je ne sais pas si j'ai répondu à ta question...
                Merci !!
            3. ça marche !! merci infiniment, j'ai juste changé le nom de la macro (au niveau du "Private Sub Worksheet_Change" j'avais déjà une macro qui commençait comme ça...j'ai mis "Worksheet_Change1" et ça a marché.
              Donc si j'ai bien compris, si je veux changer la colonne où s'inscrit la date, je change le -1 de "Target.Offset(0, -1)" par -2 ou -3, etc...?
              C'est vraiment chouette de ta part en tout cas !

              Bonne fin de journée à toi !

              tom
              1. Re,

                voila tu as compris - si c'est avant la cellule active et 3 par exemple si tu veux la troisième après la cellule active
                1. Raaa non !
                  J'avais écrit une formule dans la colonne où doit s'inscrire la date. Le code marchait, pas de problème...et j'ai voulu effacer la formule sur toute la colonne, mais ensuite le code ne marchait plus...tu vois une explication ? (j'ai regardé si le format de cellule avait changé, mais non, je suis en format date)
                  1. Re,

                    Si ton fichier comporte des notes confidentielles, masque les et fais moi parvenir ton fichier soit dans un post dans cette discussion ou en message privé (dans ce cas clic sur mon speudo) que je vois

                    Avec un de ces deux lien

                    https://www.cjoint.com/ ou http://www.cijoint.fr/

                    A+
                    Mike-31

                    Une période d'échec est un moment rêvé pour semer les graines du savoir.
                    1. Bonjour!

                      Voici le document type que j'utilise. En fait je pensais que la macro marchait mais c'était parce que j'avais oublié d'enlever ma formule initiale (en K11 ici). J'ai réessayé la macro avec ce document type et ça ne marche pas ...
                      Je te joins le lien:

                      http://www.cijoint.fr/cjlink.php?file=cj201105/cijOqc2kIa.xls

                      merci pour ton aide!

                      tom
                      1. Merci pour le doc. C'est bien l'idée, mais j'aurais deux questions:
                        Est-ce que "Date" signifie qu'il prend la date du jour et ensuite que celle-ci ne change plus? Et est-ce qu'il est possible ici d'appliquer la formule sur une plage de cellule et non pas seulement sur des cellules isolées? c-à-d généraliser le code pour que chaque 100% de la colonne M donne une date en colonne K...

                        Merci !
                        bonne journée à vous !

                        tom
                        1. Re,

                          A partir d'un code VBA Date, la date est figée sauf si tu modifies une cellule en M ou la date s'actualisera à la date de la modification

                          dans mon code j'ai inclus l'effacement de la date si par exemple en M on à saisie accidentellement 100% et que l'on rectifie cette valeur par rien ou une valeur inférieure ex.50% la date s'efface.

                          Mais on peut écrire le code de sorte que s'il existe une date en K cette reste figée dans tous les cas

                          il suffira de remplacer le code existant par ces lignes

                          If Not Intersect(Target, Range("M11:M100")) Is Nothing Then
                          If Target = 1 And Target.Offset(0, -2) = "" Then
                          Target.Offset(0, -2) = Date
                          End If
                          End If

                          https://www.cjoint.com/?AFbp6CLBlku

                          A+
                          Mike-31

                          Une période d'échec est un moment rêvé pour semer les graines du savoir.
                          1. Merci Mike, c'est good! ça fait un petit bog au niveau du "If Target = 1 Then" quand j'insère des lignes mais ça a l'air de fonctionner quand même...
                            Je te recontacte s'il y a un truc qui cloche!
                            Merci encore et bonne journée !

                            Tom
                            1. Re,

                              il faut rajouter au code une gestion d'erreur,

                              remplace le code par celui ci et tiens moi au courant

                              Private Sub Worksheet_Change(ByVal Target As Range)
                              On Error Resume Next
                              If Not Intersect(Target, Range("M11:M100")) Is Nothing Then
                              If Target = 1 And Target.Offset(0, -2) = "" Then
                              Target.Offset(0, -2) = Date
                              End If
                              End If
                              End Sub
                              1. Merci à Mike car j'ai cherché partout pour faire à peu près la même chose que Amiraltom et j'ai pu m'inspirer du code ci-dessus afin de résoudre mon problème. Voici mon adaptation, vu que la colonne A contenait du texte :

                                Private Sub Worksheet_Change(ByVal Target As Range)
                                If Not Intersect(Target, Range("A3:A10000")) Is Nothing Then
                                If Target <> "" And Target.Offset(0, 22) = "" Then
                                Target.Offset(0, 22) = Date
                                Else
                                If Target <> "" And Target.Offset(0, 22) <> "" Then
                                Target.Offset(0, 22) = Target.Offset(0, 22)
                                Else
                                Target.Offset(0, 22) = ""
                                End If
                                End If
                                End If
                                End Sub