Intégration de formule automatique si vide

neal

XLDnaute Junior
Bonjour à tous,
je me suis créé une petite TODO LIST sous excel avec une macro pour faire un tri automatique.
le tri automatique est basé sur les colonnes C et D : si on ajoute une date, alors la macro se lance.

Dans le processus :
1. je renseigne un projet
2. Je renseigne une date de début
3. je renseigne une dead-line
4. la macro se lance automatiquement
5. Etc...

je rencontre 2 problèmes :

  1. La colonne F contient des formules que je dois remplir manuellement. Je ne sais pas comment faire pour l'intégrer à la macro, après le tri automatique, puisque je ne sais pas quelle est la ligne concernée.
  2. Les cellules des colonnes E et F ont des mises en forme conditionnelles. Comment faire pour que la macro les prennent en compte et les ajoutent à la nouvelle ligne que j'ai créé?

Merci d'avance pour votre aide.

PS: Mon fichier est en pièce jointe. Et voici le code de ma macro actuelle :

Private Sub Worksheet_change(ByVal target As Range)
If target.Column = 3 Or target.Column = 4 Then
Rowfin = Range("C65536").End(xlUp).Row + 1
Range(Range("a2"), Range("g" & Rowfin)).Select
Selection.Sort Key1:=Range("C2"), Order1:=xlAscending
Range(Range("a2"), Range("g" & Rowfin)).Select
Selection.Sort Key1:=Range("D2"), Order1:=xlAscending
With ActiveWorkbook.Worksheets("TO DO LIST").Sort
.SortMethod = xlPinYin
.Apply
End With
End If
End Sub
 

Pièces jointes

  • TO DO LIST ED.xls
    53 KB · Affichages: 33
  • TO DO LIST ED.xls
    53 KB · Affichages: 32
  • TO DO LIST ED.xls
    53 KB · Affichages: 31

Paf

XLDnaute Barbatruc
Re : Intégration de formule automatique si vide

Bonjour

Pour le point 1, le code de la Sub Worksheet_change modifié. J'ai modifié le code de tri (je n'aurais peut-être pas dû.
Code:
Private Sub Worksheet_change(ByVal target As Range)

 If target.Column = 3 Or target.Column = 4 Then
    Rowfin = Range("C65536").End(xlUp).Row + 1
    ' mise à jour formule en colonne F (comme si on tirait la formule du dessus)
   Range("F" & target.Row - 1).AutoFill Destination:=Range("F" & target.Row - 1 & ":F" & target.Row), Type:=xlFillDefault

    'modification du tri : une seule passe tri selon colonne C puis colonne D
    Range("A2:G" & Rowfin).Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("D2") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
 End If
End Sub

A+
 

neal

XLDnaute Junior
Re : Intégration de formule automatique si vide

Merci Paf ! Le code marche :)

Entre temps, mon "besoin" s'est légèrement complexifié ...
En fait je dois commencer par trier la colonne E pour que les tâches en statut Fermé apparaissent en première. Une fois que c'est fait, je dois chercher la première ligne de la liste dont la valeur de la cellule en colonne E n'est plus Fermé.
Et là, je tri cette seconde zone.
Je ne sais pas comment trouver cette "première ligne sans Fermé".

J'ai décris les étapes ci-dessous, je serais peut être plus clair :

1. Tri sur la colonne E : Fermé, En cours, Ouverte
2. Sélection de la zone des tâches fermés (donc des X premières lignes) : tri sur la colonne D (fin réelle) du plus vieux au plus récent.
3. Sélection du reste : tri sur la colonne C (dead line) du plus vieux au plus récent.
4. Sur toute la colonne F : s’il y a une ligne sur laquelle il n’y a pas de formule dans la cellule de la colonne F, alors insérer la même formule que les autres cellules de la colonne F
5. Sur toute la colonne F : Mêmes mises en forme conditionnelle sur toutes les cellules (tant qu’une ligne est renseignée)
6. Sur toute la colonne E : Mêmes mises en forme conditionnelle sur toutes les cellules (tant qu’une ligne est renseignée)

--> La macro se déclenche automatiquement lorsqu’il y a une modification dans une des colonnes suivantes : C, D et E.
 

Paf

XLDnaute Barbatruc
Re : Intégration de formule automatique si vide

Re
si j'ai bien tout compris, voir PJ

en utilisant les listes (excel 2003) ou tableaux (excel >=2007), le fait de rajouter une ligne en fin de liste (ou tableau) conserve la mise en forme conditionnelle et les formules. ce serait donc un soucis de moins.

L'utilisation des listes personnalisées permet de faire facilement un tri affichant Fermé en premier.

L'utilisation de liste de validation pour la colonne E permet d'éviter des erreurs de saisie . (un affichage par formule aurait été encore mieux, mais je sais pas comment on passe de ouverte à encours...)

vous dites

A+
 

Pièces jointes

  • bclement TO DO LIST ED.xls
    55 KB · Affichages: 26
Dernière édition:

neal

XLDnaute Junior
Re : Intégration de formule automatique si vide

Toutes mes excuses, j'étais persuadé que ma réponse était parti ... Je précisais que j'allais ouvrir un nouveau post puisque ma demande a changé.
Je vous remercie sincèrement pour votre solution, mais le problème c'est que je suis obligé de passer uniquement par une macro automatique pour que les futurs utilisateurs ne puissent rien modifier.
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 917
Membres
101 839
dernier inscrit
laurentEstrées