IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Macros et VBA Excel Discussion :

Transposer un tableau selon un critère en colonne [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Logistique
    Inscrit en
    Septembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Logistique

    Informations forums :
    Inscription : Septembre 2021
    Messages : 6
    Par défaut Transposer un tableau selon un critère en colonne
    Bonjour à tous,

    Je recherche un code VBA qui transformerait une mise en page de tableau selon un critère dans une colonne qui correspond à un code client. Le tableau d'origine peut avoir jusqu'à 2000 lignes.

    Je vous joint le fichier type en exemple.

    Merci d'avance.

    Sycam
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    à tester avec prudence sur une copie de ton fichier
    Code : 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
    Sub regroup()
    Application.ScreenUpdating = False
    Dim F1 As Worksheet
    Dim F2 As Worksheet
    Set F1 = Sheets("DONNEES VERTICALES")
    Set F2 = Sheets("DONNEES HORIZONTALES")
    F2.Cells.ClearContents
    Dim i As Long
    On Error Resume Next
    Set d = CreateObject("Scripting.Dictionary")
     
        TblBD = F1.Range("A2:F" & F1.Range("A" & Rows.Count).End(xlUp).Row)
        For i = 1 To UBound(TblBD)
        clé = TblBD(i, 1) & "|" & TblBD(i, 2)
        d(clé) = d(clé) & "|" & TblBD(i, 6) & "|" & TblBD(i, 4)
        Next i
     F2.Range("A2").Resize(d.Count) = Application.Transpose(d.keys)
     F2.Range("C2").Resize(d.Count) = Application.Transpose(d.items)
     Application.DisplayAlerts = False
     F2.Range("A2").Resize(d.Count).TextToColumns Other:=1, OtherChar:="|"
     F2.Range("C2").Resize(d.Count).TextToColumns Other:=1, OtherChar:="|"
     
     F2.Columns(3).Delete Shift:=xlToLeft
     
    Application.ScreenUpdating = True
    End Sub

  3. #3
    Membre du Club
    Homme Profil pro
    Logistique
    Inscrit en
    Septembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Logistique

    Informations forums :
    Inscription : Septembre 2021
    Messages : 6
    Par défaut
    Bonjour BENNASR,

    J'ai fait un essai sur l'ensemble de mon tableau, ça a l'air de fonctionner.
    Merci beaucoup.

    SYCAM

  4. #4
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 280
    Par défaut
    Bonjour

    personnellement avec Excel 2016 vous avez Power Query à disposition
    cet outil est plus simple à mettre en œuvre que VBA pour ce genre de traitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let
        Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
        #"Regroupement+Index" = Table.Group(Source, {"RUPT CDE", "CLI"}, {{"Données", each Table.AddIndexColumn(_,"Index",1)}}),
        Developpement = Table.ExpandTableColumn(#"Regroupement+Index", "Données", {"Qte Cde", "ARTICLE", "Index"}, {"Qte Cde", "ARTICLE", "Index"}),
        Dépivot = Table.UnpivotOtherColumns(Developpement, {"RUPT CDE", "CLI", "Index"}, "Attribut", "Valeur"),
        Tri = Table.Sort(Dépivot,{{"Index", Order.Ascending},{"Attribut", Order.Ascending}}),
        Fusion_Colonne = Table.CombineColumns(Table.TransformColumnTypes(Tri, {{"Index", type text}}, "fr"),{"Attribut", "Index"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Attribut.1"),
        Pivot = Table.Pivot(Fusion_Colonne, List.Distinct(Fusion_Colonne[Attribut.1]), "Attribut.1", "Valeur")
    in
        Pivot
    le principe est d'ajouter un Index à chaque ligne de données regroupées par client.
    on dépivote et on fusionne avec l'index pour créer les lignes Article 1, Quantité 1, Article 2, Quantité 2...
    puis on pivote ces lignes pour les mettre en colonne

    Stéphane

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Classement de tableau selon différents critères
    Par nadia_03 dans le forum C++
    Réponses: 1
    Dernier message: 20/11/2014, 01h07
  2. Réponses: 4
    Dernier message: 24/02/2014, 14h22
  3. VBA - Remplissage d'un tableau selon plusieurs critères
    Par khroutchev dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/07/2013, 15h20
  4. [XL-2007] fitrer un tableau selon les critères suivants
    Par iliesss dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/11/2011, 15h17
  5. [XL-2003] Recherche mutiple dans un tableau selon un critère
    Par Achere dans le forum Excel
    Réponses: 2
    Dernier message: 18/12/2010, 10h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo