Détection nom onglet puis copier cellules
Bonjour,
Je souhaiterai un peu (beaucoup) d'aide pour une macro (ou fonction Excel).
J'ai une feuille marquée "menu" avec plusieurs colonnes, dans une colonne j'ai des codes avec lesquelles j'ai créés des onglets avec le nom des codes, dans les onglets créés je souhaiterai copier les cellules adjacente correspondant aux code dans chaque onglet identifié.
Le fichier contient plus de 800 onglets/codes, c'est pour ne pas perdre de temps inutilement.
Fichier joint pour comprendre.
Bonsoir,
2 petites questions :
- Tu dis qu'il y aurait plus de 800 codes... Tu voudrais donc insérer plus de 800 onglets dans ton fichier?
- Est-ce que le fichier que tu as joint est le reflet exact de ton fichier réel? (si ce n'est pas le cas, merci de mettre ton fichier réel, sans toutes les données, avec quelques exemples représentatifs, et sans données confidentielles, bien sûr)
@ te relire
cousinhub a écrit :Bonsoir,
2 petites questions :
- Tu dis qu'il y aurait plus de 800 codes... Tu voudrais donc insérer plus de 800 onglets dans ton fichier?
- Est-ce que le fichier que tu as joint est le reflet exact de ton fichier réel? (si ce n'est pas le cas, merci de mettre ton fichier réel, sans toutes les données, avec quelques exemples représentatifs, et sans données confidentielles, bien sûr)
@ te relire
La mise en place d'onglets d'après liste des ~800 codes est déjà faite, je me suis aidé d'une macro bien sur.
Excel 2010 n'a pas de limitation d'onglet.
Oui le fichier fourni représente bien ce que j'ai à faire, je pense que je ne dévoile aucun secret en montrant le fichier réel.
Je ne peux envoyer le fichier en question il fait 6.4Mo et le site est limité à 300Ko
C'est une ébauche et ne représente pas le fichier fini évidemment.
Merci d'avoir répondu
Bonjour,
termit a écrit :[attachment=0]
La mise en place d'onglets d'après liste des ~800 codes est déjà faite, je me suis aidé d'une macro bien sur.
Excel 2010 n'a pas de limitation d'onglet.
OK, je vais travailler sur le fichier du post 1 (le fichier du post2 n'apporte aucune plus-value)
Deux autres petites questions :
- Tu n'auras pas d'autres codes que ces ~800 ?
- Les onglets que tu as déjà créés portent exactement le nom des ~800 codes? (à priori, oui, si tu as utilisé le code du fichier 2)
Bonne journée
Edit : et une autre question, est-ce que les onglets créés ont tous les titres stictement identiques aux titres de l'onglet "menu", et qu'ils sont tous en D6:F6?
Merci pour cette macro, c'est exactement ce que je voulais.
J'ai regardé comment faire pour changer la plage de cellule, mais j'avoue que je n'ai pas tout compris, si tu pouvais m'expliquer un peu, ou mettre des commentaires dans la macro?
Ci-joint une version light du fichier en question, comme je ne suis pas au travail actuellement, je ne peux t'envoyer la version actualisée, néanmoins dans le principe c'est ce qu'il me manquait comme macro, histoire de ne pas taper à la main tout ça.
C'est pour gérer une base de maintenance, la liste étant les sites à gérer associer à des codes. Les codes sont bien les noms des onglets.
Oui il y aura de nouveau ou suppression de site, mais 2 ou 3 par an seulement, c'est gérable à la main.
Sub repartir()
Dim ShBase As Worksheet, ShDest As Worksheet
Dim Codes As Object
Dim Cel As Range, Plg As Range, PlgCrit As Range
Dim DerLig As Long
Dim It
Application.ScreenUpdating = False
Set ShBase = Sheets("menu")
Set Codes = CreateObject("Scripting.Dictionary")
With ShBase
.[Z1] = .[D11]
DerLig = .Cells(Rows.Count, "D").End(xlUp).Row
Set Plg = .Range("D11:G" & DerLig): Set PlgCrit = .Range("Z1:Z2")
For Each Cel In .Range("D12:D" & DerLig)
If Cel <> "" Then Codes(Cel.Value) = Cel.Value
Next Cel
For Each It In Codes.Items
On Error Resume Next
Set ShDest = Sheets(CStr(It))
If Error <> "" Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = It
End If
On Error GoTo 0
.[Z2] = It
Plg.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=PlgCrit, CopyToRange:=ShDest.Range("D6:F6")
Next It
PlgCrit.Clear
.Select
End With
End Sub
Bonsoir,
cousinhub a écrit :- Est-ce que le fichier que tu as joint est le reflet exact de ton fichier réel? (si ce n'est pas le cas, merci de mettre ton fichier réel, sans toutes les données, avec quelques exemples représentatifs, et sans données confidentielles, bien sûr)
@ te relire
termit a écrit :Oui le fichier fourni représente bien ce que j'ai à faire, .....
Que dire....
Dans ton fichier réel, des lignes vides, des cellules fusionnées...
Et des onglets qui n'ont aucune donnée commune avec l'onglet "menu"....
Bref, je ne sais même pas ce que tu veux....
Il va donc falloir que j'explique tout
Notre service a été restructuré/fusionné il y a trois ans, un de ces services avait une base de donnée (Excel) entièrement automatisé par des macros, comme personne ne l'utilisait, rien n'a été fait depuis trois ans.
Un jour un de nos cadre a décidé qu'il fallait reprendre l'activité et la mettre à jour selon nos activités actuelles.
J'ai donc repris le fameux fichier plein de macro qu'il a fallut cracké car protégé par mot de passe oublié, j'en ai profité pour enlever les automatismes de démarrage pour voir comment fonctionnait ce fichier , comme ce n'était pas de mon niveau, j'ai décidé de reprendre l'architecture du fichier et de créer une nouvelle base sur l'ancienne présentation.
Donc c'est pour ça que le fichier que je t'ai envoyé est dans un état très "récupéré", depuis j'ai fait le ménage avec l'option sélectionner tous les onglets, ça modifie les 800 onglets en même temps, temps de calcul environ 5 minutes, le problème était aussi les cellules fusionnées qui réclamait un appuis sur OK 800 fois, depuis j'ai vu qu'il suffisait de tout sélectionner et de supprimer la fusion des cellules toutes en même temps !
Le premier fichier envoyé représente ce que je veux faire et pas ce qu'il contient.
Si on regarde le fichier base code UG, en haut de l'onglet "menu" on a code, sites, structure, adresses, de B1 à E1.
Maintenant dans les 800 fiches code au case D2 à D4 on a les lignes correspondant au "menu", toutes les fiches code sont identique pour la présentation et utilisent les même cellules.
Pour le code UG "fiche" j'ai trouvé une fonction qui me reprend le nom de l'onglet.
Il me manque donc la recopie sur les 800 fiches des structures, sites, adresses, du menu vers les onglets "code" dans les bonne cases.
Je me suis aussi amusé à créer une arborescence de 800 dossiers et sous-dossier sur le serveur avec une macro récupérée sur le net.
Je dois encore envoyer un fichier Excel avec pour nom le code UG dans les 800 dossiers identifié par le nom du site.
Bon si tu n'as pas tout compris, c'est déjà sympa de m'avoir envoyé cette macro
Bonsoir,
termit a écrit :Il va donc falloir que j'explique tout
Meuh non,
L'autre jour, j'ai téléphoné à mon garagiste, pour lui dire que ma voiture ne démarrait plus....
Je lui ai envoyé un mms, avec la photo de ma voiture, et il a pu réparer "Tranquille"....
J'ai vu que dans tes onglets de ligne, tu avais ces 3 cellules, mais dans ce cas, le filtre élaboré ne convient pas (tout ce qui est dessous la zone d'extraction est effacée, et je ne pense pas que ce soit cela que tu veuilles....)
De plus, la disposition des ces cellules ne conviendraient pas à un filtre élaboré...
Si c'est juste pour obtenir ces données, une formule devrait suffire, non?
Bonne soirée
Si c'est juste pour obtenir ces données, une formule devrait suffire, non?
Oui bien sur, on peux faire un "= à la case sur l'onglet bidule" mais il faut le faire sur les 800 onglets, et là je ne sais pas le faire automatiquement et je me vois mal à 1 mois et demi de la retraite à jouer du clavier ainsi, mon remplaçant non plus d'ailleurs.
Ta macro semblait prometteuse pourtant, je vais faire des essais avec.