• Initiateur de la discussion Initiateur de la discussion Larkan29
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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" &...
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+
 
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

- 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.
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+
 
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+
 
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+
 
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...
 
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+
 
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 :
1616684748789.png

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

Si tu es toujours sur ce forum ?
Merci
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
742
Réponses
3
Affichages
386
Retour