Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Feuille ToDo list

Larkan29

XLDnaute Nouveau
Bonjour,

je souhaiterai utiliser un classeur simple Excel pour gérer ma "ToDo list".
Dans le principe, dans mon classeur ""2DoList-dep.xlsx", j'ai une feuille "To Do List" dans laquelle j'écris par ligne mes actions à faire. J'ai définit 3 niveaux de temps pour faire l'action (Aujourd'hui, Dès que possible, Plustard), et 5 niveaux d'état (A Faire, En Cours, Terminée, Abandonnée et Bloquée).

Ce qui doit se passer :
- Lorsque l'on change le choix d'une case dans C (le niveau de temps d'action), les lignes se rangent de haut en bas dans l'ordre : Aujourd'hui, Dès que possible, Plustard.

- Lorsque que l'on change le choix dans G (l'état), si le champ est "Terminé", la ligne est coupée et collée dans la feuille Terminées pour archive.
Option : Dans la mesure du possible, pour plus de clareté, si les "En Cours" peuvent être rassemblées tout en haut, ça serai mieux.

J'ai cherché quelque chose qui ressemble à ça, mais je n'ai pas trouvé, j'ai également lu pas mal sur le forum pour essayer de le programmer ça en VBA mais, étant débutant, je n'y arrive pas vraiment. Est-ce que c'est difficile à coder ?

Je vais essayer de joindre à ce message, le fichier de départ "2DoList-dep.xlsx" et le fichier du résultat "2DoList-ar.xlsx".
Merci, cordialement,
 

Pièces jointes

  • 2DoList-dep.xlsx
    15.8 KB · Affichages: 15
  • 2DoList-ar.xlsx
    15.1 KB · Affichages: 9
Solution
C
Salut

Il faut sortir de la procédure si archivage fait
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  ' Si pas de modification dans le tableau on sort
  If Intersect(Range("CbPRojets"), Target) Is Nothing Then Exit Sub
  ' Sinon
  If Not Intersect(Range("G:G"), Target) Is Nothing Then
    ' Vérifier si le terme souhaité est présent, sinon on sort
    If Target.Value <> "Terminée" Then Exit Sub
    ' Petit question avant l'archivage
    If MsgBox("Cette tâche est à archiver, voulez-vous le faire ?", _
    vbQuestion + vbYesNo, "ARICHAGE...") = vbNo Then Exit Sub
    ' Si la réponse est oui
    Rows(Target.Row).Copy _
    Destination:=Sheets("Terminées").Range("A" &...

Larkan29

XLDnaute Nouveau
Bonjour BrunoM45,

Merci cette réponse rapide et le fichier qui répond bien à ce que je cherchais !

Seul petit hic : le tri ne se fait qu'après un archivage d'une ligne, pas au changement de valeur de case en colonne C.

Questions :
- n'est-il pas possible de mettre les valeurs des case de niveau de temps d'action à : Aujourd'hui, Dès que possible, Plus tard plutôt que 0 Aujourd'hui, 1 Dès que possible, 2 Plus tard ?

- comment rajouter des lignes vides : j'ai rajouté des lignes d'action pour remplir, arrivé en bas des lignes bleu, pour rajouter des ligne vide j'ai tiré vers le bas le petit triangle bleu du coin inférieur droit de la dernière case de la colonne H. Les valeurs de la case de la colonne C deviennent "Aujourd'hui, Dès que possible, Plus tard", il n'y a plus le 0, 1, 2 et donc lus de tri.

A+
 
C

Compte Supprimé 979

Guest
Bonjour

Seul petit hic : le tri ne se fait qu'après un archivage d'une ligne, pas au changement de valeur de case en colonne C.
Je pensais que c'était à ce moment là que tu voulais un tri, pas très explicite dans ton 1er post
Mais je pense que le mieux est de le faire seulement après changement d'état, sinon tu vas t'y perdre avec ta ligne quand tu en auras plus d'une centaine !?

- n'est-il pas possible de mettre les valeurs des case de niveau de temps d'action à : Aujourd'hui, Dès que possible, Plus tard plutôt que 0 Aujourd'hui, 1 Dès que possible, 2 Plus tard ?
Tu veux un tri dans cet ordre, alors à moins d'ajouter une colonne pour faire le tri correctement, Excel tri par ordre Alphanumérique

Il faut recopier la cellule qui contient la bonne donnée de validation jusqu'en bas et normalement ça passe, perso je n'ai pas ce souci

A+
 

Larkan29

XLDnaute Nouveau
Bonjour et merci,
Larkan29 a dit:
Seul petit hic : le tri ne se fait qu'après un archivage d'une ligne, pas au changement de valeur de case en colonne C.
Je pensais que c'était à ce moment là que tu voulais un tri, pas très explicite dans ton 1er post


Mais je pense que le mieux est de le faire seulement après changement d'état, sinon tu vas t'y perdre avec ta ligne quand tu en auras plus d'une centaine !?
> En fait une ligne peut changer d'état (Plus tard->Aujourd'hui) au bout d'un moment, du moins il faut l'espérer , il peut être alors utile de la ranger dans l'ordre pour la retrouver en haut. Je vais essayer de voir à faire un bouton et d'y relier ton prog de Tri.

