Filtrage fichier source et copie vers nouvel onglet

Bonjour,

Je débute tout juste en VBA et j'aurais grandement besoin d'une aide pour créer une macro sur excel. J'ai quelques notions en programmation et j'ai essayé de me familiariser avec VBA, mais je ne maitrise pas encore parfaitement ce langage.

Je vous transmets le fichier source en copie de ce message "tri_dechets.xlsx" et vous explique ce que je souhaiterais faire de manière automatique.

Globalement, il s'agit d'un fichier qui permettrait de tracer le stockage de déchets putrescibles. La macro associée devrait permettre d'assurer un suivi en temps réel des déchets stockés dans différents congélateur (notés de 1 à 10) et de faciliter la gestion de l'élimination des sacs.

Onglet "source" :

Dans ce fichier, l'onglet "source" est quotidiennement alimenté par un opérateur. Il renseigne alors les colonnes A à E , contenant les informations d'un sac venant d'être placé dans un congélateur (ex : C1). Une date d'évacuation théorique de ce déchet apparait alors automatiquement dans la colonne F, calculée à partir de la date de stockage (colonne B), permettant de donner à l'opérateur une indication sur la date à laquelle il pourra éliminé le sac. Dès lors que le sac est éliminé, l'opérateur renseigne une date d'évacuation réelle dans la colonne G.

Onglets "congelateur" :

C'est pour ces onglets que la macro doit faire son travail.

Je souhaiterais que la macro puisse filtrer les lignes de l'onglet "source" par type de congélateur (C1, C2, etc. : information contenue dans la colonne E) et qui colle ces lignes dans l'onglet associé "congelateur1" par exemple, de sorte que l'opérateur puisse avoir dans chaque onglet "congelateur1", "congelateur2", etc. une visibilité des sacs présents dans le congélateur sélectionné. Pour avoir cette visibilité à l'instant t, il faut que la macro puisse supprimer une ligne dans l'onglet "congelateur i" dès lors que la date d'évacuation réelle (colonne G - onglet source) est complété par l'opérateur.

De cette façon, l'opérateur peut savoir à tout moment quels sacs sont présents dans quel congélateur à l'instant t, tout en gardant l'historique des sacs gérés, depuis l'onglet "source".

Récap :

  • colonnes A à E : complétées manuellement par l'opérateur
  • colonne F : date calculée de manière automatique (indépendant de la macro)
  • colonne G : complétée par l'opérateur après élimination du sac

- onglets "congelateur i" : remplis de manière automatique à l'instant t.

Petit précision : je souhaiterais que les onglets congélateur1, congélateur2, etc. se remplissent automatiquement dès lors que le fichier source est complété, sans devoir appuyer sur un bouton type : "Lancer macro".

Je ne sais pas si mon explication est claire. En tout cas, je vous remercie par avance de toute aide que vous pourriez m'apporter.

Alexis

14tri-dechets.xlsx (20.24 Ko)

Bonjour Alexis,

il suffit de mettre le n° du congélo en A2 (et mettre la source sous forme de tableau)

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "source" Then Exit Sub
        Sheets(1).ListObjects(1).Range.AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Sh.Range("A1").CurrentRegion, CopyToRange:=Sh.Range("A4").CurrentRegion.Resize(1), Unique:=False
End Sub
11tri-dechets.xlsm (28.01 Ko)

Bonjour Steelson,

Merci beaucoup !

La macro fonctionne impeccablement bien, je ne pensais que le problème pourrait être résolu en si peu de ligne.

Il manque juste une chose, c'est le fait de faire disparaitre les lignes (sacs) des onglets "congelateur i" lorsque la date d'évacuation réelle est enregistrée dans le fichier "source". Je souhaiterais en effet que seuls les sac présents dans les congélateurs apparaissent.

Merci pour votre aide.

Alexis

J'ai rajouté un critère en cellule B2 : = précédé de l’apostrophe ' pour dire que la cellule doit être vide

7tri-dechets.xlsm (27.97 Ko)

Steelson,

Ça marche !

Je n'ai pas encore réussi à bien comprendre votre code, il a l'air pourtant assez simple.

En tout cas, merci beaucoup, c'est exactement ce que je voulais faire.

Alexis

Dernière petite question : certaines cases du fichier source doivent contenir des listes déroulantes (ex : colonne emballage --> plastique, carton ,etc.). En les insérant j'ai l'impression que le code ne fonctionne plus, est-ce normal et comment puis-je y remédier ?

Je n'ai pas encore essayé mais je pense que je vais être confronté au même problème : dans la colonne date d'évacuation théorique du fichier source, les cases vont contenir une formule qui permettront de calculer cette date théorique automatiquement, à partir de la date de stockage. Comment puis-je faire fonctionner le code avec ces nouveaux éléments ?

Je vous remercie.

Alexis

certaines cases du fichier source doivent contenir des listes déroulantes (ex : colonne emballage --> plastique, carton ,etc.). En les insérant j'ai l'impression que le code ne fonctionne plus, est-ce normal et comment puis-je y remédier ?

c'est une impression ou tu en sûr ?

as-tu fait un test

cela m'étonnerait quand même

dans la colonne date d'évacuation théorique du fichier source, les cases vont contenir une formule qui permettront de calculer cette date théorique automatiquement, à partir de la date de stockage. Comment puis-je faire fonctionner le code avec ces nouveaux éléments ?

je pense que la valeur sera reprise, pas la formule, à tester aussi

J'ai fait un essai en supprimant d'abord les lignes à partir de la 5 des onglets congelateurX, puis en introduisant une liste de validation et un calcul sur dates

Les valeurs sont bien reprises

J'ai modifié un poil la macro pour introduire un nouvel onglet

8tri-dechets.xlsm (27.73 Ko)

si pas de remarque ...

Rechercher des sujets similaires à "filtrage fichier source copie nouvel onglet"