Trouver la première ligne différente après un tri puis retrier sur la zone réduite

neal

XLDnaute Junior
Bonjour,
voici les différentes étapes de la macro de mon fichier :

1. Tri personnalisé 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.


La macro que j'ai créé (avec l'aide d'un membre de ce forum, avec mes bidouillages derrière) me renvoie l'erreur suivante :
Erreur d'exécution '1004' : Impossible de lire la propriété Sort de la classe Range.

Qu'est ce qui ne marche pas ??
Merci d'avance pour votre réponse
 

Pièces jointes

  • TO DO LIST ED.xls
    56 KB · Affichages: 33
  • TO DO LIST ED.xls
    56 KB · Affichages: 32
  • TO DO LIST ED.xls
    56 KB · Affichages: 30

neal

XLDnaute Junior
Re : Trouver la première ligne différente après un tri puis retrier sur la zone rédui

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.
 

Paf

XLDnaute Barbatruc
Re : Trouver la première ligne différente après un tri puis retrier sur la zone rédui

Re,

la partie tri revue (à la mode excel 2003) qui a priori répond au souhait
Code:
    Rowfin = Range("C65536").End(xlUp).Row

    Range("A1:G" & Rowfin).Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=6, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    NbFermé = WorksheetFunction.CountIf(Range("E:E"), "Fermé")
    
    Range("A1:G" & NbFermé + 1).Sort Key1:=Range("E2"), Order1:=xlAscending, Key2:=Range("D2") _
        , Order2:=xlDescending, Header:=xlGuess, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
        
    Range("A" & NbFermé + 2 & ":G" & Rowfin).Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
         Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

Bonne suite
 

Staple1600

XLDnaute Barbatruc

neal

XLDnaute Junior
Re : Trouver la première ligne différente après un tri puis retrier sur la zone rédui

Merci beaucoup Paf ! Je n'avais pas du tout pensé à compter le nombre de "Fermé" ! La Macro marche à merveille :)
Est ce que je peux me permettre d'abuser une dernière fois ?

  • Comment faire pour que quelque soit le nombre de lignes, les cellules des colonnes E et F aient toujours la mise en forme conditionnelle ?

  • Comment faire pour que quelque soit le nombre de lignes, les cellules de la colonne F aient toujours la formule ?

Merci d'avance !

PS : je te salue Staple1600 ! :)
 

Paf

XLDnaute Barbatruc
Re : Trouver la première ligne différente après un tri puis retrier sur la zone rédui

Re bonjour

l'utilisation de liste (ou tableau) solutionnait simplement le problème.

pour les formules de la colonne F le code proposé dans l'autre discussion et utilisé dans le classeur joint au post #1 ne donne-t-il plus satisfaction ? ce code 'copie' formule et mise en forme.

[p.m. Range("F" & target.Row - 1).AutoFill Destination:=Range("F" & target.Row - 1 & ":F" & target.Row), Type:=xlFillDefault ]

sinon pour la mise en forme de la colonne E, essayer ce code adapté de l'enregistreur de macro
Code:
    With Range("E" & target.Row)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""Fermé"""
        .FormatConditions(1).Interior.ColorIndex = 10
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""Ouverte"""
        .FormatConditions(2).Interior.ColorIndex = 44
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""En cours"""
        .FormatConditions(3).Interior.ColorIndex = 6
    End With

bonne suite
 

Discussions similaires

Réponses
36
Affichages
2 K

Statistiques des forums

Discussions
311 723
Messages
2 081 932
Membres
101 844
dernier inscrit
pktla