Suppression lignes tous les mois

Bonjour

Mon fichier devient de plus en plus lourd alors j'aimerai l'alléger en supprimant chaque mois toutes lignes qu'ont rempli les techniciens ( tous les onglets sauf "indicateur","demandes" et "liste") est-il possible de le faire via une macro ?

Merci d'avance pour votre aide

17gmao-di.xlsm (345.00 Ko)

Cordialement

Bonjour Qassim, bonjour le forum,

Quel est le critère qui permet de déterminer qu'une ligne a été remplie ?!...

Bonjour ThauThème

Le critère qui permet de déterminer qu'une ligne a été remplie est : la colonne "temps réel" lorsque le temps réel est remplie la ligne est complétée

Merci de votre aide

Re,

Je n'avais pas regardé le code de ton fichier dans mon premier post. Il s'avère que le remplissage se fait à l'activation des onglets et je ne me sens pas en mesure de le modifier pour te proposer un code cohérent avec ta demande. Désolé, je passe la main...

Pas de soucis , merci de l’intérêt porté a ce post

Bonjour,

si je supprime ces lignes dans les onglets des techniciens sans toucher à l'onglet demandes, rien n'ira plus vite ! car ce sera un filtrage supplémentaire par la date ...

si tu veux aller plus vite, alors archive une partie des demandes dans un autre fichier

par ailleurs, j'ai vu que ton onglet demandes avait plus d'un million de lignes !! j'ai tenté de le réduire en recréant l'onglet, je pense que cela améliore aussi un poil le temps de réponse

mais sinon la raie solution est d'épurer en archivant ton onglet demandes

edit : fichier supprimé au profit des suivants

Mon onglet demandes est déjà archivé dans un autre fichier...

Donc pas de solution malheureusement !

La suppression des lignes dans les onglets des techniciens, dans la mesure où elle est réactualisée à chaque activation de l'onglet, ne prendra pas moins de temps.

même si nous les supprimons définitivement ? ex : tous les 3 mois chaque onglet des techniciens est remis à 0 ? oublions la rapidité mais plutôt pour que les techniciens n'aient pas a redesendre tout en bas à chaque fois

D'abord, les onglets des techniciens ne sont qu'un extrait de l'onglet des demandes; c'est donc dans l'onglet demandes qu'il faut agir et supprimer les lignes soldées.

Ensuite, après réflexion, on pourrait ajouter dans la macro

Application.ScreenUpdating = False
   ' Faire plein de choses qui affectent le contenu des cellules
Application.ScreenUpdating = True

edit : je viens de faire le test, cela ne réduit pas sensiblement le temps !

Très bien et donc supprimer depuis l'onglet demandes n'est pas envisageable ?

Bon, j'avais une partie du code, mais pas la partie extraction vers les onglets techniciens.

Laisse moi un peu de temps, je vais reprendre la macro sous l'angle "filtre avancé", je suis presque sûr que ce sera plus rapide.

On pourra introduire de nouveaux critères comme celui que tu proposes (ancienneté).

J'ai refait la macro d'extraction à ma sauce, c'est beaucoup beaucoup plus rapide.

Très bien et donc supprimer depuis l'onglet demandes n'est pas envisageable ?

Si, avec cette nouvelle macro.

Et seules les demandes sans temps réel s'affichent.

Il faudra refaire les zones d'impression. Et vérifie STP les fonctionnalités.

J'aurais bien aimé savoir qui avait fait cette partie de macro !

edit : fichier supprimé au profit des suivants

Petite évolution de la première macro pour effacer les lignes colorées inutiles et retrouver les listes déroulantes y compris sur une ligne supplémentaire.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim der As Long

    Select Case Sh.Name
        Case "Demandes", "Listes", "Indicateur"
        Case Else
            ' effacement des mises en couleurs
            der = Sheets("Demandes").Cells(Rows.Count, 3).End(xlUp).Row
            Sh.Range("A14:L" & der + 1).Clear
            ' filtre avancé
            Sheets("Demandes").Range("A13:L" & der).AdvancedFilter Action:=xlFilterCopy, _
                CriteriaRange:=Sh.Range("A1").CurrentRegion, CopyToRange:=Sh.Range("A13:L13"), Unique:=False
            der = Sh.Cells(Rows.Count, "H").End(xlUp).Row + 1
            ' recopie des listes déroulantes
            Sheets("Demandes").Range("A14:L14").Copy
            Sh.Range("A14:L" & der).PasteSpecial Paste:=xlPasteValidation, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Sh.Range("A" & der).Select
    End Select

