Excel-MAJ date si modif cellule de la ligne

Résolu
Nicoco -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, voila j'ai un tableau de suivi de projets avec une ligne correspondant à 1 projet et une trentaine de colonnes qui correspondent à différents aspects des projets.

J'essaye de créer une colonne date de Mise à jour qui m'indiquerait quand des infos sur un projet ont été ajoutés (bcp de projets, bcp de monde qui gèrent ces projets du coup c un peu compliqué à suivre).

Par exemple, j'ai 40 lignes de projets et 30 colonnes correspondant à un aspect, si je modifie un aspect de la ligne 13 ça me mettra la date dans la cellule de MAJ de la ligne 13 à jours , etc, etc...

Pour l'instant la date de modif se fait manuellement et donc, y a des oublis et je souhaiterais le faire automatiquement. J'ai trouvé des réponse dans les forum quand il s'agissait de MAJ la date si une feuille excel était modifiée ou une cellule, mais pas une ligne entière.

Est-ce que quelqu'un aurait une idée?

Merci d'avance.

ps : je suis un peu une buse pour les matrices sous excel, je me suis arrêté au tableau croisé dynamique... mais même pas peur si faut en faire une!
Configuration: Windows XP Internet Explorer 7.0

14 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    pour les matrices sous excel, ... mais même pas peur si faut en faire une!

    C'est plutôt une macro événementielle que je te proposerai (mode d'emploi éventuel) à mettre dans la feuille concernée.
    Private Sub Worksheet_Change(ByVal sel As Range)
        Application.EnableEvents = False
        Cells(sel.Row, "AF").Value = Date + Time
        Application.EnableEvents = True
    End Sub
    

    J'ai mis la date en colonne AF, à toi de modifier pour adapter à la tienne.
    8
    1. @lex
       
      Bonjour,
      Merci pour votre réponse rapide, mais j'arrive pas à faire marcher la macro. C'est quoi le nom du fichier dans cette macro? et ça représente koi "sel.row"? ou "sel As Range"? Merci encore de me répondre
      0
      1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744 > @lex
         
        bonjour

        C'est quoi le nom du fichier dans cette macro?

        Le nom du fichier n'a rien à voir dans cette macro.

        ça représente koi "sel.row"?

        La ligne qui vient d'être modifiée.
            Cells(sel.Row, "A").Value = Date + Time & Application.UserName

        avec cette instruction tu mets en colonne A la date, l'heure et le nom de l'auteur, mais il faut bien laisser les autres lignes pour éviter que la macro boucle.
        0
    2. Petit
       
      Bonjour,
      Je rencontre un souci avec cette macro. Elle ne permet plus l'annulation (ctrl Z).
      Pouvez-vous m'aider svp ?
      Merci
      0
    3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonjour,

      Elle ne permet plus l'annulation (ctrl Z)
      Comme toutes les macros sauf si la macro le gère et comme le principe de cette macro c'est d'enregistrer la dernière modification de la ligne, si tu annules l'enregistrement de la macro, autant ne pas mettre la macro !
      0
    4. ER
       
      bonjour,
      merci pour cette macro qui fonctionne parfaitement pour l'ajout d'une date de modif dès qu'une cellule de la ligne est modifiée !
      ER
      0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Tu peux aussi masquer la colonne date de mise à jour et l'afficher seulement lorsque tu en as l'utilité.
    1
  3. Nicoco
     
    Nickel, ça marche!

    merci bien gbinform, ça va me faire gagner pas mal de temps au boulot.
    0
  4. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Nickel, ça marche!

    Merci de le faire savoir car c'est notre seul gagne pain !

    Pour l'instant la date de modif se fait manuellement

    Avec cette macro si quelqu'un continue de le faire sa date sera écrasée.
    0
    1. Laurence de Mtp
       
      Bonjour !
      Et merci ! en tant qu’utilisatrice qui ne fait que lire les questions que d'autres se sont posées avant moi, ça aide !
      J'ai néanmoins un souci avec la macro proposée : quand je veux l'exécuter, VBA me dit "erreur de compilation End Sub attendu" ...
      Une idée ?
      0
    2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonjour,

      Si tu regardes la macro
      End Sub
      en fait partie.
      Si tu as cette erreur c'est que tu l'as mal recopiée.
      Si tu veux qu'on la rectifie, il faut nous mettre ta version.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nicoco
     
    Ok , merci de le préciser, je leur ferais un petit mail qui va bien pour pas qu'ils écrasent les dates.
    0
  7. Nicoco
     
    Bon, en fait, j'ai un petit soucis sur la macro. Je l'avais testé sur mon pc perso et ça marchait parfaitement, mais sur le fichier du boulot ça plante. En fait, le problème viendrait du fait que j'ai déjà une macro et que du coup ça doit faire conflit dans les lignes de code (en gros il me dit 'erreur de compilation: Nom ambigu detecté :Worksheet_Change").

    J'ai ça dans ma feuille de commande :

    Private Sub Worksheet_Change(ByVal sel As Range)
    Application.EnableEvents = False
    Cells(sel.Row, "B").Value = Date + Time
    Application.EnableEvents = True
    End Sub

    Private Sub Worksheet_Change(ByVal sel As Range)
    ligne = Target.Row
    colonne = A
    If Target.Value = 0 Then Target.Interior.ColorIndex = 2
    If Target.Value = 1 Then Target.Interior.ColorIndex = 34
    If Target.Value = 2 Then Target.Interior.ColorIndex = 35
    If Target.Value = 3 Then Target.Interior.ColorIndex = 36
    If Target.Value = 4 Then Target.Interior.ColorIndex = 40
    If Target.Value = 5 Then Target.Interior.ColorIndex = 4
    If Target.Value = 6 Then Target.Interior.ColorIndex = 3
    If Target.Value = 7 Then Target.Interior.ColorIndex = 3
    End Sub


    J'ai essayé plusieur combinaison mais ça ne marche pas. Si tu as une idée de la manip que je dois faire ?

    Merci en tout cas.
    0
  8. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Bien sûr tu ne peux avoir qu'une seule procédure pour un nom mais ainsi cela doit fonctionner :
    Private Sub Worksheet_Change(ByVal Target As Range)
    ' mise à jour date modification
        Application.EnableEvents = False
        Cells(sel.Row, "B").Value = Date + Time
        Application.EnableEvents = True
    ' fonction présente
    ligne = Target.Row
    colonne = A
    If Target.Value = 0 Then Target.Interior.ColorIndex = 2
    If Target.Value = 1 Then Target.Interior.ColorIndex = 34
    If Target.Value = 2 Then Target.Interior.ColorIndex = 35
    If Target.Value = 3 Then Target.Interior.ColorIndex = 36
    If Target.Value = 4 Then Target.Interior.ColorIndex = 40
    If Target.Value = 5 Then Target.Interior.ColorIndex = 4
    If Target.Value = 6 Then Target.Interior.ColorIndex = 3
    If Target.Value = 7 Then Target.Interior.ColorIndex = 3
    End Sub 
    0
  9. Nicoco
     
    Salut,

    j'ai fais un copier coller de la procédure mais ça marche pas non plus, il me met qu'il y a un probleme et me demande si je veux mettre "fin" ou le débogage".

    J'ai réessayé tout à l'heure de bidouiller un peu mais sans succès.

    Si tu as une autre idée, merci!
    0
  10. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Effectivement j'avais regardé en coup de vent et sans tester (honteux)
    Private Sub Worksheet_Change(ByVal Target As Range)
    ' mise à jour date modification
        Application.EnableEvents = False
        Cells(Target.Row, "B").Value = Date + Time
        Application.EnableEvents = True
    ' fonction présente
    If Target.Value = 0 Then Target.Interior.ColorIndex = 2
    If Target.Value = 1 Then Target.Interior.ColorIndex = 34
    If Target.Value = 2 Then Target.Interior.ColorIndex = 35
    If Target.Value = 3 Then Target.Interior.ColorIndex = 36
    If Target.Value = 4 Then Target.Interior.ColorIndex = 40
    If Target.Value = 5 Then Target.Interior.ColorIndex = 4
    If Target.Value = 6 Then Target.Interior.ColorIndex = 3
    If Target.Value = 7 Then Target.Interior.ColorIndex = 3
    End Sub
    
    0
  11. Nicoco
     
    Salut,

    pas de soucis, c'est déjà bien sympa de m'aider.

    Ca marche maintenant, ça change bien la date et les couleurs des cellules selon que je mets 0 à 7 (par contre du coup le changement de couleur ne se limite plus à la colonne A, mais c'est pas grave vu que c la seul colonne destinée à recevoir ces chiffres).

    En tout cas bien merci bien, ça m'aide déjà pour mes suivis!!

    Bonne journée
    0
  12. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    par contre du coup le changement de couleur ne se limite plus à la colonne A

    Avant non plus, si j'ai enlevé cette ligne c'est qu'elle ne servait à rien. Si tu veux limiter à la colonne A il faut que l'instruction fonctionne et faisant comme ceci par exemple
    Private Sub Worksheet_Change(ByVal Target As Range)
    ' mise à jour date modification
        Application.EnableEvents = False
        Cells(Target.Row, "B").Value = Date + Time
        Application.EnableEvents = True
    ' fonction présente
    If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
        If Target.Value = 0 Then Target.Interior.ColorIndex = 2
        If Target.Value = 1 Then Target.Interior.ColorIndex = 34
        If Target.Value = 2 Then Target.Interior.ColorIndex = 35
        If Target.Value = 3 Then Target.Interior.ColorIndex = 36
        If Target.Value = 4 Then Target.Interior.ColorIndex = 40
        If Target.Value = 5 Then Target.Interior.ColorIndex = 4
        If Target.Value = 6 Then Target.Interior.ColorIndex = 3
        If Target.Value = 7 Then Target.Interior.ColorIndex = 3
    End Sub
    

    Ainsi les couleurs ne sont traitées que si tu saisis en colonne A
    0
  13. Nicoco
     
    ok, j'y comprend un peu mieux, du coup je pourrais manipuler un peu la procédure si je veux modifier certaines choses.

    En tout cas merci encore pour avoir passé du temps sur mon pb!
    A+
    0
  14. ga791333
     
    Bonjour,
    J'essaie d'afficher la date et heure de modification d'une cellule.
    Voici mon code:

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim aRow As Integer
    aRow = Target.Row
    CurrentSheet.Cells(aRow, "G").Value = Date
    CurrentSheet.Cells(aRow, "H").Value = Time

    End Sub

    Mais Excel plante au nivau de l'heure parce que ca continue à raffraichir le nombre de seconde en boucle pendant 2 minutes puis Excel plante.

    Est ce la méthode Time ? ou est ce qu'il me manque une instruction ?

    Merci.
    0
  15. ga791333
     
    Merci j'ai trouvé la réponse a mon problème
    0