Enregistrer des tableaux filtrés
Bonjour le forum,
Je reviens vers vous pour demander un petit coup de pouce pour m'éviter une manipulation répétitive :
Contexte : J'ai une base de données (voir PJ pour exemple) avec un filtre sur la colonne A, qui est le nom des villes (300 villes à terme)
J'aimerai, pour chaque ville, générer le tableau filtré et l'enregistrer dans un nouveau dossier du nom de la ville. J'ai déjà une macro qui fonctionne mais qui m'oblige à filtrer manuellement l'une après l'autre les villes.
Je souhaite simplement un code qui fasse ce boulot là à ma place.
A titre informatif j'ai ajouté 3 onglets pour montrer l'allure des tableaux extraits.
J'ai déjà une partie de la macro pour vous montrer.
la sub adresse_chemin permet à l'utilisateur de définir le chemin d'accès au dossier, pour ne pas à avoir à le modifier dans les codes.
la sub indiquer_la_valeur_du_filtre me permet de vous montrer en quelque sorte la procédure que doit prendre la macro traitement
la sub traitement est celle qui me pose problème, elle doit pouvoir filtrer, créer les nouveaux fichiers et les enregistrer. Je suis passé par l'enregistreur de macro, mais ça n'est pas opti..
Merci à ceux qui se pencheront sur mon fichier ci-joint.
Bonjour,
Un début de réponse.
Mais il faudra être prudent avec le nom des villes !...
(ne pas oublier de modifier le chemin pour l'enregistrement...)
Cdlt.
Bonjour et merci de ta proposition Jean-Eric, j'adapte ça à mon fichier pro et je ferai un retour demain dans la matinée
Bonne soirée !
edit1 : simplement, je ne sais plus si j'avais précisé, il faudra certainement regarder à ajouter une ligne pour que chaque fichier soit dans un sous-dossier dans ville, portant le nom de la ville, c'est-à-dire : Ville -> 3 dossiers (paris-lille-marseille) avec le bon fichier dedans à chaque fois. a suivre
edit2 : où intercaller un activesheet.name =cell.value.delete ? Pour ne garder que la feuille "Données" en fin de traitement de la macro.
edit3: j'ajoute à titre informatif mon en-tête de tableau pro, je coince pour la mise en forme sous tableau, puisque j'ai 2 lignes fusionnées dans mon en-tête. Ce qui fait coincer la ligne set lo = wsData.ListObjects(1). J'aimerai ne pas passer par la mise en forme sous tableau car cela modifie la mise en forme (couleur notamment) de mon tableau actuel :/
edit4: je n'ai pas que des villes, j'ai des communautés d'Agglomération et cela entraîne des noms à rallonge. Je crois que ça pose un problème puisque la macro s'arrête au moment du with activesheet.name = cell.value.copy. Est ce qu'on peut contourner cela?
Est-ce que Jean-Eric est dans les parages par hasard pour qu'on puisse continuer de travailler ?
J'ai ajouté quelques edit car le code proposé est très correct mais j'ai besoin de quelques modifications :/
Merci =)
J'ai finalement bidouillé pour avancer, mais il reste un seul point sur lequel je bloque :/
Le tableau de l'onglet données a été converti / mise en forme sous forme de tableau, et lorsque je copie colle ce tableau dans un nouvel onglet, j'ai cette mise en forme et je perd la mienne, celle d'origine. J'ai des en-têtes toutes bleus alors que j'avais un code couleur personnalisé :/
est-ce que ça vient de ce bout de code ?
With lo
If .ShowAutoFilter Then .AutoFilter.ShowAllData
lo.ListColumns(1).DataBodyRange.Copy Destination:=wsTmp.Cells(1)
End With
wsTmp.Cells(1).CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo
For Each Cell In wsTmp.Cells(1).CurrentRegion
lo.Range.AutoFilter field:=1, Criteria1:=Cell.Value
Set rngData = lo.AutoFilter.Range
rngData.SpecialCells(xlCellTypeVisible).Copy
wb.Worksheets.Add After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Cells(1).PasteSpecial xlPasteValuesAndNumberFormats
.ListObjects.Add xlSrcRange, .Cells(1).CurrentRegion, , xlYes
.ListObjects(1).Name = "tbl_" & Cell.Value
End WithLa solution se trouve la-dedans mais je ne parviens pas à déclarer que j'ai deja une mise en forme et que je souhaite la conserver. Merci à ceux qui passent par là et qui ont un indice, une idée.