Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Community Manager

    [Tableau structuré] Amélioration code répartition tableau suivant colonne
    Bonjour,

    Confronté à une situation à gérer rapidement, j'ai cherché sur le net et adapté le code ci-après qui me donne le résultat escompté :

    Code vba :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit
     
    Sub Repartition()
    Dim Dico, k, i
    Dim C As Range
    Dim n As Integer, LigneC As Integer
        Set Dico = CreateObject("Scripting.dictionary")
        Application.ScreenUpdating = False
        With Worksheets("DetailOperation")
            For Each C In Range("Tab_Operations[Ref]")
                If Not Dico.Exists(C.Value) Then Dico.Add C.Value, C.Offset(0, 1).Value
            Next C
            k = Dico.keys
            i = Dico.items
            For n = 0 To Dico.Count - 1
                LigneC = 5
                Sheets.Add After:=Sheets(Sheets.Count)
                ActiveSheet.Name = k(n)
                For Each C In Range("Tab_Operations[Ref]")
                    If C = k(n) Then
                        C.Offset(0, 1).Resize(, 7).Copy ActiveSheet.Range("A" & LigneC)
                        LigneC = LigneC + 1
                    End If
                Next C
            Next n
        End With
    End Sub


    Ce code, appliqué sur le tableau structuré ci-dessous, fait une répartition et crée une feuille pour chaque REF tout en copiant les données correspondant et se trouvant sur la même ligne.


    Le résultat que j'obtiens pour chaque REF :


    Ma question

    Est-ce la meilleure façon de traiter ce genre de problème ? Surtout qu'il s'agit de tableau structuré avec ses propriétés ListObject et autres

    Comment améliorer ce code de façon à faire apparaître également les entêtes de chaque colonne ?

    Merci d'avance pour vos remarques.
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  2. #2
    Rédacteur

    Bonjour Malik,
    D'après ton llustration, il s'agit de splitter les données en fonction du contenu d'une colonne.
    Il est possible je crois de faire cela avec PowerQuery mais mes mes connaissances de cette fonctionnalités ne sont pas suffisantes pour t'aider

    Pour effectuer ce travail, je fais cela avec la méthode AdvancedFilter, voir mon explication sur le même sujet Comment splitter des données avec la méthode AdvancedFilter
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  3. #3
    Expert éminent sénior
    BOnjour

    Il y a combien de ref ?

    Si le nombre est limité, PowerQuery le fera très bien. PowerQuery peut aussi être piloté via VBA à partir de 2016

    Sinon un filtre avancé automatisé mais j'ai toujours du mal à voir l'intérêt d'une démultiplication d'onglets.
    Chris

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  4. #4
    Community Manager

    Salut,

    Merci Phillipe et 78chris pour vos retours

    Citation Envoyé par Philippe Tulliez
    Pour effectuer ce travail, je fais cela avec la méthode AdvancedFilter, voir mon explication sur le même sujet Comment splitter des données avec la méthode AdvancedFilter
    Je vais regarder cette possibilité.

    Citation Envoyé par 78chris
    Si le nombre est limité, PowerQuery le fera très bien.
    Effectivement j'ai mis en place quelque chose avec Power Query et un TCD sur la base de cette requête et cela marche aussi. Sauf que là je le ferais au besoin en filtrant le TCD sur la REF concernée.

    Citation Envoyé par 78chris
    PowerQuery peut aussi être piloté via VBA à partir de 2016
    Je ne savais pas cela, super Je m'y pencherai pour me documenter dessus.

    Je passe en

    Merci encore et bon week-end.
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.