A+
 
C

Compte Supprimé 979

Guest
Re,

Effectivement, il te suffit alors d'ajouter ce code à la fin de Worksheet_Change
VB:
  ' En cas de modification de la priorité
  If Not Intersect(Range("C:C"), Target) Is Nothing Then
    ' Trier le tableau
    Call TriTableau
  End If

A+
 

Larkan29

XLDnaute Nouveau
Bonjour,
J'ai rajouté le bout de code à la fin, entre le End IF et le End Sub .
Cela fonctionne lorsque je change la notion de temps, mais lorsque je passe au status Terminé une ligne, il y a une fenêtre de remontée de problème qui me dit : Erreur d'exécution 1004 : La méthode 'Intersect' de l'objet '_Global' a échoué. Lorsque je valide débug, la ligne du If Not Intersect est surlignée en jaune...
 
C

Compte Supprimé 979

Guest
Salut

Il faut sortir de la procédure si archivage fait
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  ' Si pas de modification dans le tableau on sort
  If Intersect(Range("CbPRojets"), Target) Is Nothing Then Exit Sub
  ' Sinon
  If Not Intersect(Range("G:G"), Target) Is Nothing Then
    ' Vérifier si le terme souhaité est présent, sinon on sort
    If Target.Value <> "Terminée" Then Exit Sub
    ' Petit question avant l'archivage
    If MsgBox("Cette tâche est à archiver, voulez-vous le faire ?", _
    vbQuestion + vbYesNo, "ARICHAGE...") = vbNo Then Exit Sub
    ' Si la réponse est oui
    Rows(Target.Row).Copy _
    Destination:=Sheets("Terminées").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    Rows(Target.Row).Delete Shift:=xlUp
    ' Trier le tableau
    Call TriTableau
    ' Pas besoin de continuer, on sort
    Exit Sub
  End If
  ' En cas de modification de la priorité
  If Not Intersect(Range("C:C"), Target) Is Nothing Then
    ' Trier le tableau
    Call TriTableau
  End If
End Sub

A+
 

Larkan29

XLDnaute Nouveau
Bonjour BrunoM45,

Je ré-active ce sujet car je voudrai modifier la liste déroulante de choix de la colonne G, pour lui ajouter une valeur, mais je n'arrive pas à trouver où est cette liste dans le code Vba ou sur la feuille.(peut-être que ce tableau est caché ?)
Cette liste était :

Je voudrai également faire que Abandonnée soit archivé (comme quand c'est Terminé).

Si tu es toujours sur ce forum ?
Merci
 

Larkan29

XLDnaute Nouveau
Bonjour Phil69970,

alors là....bravo !
J'ai passé qques heures à triturer le fichier pour trouver.
Comment s'appelle cette méthode ?
Je n'ai trouvé des traces de ces valeurs que dans une fenêtre appelée gestionnaire de nom :

Cdt,
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…