Macro pour répartir des données sur plusieurs feuilles

Bonjour jai beaucoup de données dans la feuille liste et jaimerai les repartir dans plusieurs feuille excel en fonction de al catégorie par le biasi dune macro;*

Pouvez vous m'aider

Merci beaucoup

68categories.xlsm (23.81 Ko)

Bonjour,

Voici une solution en transformant votre tableau en tableau structuré.

Cdlt,

164categories.xlsm (35.19 Ko)

Hello,

Voici ce que je peux en dire.

R@g

50categories.xlsm (29.22 Ko)

Merci beaucoup mais les données du premier onglets sont supprimes alors que je souhaite les sauvegarder est ce que c'est possible?

Bien sûr, qui peut le plus peut le moins.

Mais pourriez-vous préciser très clairement ce que vous attendez ? Ce sera plus simple de tomber juste

<@3gb la macro ne fonctionne pas , jai un message d'erreur l'indice n'apparait pas, quel est l'objectif de transformé e, tableau structure?

Oui désolée ce n'est pas clair;

en faite jai une feuille de données . dans cette feuille de données j'ai des catégories différentes : preca - gene , il y en a 14 au total

j'aimerai avec l'aide dune macro (je crois qu'il est possible de le faire avec une nommé dispatch) que toute les données soit dispatcher dans un onglet par catégorie soit 14 onglets .... tout en gardant les données dans la feuille principale.

Est ce que c'est possible ? et plus clair? :-)

merci beaucoup de vos reponses

Bonsoir à tous,

Un essai...

Cordialement

C'est bien cette macro! merci beaucoup: moi j'ai essayé de faire avec celle dans le fichier joint mais je ne comprends pas pourquoi elle ne fonctionne pas ....

47categories.xlsm (24.41 Ko)

Salut,

Tu as oublié le caractère de retour (souligné) à la fin de la première ligne ci-dessous :

        .Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, criteriarange:=.Range("A1").Resize(Mondico.Count + 1, 1), _
                                                  copytorange:=Sheets(FeuilleEnCours).Range("A1:E1")

Amicalement.

Les onglets sont bien créer mais les donn"es ne se reportent pas...

Bonsoir à tous,

Le tableau structuré permet de faciliter et améliorer le traitement de données, en le rendant dynamique notamment...

Le code ne fonctionne pas car vous avez apparemment 14 onglets à créer au lieu de 2 comme le laissait penser votre exemple.

Malheureusement, je n'arrive plus à accéder à mon code. Si vous pouviez le coller, je pourrais le modifier pour essayer de l'adapter.

Cdlt,

Merci car grâce à vous cette macro fonctionne (ci dessous ) mais vous savez pourquoi le bouton apparait aussi sur l'une des feuilles créées?

Option Explicit

Public Sub Create_Worksheets()
Dim wb As Workbook
Dim ws As Worksheet, wsData As Worksheet, wsTemplate As Worksheet
Dim lo As ListObject
Dim Cell As Range
Dim SheetName As String, critère As String

With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With

Set wb = ActiveWorkbook
Set wsData = wb.Worksheets("Rq_Liste_Factures")
Set wsTemplate = wb.Worksheets("Regles")

For Each ws In wb.Worksheets
Select Case ws.Name
Case "Rq_Liste_Factures", "Regles":

End Select
Next ws

Application.DisplayAlerts = True

Set lo = wsTemplate.ListObjects("Tableau1")

If Not lo.DataBodyRange Is Nothing Then
For Each Cell In lo.ListColumns(1).DataBodyRange
SheetName = Cell.Value
Sheets.Add after:=wb.Worksheets(Worksheets.Count)
With ActiveSheet
.Name = SheetName
critère = SheetName
wsData.Range("A1:AO" & wsData.Range("A" & Rows.Count).End(xlUp).Row).AutoFilter field:=1, Criteria1:=.Name
wsData.Range("A1:AO" & wsData.Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlVisible).Copy Sheets(SheetName).Range("A1")
If wsData.FilterMode = True Then wsData.ShowAllData
End With
Next Cell
End If
End Sub

Bien cordialement

Bonjour à tous,

Merci car grâce à vous cette macro fonctionne (ci dessous ) mais vous savez pourquoi le bouton apparait aussi sur l'une des feuilles créées?

Option Explicit

Public Sub Create_Worksheets()
Dim wb As Workbook
Dim ws As Worksheet, wsData As Worksheet, wsTemplate As Worksheet
Dim lo As ListObject
Dim Cell As Range
Dim SheetName As String, critère As String

With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With

Set wb = ActiveWorkbook
Set wsData = wb.Worksheets("Rq_Liste_Factures")
Set wsTemplate = wb.Worksheets("Regles")

For Each ws In wb.Worksheets
Select Case ws.Name
Case "Rq_Liste_Factures", "Regles":

End Select
Next ws

Application.DisplayAlerts = True

Set lo = wsTemplate.ListObjects("Tableau1")

If Not lo.DataBodyRange Is Nothing Then
For Each Cell In lo.ListColumns(1).DataBodyRange
SheetName = Cell.Value
Sheets.Add after:=wb.Worksheets(Worksheets.Count)
With ActiveSheet
.Name = SheetName
critère = SheetName
wsData.Range("A1:AO" & wsData.Range("A" & Rows.Count).End(xlUp).Row).AutoFilter field:=1, Criteria1:=.Name
wsData.Range("A1:AO" & wsData.Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlVisible).Copy Sheets(SheetName).Range("A1")
If wsData.FilterMode = True Then wsData.ShowAllData
End With
Next Cell
End If
End Sub

@oceane20, essaies de déplacer ton bouton en dehors de tes données....sinon il est copié également.

capture

Cordialement,

Bonjour…

Toujours fidèle aux Tableaux (ListObjects) avec leur nombreuse spécificités, le tableau de données nommé BD, le tableau des catégories nommé TC, le tableau de réception nommé BC et au nombre de feuilles limité*,

capture

un exemple, dans la fenêtre des codes de l’onglet Données

Private Sub Worksheet_BeforeDoubleClick(ByVal R As Range, Cancel As Boolean)
    If Not Intersect(R, [BD]) Is Nothing And R.CountLarge = 1 Then
        If Application.CountA([BC]) > 0 Then [BC].Delete
        [BD].AutoFilter 1, R
        [BD[[N°Devis]:[DateFacture]]].Copy [BC].Item(1, 1)
        [BC] = [BC].Value: [BC].Sort [BC].Columns(1), Header:=1
        [BD].AutoFilter    ‘tri (pas obligatoire)
        Cancel = 1
        Feuil1.Name = R        ‘feuille Categorie
    End If
End Sub

Nota : dans mon exemple, j’ai rajouté une macro qui permet d’effacer le tableau de réception afin d’alléger le fichier surtout s’il est très développé.

* Or, les catégories peuvent intervenir dans de nombreux cas, donc, autant en dresser leur liste complète dès le départ et éviter de créer (ou pas) une feuille pour chacune d’elles.

merci! Tout fonctionne !J’ai déplacé mon bouton et effectivement il n’est pas copié 😊 . Merci de vos conseils car je suis novice et j’aime beaucoup cela!
par contre j’ai vu que le dispatch colle sur des onglets en valeurs . Je fais donc un tcd pour calculer mais ne pouvons nous pas ajouter des formules dans les onglets créer?

Re,

ne pouvons nous pas ajouter des formules dans les onglets créer?

Pas sur de comprendre le but de ta demande....

Quelle formule souhaites-tu ajouter et sur quelle colonne?

Un petit exemple du résultat attendu ?

Pourquoi dispatcher sur plusieurs onglets si tu travailles avec un TCD ?

Cordialement,

Rechercher des sujets similaires à "macro repartir donnees feuilles"