Date auto en B1 quand A1 renseignée

Résolu
Bibi -  
 Bibi -
Bonjour,
J'ai un tableau Excel tout simple à 2 colonnes.
J'aimerais rentrer en colonne B une formule qui permette de renseigner la date du jour LORSQUE la colonne A est saisie et que cette date soit ensuite figée.
ex : je renseigne A1 le 02/03/15, alors B1 m'indiquera donc automatiquement cette date, même lorsque je réouvivrai ce tableau plusieurs jours plus tard.
Je renseigne A2 le 18/06/15, alors B2 etc etc

Merci d'avance à ceux qui pourront m'aider (la fonction AUJOURDHUI fait que B s'actualise à la date du jour à chaque fois que j'ouvre le tableau.. et CTRL + ; ne convient pas car cette fonction n'est pas automatique).
Merci!

29 réponses

  • 1
  • 2
Résumé de la discussion

La problématique centrale est d’inscrire automatiquement la date dans la colonne B lorsque la colonne A est remplie, puis de figer cette date pour qu’elle ne se mette pas à jour. Plusieurs solutions préconisent une macro Worksheet_Change qui place Date dans B lorsque A est modifiée, tout en prévoyant la gestion de la protection de feuille pour autoriser l’écriture. Les exemples typiques placent Target.Offset(0,1) = Date et prévoient un unprotect/protect avec mot de passe lorsque la feuille est protégée, ou bien laisser déverrouillée une plage limitée. En pratique, la question demeure si la date doit se figer après la première saisie ou se mettre à jour selon les besoins futurs, selon le niveau de protection et les droits des utilisateurs.

Bobot (l'IA à votre service)
  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Bonjour,

    Et non il va s'actualiser, si tu veux fixer ta date il faut compléter ton code,
    en regroupant les posts de la discussion surtout au niveau de la protection, les cellules de la colonne A sont déverrouillées sinon le code plantera.
    remplace le code existant par et saisir entre les guillemets ton mot de passe

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
    If Target(1, 2) <> "" Then
    Exit Sub
    Else
    ActiveSheet.Unprotect Password:="mot de passe"
    Target(1, 2) = Date
    ActiveSheet.Protect Password:="mot de passe"
    End If
    End If
    End Sub

    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    2
    1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      PS: et regardant le code et afin d'éviter que la date s'imprime sur un double clic dans une cellule vide, je modifierai cette ligne
      If Target(1, 2) <> "" Then
      par
      If Target = "" Or Target(1, 2) <> "" Then
      0
  2. jc80 Messages postés 5063 Date d'inscription   Statut Membre Dernière intervention   1 443
     
    Bonjour

    Colles ce code dans ta feuille

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
    Target.Offset(0, 1) = Date
    End If
    End Sub
    Cordialement
    1
    1. Bibi
       
      Merci pour ta réponse jc80 .
      Il faut que je colle ce code dans la description de ma macro c'est bien ça?
      Desolé je suis ultra novice en code.
      Et pour que ça fonctionne il faut que je l'enregistre dans un format qui prend en compte les macros non? Si oui, lequel?
      Merci
      0
      1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453 > Bibi
         
        Bon jour
        en attendant l'ami jc
        1°) clic droit sur le nom d'onglet / sélectionnez "visualiser le code" et coller la macro
        2°) pour prendre en compte les macros: format xlsm (prenant en compte les macros est précisé dans la liste)
        crdlmnt
        0
      2. Bibi > Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Dans le menu affichage (excel 2007 il me semble), à droite, j'ai un onglet macro.
        Je clic sur "enregistrer une macro". Je copie colle le code dans la description de la macro. Et ensuite je reviens dans cette macro et je clic sur "exécuter".
        C'est bien la marche à suivre? Je ne trouve pas d'onglet "visualiser le code"..
        Ensuite, lorsque je clic de nouveau sur la macro, j'ai un message d'erreur : espace pile insuffisant...
        0
  3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    Bonjour

    Private Sub Worksheet_Change(ByVal Target As Range)

    Activesheet.unprotect "xxx"

    If Not Intersect(Target, Range("A:A")) Is Nothing Then
    Target.Offset(0, 1) = Date
    End If

    Activesheet.protect "xxx"

    End Sub

    xxx étant le mot de passe à placer entre guillemets

    crdlmnt

    1
  4. Bibi
     
    Je n'y comprends rien, j'ai des message d'erreur différents à chaque essai..
    Il n'y a aucune fonction qui permette de faire ça, sans passer par une macro?
    Merci d'avance
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jc80 Messages postés 5063 Date d'inscription   Statut Membre Dernière intervention   1 443
     
    Re bonjour

    Comme te l'as dit Vaucluse que je salue
    tu ne t'occupes pas de ta macro
    et d'ailleurs elle sert à quoi ta macro?
    1°) clic droit sur le nom d'onglet de ta feuille / sélectionnez "visualiser le code" et coller le code que je t'aies donné
    Crdlt
    0
  7. jc80 Messages postés 5063 Date d'inscription   Statut Membre Dernière intervention   1 443
     
    ci-dessous un exemple

    tu cliques sur le nom de la feuille ESSAI_DATE et là tu vas voir visualiser le code.
    Code que tu copies et que tu colles dans ta feuille
    https://www.cjoint.com/c/EGDl1RpH1gy
    Cordialement
    0
  8. Bibi
     
    Wow, ok, je pensais que c'était un code pour une macro... désolé pour mes questions débiles, mais je suis vraiment un novice!
    En tout cas ça fonctionne parfaitement, je vous remercie mille fois, ça va me rendre un grand service!
    Cordialement
    0
  9. jc80 Messages postés 5063 Date d'inscription   Statut Membre Dernière intervention   1 443
     
    pas de quoi passe le sujet en résolu
    a+
    0
  10. Bibi
     
    Aie, j'ai une autre question svp.
    Je ne l'avais pas précisé, mais je veux protéger ma feuille pour que les autres utilisateurs ne puissent pas cliquer sur la colonne B et donc ne pas modifier la date manuellement.
    Lorsque je fais ça (protéger ma feuille), et que je remplis ma colonne A, le message suivant apparaît : "erreur définie par l'application ou l'objet".
    Une idée?
    Merci encore d'avance
    0
  11. Bibi
     
    Je précise que je vérouille et masque la colonne B dans "format cellule"
    0
    1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
       
      Sous la ligne de titre de la macro dans le code feuille (soit au début du libellé)

      Activesheet.unprotect

      et juste avant le End sub

      Activesheet.protect
      ceci bien sur si vous protègez sans mot de passe
      crdlmnt
      0
  12. Bibi
     
    Si, je souhaite verouiller et masquer les cellules en B et les protèger par un mot de passe, pour que moi seul puisse modifier les données.
    Merci
    0
    1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
       
      Alors simplement

      Activesheet.unprotect "mot de passe"
      et bien sur
      Activesheet.protect "mot de passe"

      1°) votre mot de passe derrière les codes et entre guillemets
      2°) si vous mettez un mot de passe, ne l'oubliez pas
      3°) pour être complet il faut aussi protéger VBA pour que la lecture du libellé ne soit pas possible:
      ouvrir VBA / Barre d'outil / Onglet outil / Propriètés de >VBA.. / et protection
      crdlmnt
      0
  13. Bibi
     
    Désolé pour cette réponse tardive mais je n'avais plus accès à mon pc.
    J'ai essayé ta solution Vaucluse mais ça ne donne rien..
    En tant que noob, je ne sais pas si j'ai bien fait les choses, mais en tout cas je n'ai rien obtenu.. en rajoutant, Activesheet.unprotect etc etc, la date ne s'inscrit plus..
    0
  14. Bibi
     
    En essayant de nouveau, j'ai obtenu le message : "erreur de compilation : instruction incorrecte à l'extérieur d'une procédure" ..
    Merci encore de votre aide, je suis complètement perdu..
    0
  15. Bibi
     
    Impeccable Vaucluse, ça fonctionne parfaitement!
    Je vous remercie beaucoup pour votre aide et votre efficacité!
    Bonne continuation,
    Cordialement.
    0
  16. Bibi
     
    Une dernière question toutefois svp.
    Si je remplis A1 aujourd'hui (30 juillet 2015), la date du jour est donc renseignée en B1 (30/07/15).
    Parfait.
    Mais si je modifie A1 dans un mois, B1 va-t-il s'actualiser et devenir 30/08/15 ou restera-t-il au 30/07/15 (ce que je souhaite)?
    Merci
    0
  17. Bibi
     
    Merci beaucoup Mike-31, ton code fonctionne également, en espérant que la date en B soit irremplaçable maintenant!
    0
  18. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    si tu as collé ce code et modifié le mot de passe de protection, la date en B ne s'imprimera que si tu saisis une donnée en A et si la cellule contigue en B est vide, tu peux faire des essais

    je remets le code avec la dernière modif

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
    If Target = "" Or Target(1, 2) <> "" Then
    Exit Sub
    Else
    ActiveSheet.Unprotect Password:="mot de passe"
    Target(1, 2) = Date
    ActiveSheet.Protect Password:="mot de passe"
    End If
    End If
    End Sub
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
  19. Bibi
     
    C'est parfait, c'est exactement ce qu'il me fallait, merci beaucoup!
    0
  20. Bibi
     
    J'ai une autre question svp.
    J'aimerais pouvoir copier coller ce tableau dans un autre, vierge mais au même format. En effet, j'aimerais que mon premier tableau me donne les données pour une année (soit 365 données) puis copier coller ces données dans un nouveau tableau qui me donnera les données pour 2 ans (730 données)etc etc.
    Copier les données en colonne A ne pose aucun problème mais excel m'indique alors : erreur d'exécution "13" : incompatibilité de type, puisque les données en B sont vérouillées en donc impossible à copier coller.
    Y a-t-il une solution ou est ce que j'en demande trop?
    Merci
    0
  21. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    erreur d'exécution 13 incompatibilité de type est provoqué par une erreur de déclaration de variable ou erreur de code.
    quel code est en erreur et quelle ligne s'il te plait
    0
  • 1
  • 2