Ne pas changer :MAINTENANT

Bonjour à tous,

Voilà mon problème:

je souhaiterai avoir la date et l'heure( fonction MAINTENANT) en D si A de la même ligne est remplie.

Si je met une formule si dans la case D1 et que je remplie A1 cela fonctionne parfaitement, mais quelque minute après quand je remplie A2 ça fonctionne pour D2 mais ça me change D1. je voudrais qu'une fois qu'il y a une valeur dans D celle ne puisse plus changer.

Merci pour votre aide

Alex42

Bonjour,

la fonction MAINTENANT et les autres d'ailleurs, sont "lancées" à chaque recalcule de la feuille ou du classeur.

Donc lorsque vous entrez une valeur dans A1, Excel lance tous les calculs, la fonction maintenant dans D1 est calculée est donne une valeur, ceci dit la fonction maintenant en D est également calculée, mais comme en A la cellule est vide, la cellule D reste vide également.

Lorsque vous entrez une valeur en cellule A2, Excel relance les calculs, et hop, D1 est recalculé, donc met à jour la date et l'heure dans cette cellule, il en est de même pour la cellule D2, qui elle "est bonne".

Donc pour remédier à ceci il faut qu'en D1 et plus, ce ne soit pas une formule mais une donnée "en dur", alors du coup il faudra passer en VBA, avec une surveillance sur la colonne qui qui lancera le calcul "maintenant" en VBA et inscrira le résultat en colonne D sur la ligne correspondante à la ligne de la colonne A.

@ bientôt

LouReeD

Bonjour

Cela ne peut se faire avec la formule MAINTENANT.

Il faut passer par VBA

Code de Feuille

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 1 And Target <>"" Then
Target.Offset(0, 3) = Now
End If
End Sub

Cordialement

19classeur1.zip (6.61 Ko)

Merci cela fonctionne parfaitement.

Que doit je modifier si je veux mon résultat en G ou L par exemple au lieu de D

De plus dès que je sélectionne une cellule et l'entend pour la copier ça m'affiche:

"Erreur d'exécution '13'

Incompatibilité de texte.

Merci d'avance

Bonjour

Que doit je modifier si je veux mon résultat en G ou L par exemple au lieu de D

La ligne de code

Target.Offset(0, 3)

indique le décalage par rapport à la cellule remplie.

Dans ton exemple, tu saisis en colonne A et tu veux voir le résultat en colonne D, soit 3 colonnes à droite de la colonne A, d'où le 3. En modifiant ce 3, tu choisis ta colonne.

De plus dès que je sélectionne une cellule et l'entend pour la copier ça m'affiche:

"Erreur d'exécution '13'

Remplace le Code précédent par celui-ci

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
On Error Resume Next
If Target.Column = 1 And Target <> "" Then
Target.Offset(0, 3) = Now
End If
End Sub

Cordialement

Lorsque j'entends ma cellule sélectionnée je n'ai effet plus l'erreur par contre ma VBA s'applique à toutes les cellules dans lesquelles j'ai fait ma copie.

Ex:Je prends la cellule E8 et l'étends jusqu'en E10 cella appliqué ma formule pour H9,H10 K9,K10 et ainsi de suite toute les deux colonnes.

Cordialement

Bonjour,

Que penses-tu de joindre un fichier et de nous préciser ce que tu veux?

Cdlt.

Bonjour,

avec un peu de temps...

Ci-joint ma proposition :

14test-loureed.xlsm (16.55 Ko)

@ bientôt

LouReeD

Bonjour,

Puisque l'on est dans les suppositions, une nouvelle approche.

Cdlt.

Option Explicit
'numéro de colonne pour la date et l'heure =1+6=7
Const lCol As Long = 6

Private Sub Worksheet_Change(ByVal Target As Range)
Dim newValue, oldValue

    If Not Intersect(Target, Columns(1)) Is Nothing Then
        If Target.Count > 1 Then Exit Sub

        newValue = Target.Value
        With Application
            .EnableEvents = False
            .Undo
        End With
        oldValue = Target.Value

        Select Case True
            Case oldValue = "" And newValue <> "" And IsEmpty(Target.Offset(0, lCol))
                Target.Value = newValue: Target.Offset(0, lCol) = Now
            Case Else
                '
        End Select

    End If

    Application.EnableEvents = True

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Columns(lCol + 1)) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Not IsEmpty(Target) Then Cells(lCol + 1).Select
    End If

End Sub

Bonjour ériiic !

Cette partie de code :

            Case oldValue = "" And newValue <> "" And IsEmpty(Target.Offset(0, lCol))
                Target.Value = newValue: Target.Offset(0, lCol) = Now
            Case Else

vérifie si l'ancienne valeur est égale à rien et que la nouvelle est égale à quelque chose et qu'il n'y a pas de date en colonne "décalée" de 6 alors son inscrit la date en remettant la nouvelle valeur dans la cellule de la colonne A, c'est cela ?

Mais que se passe-t-il si l'on met une nouvelle valeur à la place d'une ancienne, par exemple pour mettre à jour un stock ?

Dans votre code, si je comprend bien rien ne se passe, c'est cela ?

Il est vrai qu'avec le cahier des charges que l'on a (comme vous dites ) on est bien obligé de se faire des hypothèses

Il m'est souvent arrivé de constater qu'un sujet pouvait être pris à bras le corps par beaucoup d'entre nous, mais qu'il avait l'air d'être sans réponse (réaction, oublié) du demandeur...

@ bientôt

LouReeD

Re,

Bonjour LouReed,

Le principe retenu est le suivant : Si A était vide et A devient non vide et pas de date en G, alors date en G.

Dans les autres cas nada.

Et on ne peut plus modifier A et on ne peut pas effacer G (sélection impossible).

Dans la mesure ou on ne veut pas de modification de date en G, on peut en déduire (supposition) que A ne doit pas être modifié après avoir été documenté!?

Une procédure peut-être envisagée pour un RAZ partiel ou total.

Maintenant, attendons le retour d'Alex42. Il a matière à réfléchir sur sa question, et les résultats attendus.

Cdlt.

nota : ce qui est intéressant, c'est le "Select Case True",

Select Case True

veut dire : prend la Case dont la condition est vrai ?

Ce qui simplifie une série de If.

Je comprend le système, mais je reste avec mes vieux "démons" des trains de if elseif et else...

Quand je vois votre code, celui-ci fait (en général tous les vôtres) font plus "propre" et "pro" que les miens !

J'aime cela fait professionnel, et j'ai beau les décortiqués, les comprendre, en première intention ce n'est pas ce genre d'écriture que j'arrive à ressortir !!!

Mais il me reste encore du temps devant moi pour apprendre et me défaire de mes mauvaise habitudes comme d'oublier souvent de "typer" une variable, et pire encore de ne pas les définir !!!!

@ bientôt

LouReeD

Rechercher des sujets similaires à "pas changer maintenant"