End Sub

Bonjour à tous,

@ Steelson,

En rapport avec ton intervention :

https://forum.excel-pratique.com/viewtopic.php?p=794697#p794697

Le fichier comportait 35 noms définis ( dont 4 invalides et 20 externes).

Une fois supprimés, il n'en reste que 11 !...

@Qassim,

Le fichier devient plus fluide mais il faut refaire toutes les listes déroulantes (feuille protégée avec PWD).

Cdlt.

Merci Jean-Eric,

Pour accélérer, je suis parti sur une autre voie qui est d'exploiter plutôt le filtre avancé, ce qui m'a permis aussi d'ajouter le critère demandé en plus (voire d'ouvrir à d'autres critères).

Et je me suis aussi rendu compte que le filtre était incompatible avec les tableaux dans les onglets techniciens, que j'ai donc du supprimer. Ma macro par contre génère à juste titre les références Critères et Extraire.

Mais la vraie amélioration pour moi aurait été de travailler directement sur l'onglet Demandes avec un filtre avancé sur cet onglet. Cela aurait évité la gymnastique de la seconde macro.

C'est toi qui avait réalisé le début du programme ?

Re,

Oui, et à l'origine, c'était fluide !...

Pour rappel, tu étais aussi intervenu (fin 2018).

Dans l'idée, on filtre le tableau suivant un critère et on copie le résultat du filtre.

Rien de très difficile à mettre en œuvre.

Le souci était que Qassim souhaitait travailler à la fois sur la base et ses extractions (d'où les procédures évènementielles).

Maintenant, je suis sous Windows 10 et je suis passé à Office 365 (et en mode Insider).

Il arrive que les copier-coller soient plus lents (Presse-papiers ?).

Cdlt.

Vu le style de la macro, je m'en doutais bien !! ou alors quelque autre contributeur familier aussi.

Je pense que c'est une erreur que de travailler sur les 2 : dans les demandes et dans les onglets techniciens. Il a néanmoins 2 voies possibles, à lui de choisir. Je suis en effet bluffé par la rapidité de ta macro en effet, mais attention, il y a des noms utiles pour les listes déroulantes.

Re,

J'avais aussi crée les listes déroulantes (autre post ?).

Le souci, comme je l'ai écrit précédemment, c'est que 20 noms étaient supposés venir d'une source externe.

C'est à Qassim de nous dire comment il a pu arriver à cette situation.

J'utilise à certaines occasions ce petit utilitaire, qui met en évidence le nombre de styles utilisés (qui influent sur les copier-coller),

les noms valides, invalides, etc...

Enfin, des éléments qui ralentissent certaines opérations.

Il permet un nettoyage des fichiers.

Le lien générique :

https://sergeig888.wordpress.com/2012/06/10/windows-8-version-of-the-xlstylestool/

Le lien pour téléchargement :

https://www.microsoft.com/fr-fr/p/xlstylestool/9wzdncrfjptg?rtc=1&activetab=pivot:overviewtab

Reprends le fichier initial de Qassim, utilise l'utilitaire (sur une copie du fichier)

A te relire.

Cdlt.

Je pense que ceci aurait été suffisant :

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C2")) Is Nothing Then Exit Sub
If Range("C2") = "" Then
    Restaurer
Else
    Filtrer
End If
End Sub
Sub Filtrer()
    ActiveSheet.ListObjects(1).Range.AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Range("C1").CurrentRegion, Unique:=False
End Sub
Sub Restaurer()
    On Error Resume Next
    ActiveSheet.ShowAllData
End Sub
Sub raz()
    Range("C2") = ""
End Sub
Rechercher des sujets similaires à "suppression lignes tous mois"