Afficher date de modification et suppression au bout d'1 sem
Bonjour à tous,
Toujours dans le soucis de faire un tableau Excel pour les notes de travail de mes élèves, je souhaiterais faire la chose suivante.
A chaque fois qu'un de mes élèves fait une bêtise, je clique sur la cellule associée qui me propose un menu déroulant et je sélectionne la bêtise en question, ce qui retire automatiquement des points aux élèves.
Cependant, au bout d'une semaine, s'ils n'ont pas eu de points en moins entre temps, le deal prévoit qu'ils récupèrent les derniers points perdus. Mais attention, ils ne peuvent pas récupérer tous leurs points ainsi (Juste les derniers, sinon, c'est trop simple).
Aussi, j'aimerais pouvoir savoir ce qu'ils ont fait à quel moment.
Ainsi, ce que j'ai en tête, c'est que pour toutes les cellules visibles hormis les noms et les notes des élèves (Les cellules bleues, orange et grises visibles dans l'image ci-dessous), à chaque modification, un commentaire apparaisse, avec la date et l'heure de la modification et le contenu de la modification.
Pour cela, Elhevan m'avait proposé la macro suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If Mid(.Address(1, 1, xlR1C1), 2, InStr(.Address(1, 1, xlR1C1), "C") - 2) > 35 Then Exit Sub
If Right(.Address(1, 1, xlR1C1), Len(.Address(1, 1, xlR1C1)) - InStr(.Address(1, 1, xlR1C1), "C")) < 7 Then Exit Sub
If Right(.Address(1, 1, xlR1C1), Len(.Address(1, 1, xlR1C1)) - InStr(.Address(1, 1, xlR1C1), "C")) > 163 Then Exit Sub
If IsEmpty(Target) Then Exit Sub
Dim strNewText$, strCommentOld$, strCommentNew$
strNewText = .Text
If Not .Comment Is Nothing Then
strCommentOld = .Comment.Text & Chr(10) & Chr(10)
Else
strCommentOld = ""
End If
On Error Resume Next
.Comment.Delete
Err.Clear
.AddComment
.Comment.Visible = False
.Comment.Text Text:=strCommentOld & _
Format(VBA.Now, "DD/MM/YYYY à hh:MM ") & Chr(10) & strNewText
.Comment.Shape.TextFrame.AutoSize = True
End With
End SubMais en plus de ça, j'aimerais que chaque cellule bleue ou orange (Pas les grises, bref, comme dans l'image ci-dessous) s'efface au bout d'une semaine si la cellule de droite ne contient pas de commentaire.
En gros, ça donnerait la chose suivante : Si la cellule de droite ne contient pas de commentaire, alors au bout d'une semaine, la cellule est effacée.
Or, j'ai l'impression que pour ce faire, il faudrait à nouveau utiliser une macro, cependant, je ne m'y connais pas assez en macros pour faire ce que je voudrais, ni pour en faire fonctionner deux à la fois.
Merci d'avance pour l'aide que vous pouvez m'apporter.
bonjour
je te propose hyper simple
un tableau de saisie et un TCD
tu peux améliorer :
- en ajoutant la colonne "classe" si tu as plusieurs classes
- en mettant une liste déroulante dans la colonne "constat"
note que "mettre sous forme de tableau" fiabilise grandement les saisies
garder cette même unique feuille durant des années !
si tu veux, tu peux chaque mois ou semaine ou trimestre ou.... filtrer selon Pointage >= 1 et supprimer manuellement les lignes choisies (donc > 7 jours). Ne pas faire une macro pour si peu !
pas de VBA, ni même aucun calcul pour tout ça
Euh, je n'ai pas très bien compris comment ton système fonctionne ^^
Bon, après, je préférerais quelque chose d'automatique à quelque chose de manuel, mais le manuel ne me dérange pas ^^
Après, si tu arrives à faire en sorte qu'une cellule affiche la date de modification d'une autre cellule, ça m'arrangerait, après ça, il ne me resterait plus qu'à mettre en forme la cellule pour qu'elle prenne une couleur passé une semaine et je supprime manuellement les cellules de couleur ^^
Je me permets de faire remonter ce fil qui n'a toujours pas obtenu de réponse ^^
re
explication :
une zone de saisie (nom, date, observation, points). Tu ajoutes une ligne pour chaque observation
une colonne "de pointage" qui affiche toute seule 1 quand la date > 7 jours
un TCD pour faire une vue de synthèse des points, en tenant compte tout seul de la colonne depointage (donc du délai de 7 jours)
si tu veux tu peux supprimer les lignes >7 jours quand tu en as le temps, toutes les semaines ou 1 fois/mois ou 1/mois ou jamais !. il faut simplement trier ou filtrer selon "pointage".
voir "mettre sous forme de tableau" en menu n°1 d'Excel
ça facilite la saisie et la mise à jour du TCD. Ce sont des fonctions fondamentales d'Excel, bien avant l'addition !
Le problème, c'est qu'en classe, je n'ai le temps que de modifier une cellule, pas d'ajouter une date dans la cellule d'à côté.
Comment je fais pour faire en sorte qu'une cellule affiche la date de modification d'une autre cellule, du coup ?
re
je ferais simple : à chaque fois qu'il faut noter, tu cliques dans une nouvelle ligne, en colonne "nom élève", tu mets le nom, et tu mets les points. Laisse DATE vide.
le soir (ou tous les 2 ou 3 jours), tu remplis les dates manquantes. Même avec des élèves indisciplinés (plus de 100 saisies/jour
nos maîtres et maîtresses tenaient un papier des "bons points" avec la liste des élèves et un trait à chaque bon point. Rayer les traits quand remise d'une image. C'était simple aussi.
Oui, enfin, à la base, je viens ici pour automatiser le truc...
Si ta réponse consiste à dire "Pas besoin de macro pour automatiser, tu peux te casser la tête tous les soirs en rentrant chez toi comme tu le fais déjà", j'avoue que c'est pas vraiment la réponse que j'attends...
Bonjour,
je ne comprends pas. Pas de prise de tête le soir avec le système des bonpoints...
Si la cellule de droite ne contient pas de commentaire, alors au bout d'une semaine, la cellule est effacée.
Ca veut dire que les cellules marchent par paire ? F2 avec G2 etc ?
Si tu pouvais donner un exemple complet, étape pas étapes, de comment tu procèdes et les cellules utilisées.
alors au bout d'une semaine...
Il faut bien comprendre 7 jours plus tard, et non RAZ tous les lundi ?
eric
Oui, Eric, ça n'est pas une remise à zéro tous les lundis ^^
Alors en gros, voilà deux exemples concrets de deux solutions possibles.
Cas 1 :
Jour 1 - Je sélectionne F2 qui est vide, le menu déroulant s'affiche, je sélectionne la bêtise faite par l'élève et (Ca, c'est déjà fait) ça lui retire des points sur sa note, un commentaire apparaît sur la cellule et affiche le contenu de la modification et la date de modification (Ca aussi, c'est déjà fait avec la macro que j'ai postée).
Jour 2 - Il refait une connerie, je refais pareil sur G2.
Jour 8 - Rien ne se passe, car la cellule de droite (G2) contenant un commentaire, la cellule F2 ne peut pas s'effacer.
Jour 9 - La cellule G2 s'efface et l'élève retrouve ses points perdus, car la cellule H2 ne contient pas de commentaire, mais la cellule F2 ne s'efface toujours pas car, même si la cellule G2 est vide, elle garde son commentaire indiquant la date à laquelle elle a été modifiée.
Cas 2 :
Jour 1 - Je sélectionne F2 qui est vide, le menu déroulant s'affiche, je sélectionne la bêtise faite par l'élève et (Ca, c'est déjà fait) ça lui retire des points sur sa note, un commentaire apparaît sur la cellule et affiche le contenu de la modification et la date de modification (Ca aussi, c'est déjà fait avec la macro que j'ai postée). Automatiquement, la cellule G2 affiche la date de modification de la cellule F2.
Sur ça, je mets un format conditionnel qui fait que la cellule G2 devient noire lorsque la date qu'elle affiche remonte à une semaine ou plus.
Jour 2 - Il refait une connerie, je refais pareil sur H2, et I2 affiche la date de modification de H2.
Jour 8 - La cellule G2 est devenue noire, indiquant que ça fait une semaine que la cellule F2 a été modifiée. Cependant, je n'efface pas la cellule, car la cellule H2 est remplie.
Jour 9 - La cellule I2 est devenue noire, m'indiquant que je dois effacer la cellule H2 qui date d'une semaine et qui est la dernière bêtise en date de l'élève.
Bonjour,
tu avais oté la macro, ça n'aidait à la compréhension sans les commentaires.
J'ai voulu jeter un oeil mais même avec la macro pas de commentaire en F2.
Ejecté par ces lignes :
If Mid(.Address(1, 1, xlR1C1), 2, InStr(.Address(1, 1, xlR1C1), "C") - 2) > 35 Then Exit Sub
If Right(.Address(1, 1, xlR1C1), Len(.Address(1, 1, xlR1C1)) - InStr(.Address(1, 1, xlR1C1), "C")) < 7 Then Exit Sub
If Right(.Address(1, 1, xlR1C1), Len(.Address(1, 1, xlR1C1)) - InStr(.Address(1, 1, xlR1C1), "C")) > 163 Then Exit SubTu cherches à y calculer quoi au juste ?
Si c'est ligne et colonne tu as Target.row et Target.column
Tu testes <7 et F est la colonne 6...
Je peux remplacer par if target.column < 6 then exit sub ou tu avais prévu un autre fonctionnement pour cette colonne ? Parce que sans commentaires...
eric
Euh, oui, désolé, j'avais retiré la macro car suite à l'ajout de la seconde macro pour effacer les cellules, ça ne marchait plus.
Bref, oui, si tu penses que ça peut marcher comme ça, fais donc ^^
Un essai car j'ai un peu de mal à te suivre, sans doute la fatigue due à l'heure.
D'abords tu parles de gris où il ne faut rien faire. J'ai du mal à comprendre pourquoi 2 cellules sur 4 mais bon, j'ai fait. Gris récupérés sur H2:H3, adapter si ça change.
Mais ensuite tu parles de MFC noire : rien vu (?!?) De toute façon les dates suffisent non ?
Sinon donne plutôt les règles de la MFC, récupérer la couleur MFC n'est pas forcément le plus simple.
Réalisé :
je cherche la dernière cellule saisie, si non grise et et si commentaire et date <7 jours je supprime saisie et commentaire.
Pour l'instant je me contente de sélectionner les cellules pour te faciliter les tests.
Si ok supprime :
c.Select
MsgBox "suivant"et active les 2 lignes suivantes pour tester en réel.
La macro se lancera à chaque ouverture.
Tu dis...
eric
Les cellules grises ne doivent pas s'effacer, car ce sont les travaux supplémentaires qui ont été faits, donc, je ne peux pas empêcher un élève de faire un travail supplémentaire qui a déjà été fait.
Concernant la Mise en Forme Conditionnelle, c'est une possibilité parmi les deux solutions que j'ai énoncées, je ne l'ai pas faite, mais on peut faire comme ça ^^
Du coup, je vais tester si ça fonctionne et je te tiens au courant dans une semaine ! xD
En ayant légèrement modifié la macro pour supprimer les commentaires datant d'un jour au lieu de sept, je remarque que des cellules datant d'il y a plus d'un jour et dont la cellule de droite ne contient pas de commentaire ne se sont pas effacées.
J'ai tenté de comprendre la macro pour éventuellement résoudre le problème moi-même, mais je n'arrive pas à comprendre d'où le problème vient.
Du coup, voici le tableur en pièce jointe si vous voulez voir ^^
Bonjour,
Déjà as-tu intégralement les explications mises à mon post précédent ?
Ensuite avec < 1 seul ceux du jour pourraient être concernés.
eric
Oui, j'ai lu intégralement les explications, pourquoi, y a-t-il une chose que je n'ai pas comprise ?
Je ne sais pas...
Tiens-tu compte de ça :
Pour l'instant je me contente de sélectionner les cellules pour te faciliter les tests.
Si ok supprime :
c.Select
MsgBox "suivant"
et active les 2 lignes suivantes pour tester en réel.
?
Euh, j'avoue que je n'ai pas très bien saisi ce passage là ^^
pour l'instant la macro te sélectionne juste les cellules concernées pour te les montrer et que tu puisses contrôler que c'est ok.
Après te l'avoir sélectionnée tu as une boite de dialogue pour afficher la suivante.
Quand tout tes tests sont terminés tu supprimes les 2 lignes de code indiquées, et tu actives les 2 suivantes en enlevant l'apostrophe du début. Là il videra les cellules concernées directement.
eric