Découper un fichier en plusieurs onglets

Bonjour à tous,

Je bute sur un code VBA qui je pense est très simple et je n'arrive pas à trouver la solution... Je me tourne vers vous, vous êtes mon dernier espoir :-)

J'ai un fichier que je souhaite découper en plusieurs onglets. Le découpage doit se baser sur une colonne précise et créer autant d'onglet qu'il y a de valeur différente. Je joins le fichier exemple :

- Le premier onglet "Base" contient l'ensemble des données

- Dans la colonne C se situe la ville

- Je souhaiterais que VBA crée autant d'onglets qu'il y a de villes en colonne C en reprenant l'ensemble des lignes associées à cette ville.

Dans l'exemple, il doit donc créer un onglet "Asnières" et un onglet "Beaulieu" reprenant l'ensemble des lignes concernées de l'onglet "Base".

Un grand merci par avance pour votre aide et vos lumières.

Romain

Bonjour,

Et tu voudrais faire quoi avec tous ces onglets ?

Si un onglet avec la ville existe déjà, tu veux en faire quoi ?

Bonjour,

Merci pour ton message

Les onglets n'existent pas, il y aura uniquement l'onglet "Base". J'ai volontairement créé les onglets "Asnières" et "Beaulieu" pour montrer le résultat final.

Je vais avoir plus de 100 villes différentes, et j'ai besoin d'avoir un onglet par ville pour faciliter la lecture des utilisateurs, qui est une demande de leur part...

Naviguer parmi 100 onglets serait plus simple ? C'est un point de vue.

Filtrer efficacement la base de données ne conviendrait pas ?

Je suis d'accord mais c'est la demande des utilisateurs... L'option des onglets leur convient très bien

Tu peux coller ça dans un module :

Sub Sans_Doublons()

With Feuil1
    .Range("E1:E" & Range("C1").End(xlDown).Row - 1).Value = Range("C2:C" & Range("C1").End(xlDown).Row).Value
    .Cells(1, 5).CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo
End With

For Each cell In Cells(1, 5).CurrentRegion
    Sheets.Add after:=ActiveSheet
    ActiveSheet.Name = cell.Value
    Feuil1.Cells(1, 1).CurrentRegion.AutoFilter Field:=3, Criteria1:=cell
    Feuil1.Cells(1, 1).CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets(cell.Value).Cells(1, 1)
    Columns("A:C").EntireColumn.AutoFit
Next

With Feuil1
    .Activate
    .Cells(1, 1).CurrentRegion.AutoFilter
    .Range("E1:E" & Range("C1").End(xlDown).Row).Delete
End With
End Sub

J'ai essayé de bosser dans la mémoire d'Excel, sans passer par une inscription en dur à un moment, mais je n'y suis pas arrivé.

Bonjour,

Merci beaucoup cela fonctionne parfaitement

Je ne comprends pas tout le code, je vais essayer de le décortiquer à tête reposée

Un grand merci pour ton aide

Hello,

Voici le code commenté

Sub Sans_Doublons()
'on travaille sur la feuil1 (base)
With Feuil1
'on copie les villes qui sont dans la colonne C vers la colonne E (les différentes indications permettent
' de ne pas copier toute la colonne, mais uniquement les cellules occupées
    .Range("E1:E" & Range("C1").End(xlDown).Row - 1).Value = Range("C2:C" & Range("C1").End(xlDown).Row).Value
'on supprime les doublons dans cette liste
    .Cells(1, 5).CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo
End With
'on boucle sur toutes les cellules qui contiennent les villes sans doublon, de E1 jusqu'à la dernière cellule occupée
For Each cell In Cells(1, 5).CurrentRegion
'on ajoute une feuille
    Sheets.Add after:=ActiveSheet
'la nouvelle feuille s'appelle comme la ville actuellement utilisée dans la boucle
    ActiveSheet.Name = cell.Value
'on filtre la colonne C avec le nom de la ville
    Feuil1.Cells(1, 1).CurrentRegion.AutoFilter Field:=3, Criteria1:=cell
'on copie les cellules apparentes après filtrage et on les colle en A1 de la feuille nouvellement crée
    Feuil1.Cells(1, 1).CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets(cell.Value).Cells(1, 1)
'on adapte en largeur les colonnes sur la nouvelle feuille
    Columns("A:C").EntireColumn.AutoFit
'on passe à la ville suivante
Next

'on travaille sur la feuil1 (base)
With Feuil1
'on l'active
    .Activate
'on enlève les filtres automatiques
    .Cells(1, 1).CurrentRegion.AutoFilter
'on supprime les villes dans la colonne E
    .Range("E1:E" & Range("C1").End(xlDown).Row).Delete
End With
End Sub

Si c'est tout bon, n'hésite pas à clôturer le sujet.

Merci beaucoup c'est très clair !

A bientôt

Rechercher des sujets similaires à "decouper fichier onglets"