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

Excel Discussion :

Transposer plusieurs colonnes en lignes en répliquant les données de certaines colonnes


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Transposer plusieurs colonnes en lignes en répliquant les données de certaines colonnes
    Bonjour,

    Ce que j'ai :
    Fabricant / Article / Matière 1 / Matière 2 / Matière 3 / ... / Packaging 1 / Packaging 2 / ...
    LULU / PRIMO / Orange / Terre / Bleu cyan / / carton / / ...
    BABA / SECO / Poudre / Eau / Orange / / boite / sac papier / ...


    Ce que je souhaite avoir:
    Fabricant / Article / Matière / Packaging /
    LULU / PRIMO / Orange / carton /
    LULU / PRIMO / Terre / Carton /
    LULU / PRIMO / Bleu cyan/ Carton /
    BABA / SECO / Poudre / boite
    BABA / SECO / Eau / boite
    BABA / SECO / Orange / boite
    BABA / SECO / Poudre / carton
    BABA / SECO / Eau / carton
    BABA / SECO / Orange / carton


    Ensuite je pourrai faire un tableau croisé dynamique afin d'avoir des vues classées:
    Matière / Fabricant
    Orange / LULU
    Orange / BABA

    ou
    Matière / Packaging
    Orange / carton
    Orange / boite

    ou
    Packaging / Fabricant
    ...


    J'ai une base de données importante (17000 lignes / colonne DR)... Connaissez-vous un moyen de transposer mes données facilement pour obtenir ma vue?
    Merci d'avance pour votre aide.
    PS: je suis un bleu en excel et n'ai pas Access...

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Tu as au moins deux solutions.

    Soit tu fais un copier de tes donnée puis un collage spécial (ruban Accueil > Icone Coller > Collage Spécial) et dans les options tu coches "Transposer".

    Soit tu veux que ça reste dynamique et tu utilises la fonction TRANSPOSE() (voir la syntaxe dans l'aide Excel).

    Il y a bien sûr plusieurs autres solutions avec VBA.

  3. #3
    jc2
    jc2 est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    il y a combien de colonnes Matière et combien de colonnes Packaging ?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai 58 colonnes "matière" et 48 colonnes "packaging".
    J'ai aussi 6 colonnes "classe" et d'autres colonnes unique dans ce tableau.
    Au total il y un peu plus de 17000 lignes.

    J'aimerai éviter le copier coller à la main vu le nombre de données à transposer...

  5. #5
    jc2
    jc2 est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Voilà une solution en VBA à adapter.

    En partant de ce tableau :

    Fabricant Article Matière 1 Matière 2 Matière 3 Packaging 1 Packaging 2 Classe 1 Classe 2
    LULU PRIMO Orange Terre Bleu cyan carton C1 C2
    BABA SECO Poudre Eau Orange boite sac papier C2

    On arrive à ce tableau :

    Fabricant Article Matière Packaging Classe
    LULU PRIMO Orange carton C1
    LULU PRIMO Orange carton C2
    LULU PRIMO Terre carton C1
    LULU PRIMO Terre carton C2
    LULU PRIMO Bleu cyan carton C1
    LULU PRIMO Bleu cyan carton C2
    BABA SECO Poudre boite C2
    BABA SECO Poudre sac papier C2
    BABA SECO Eau boite C2
    BABA SECO Eau sac papier C2
    BABA SECO Orange boite C2
    BABA SECO Orange sac papier C2

    avec le script suivant qui parcoure le tableau de départ dans Feuil1 et écrit la normalisation de la table dans Feuil2.
    Il suffit de modifier le début et la fin des boucles for en fonction du tableau.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Option Explicit
     
    Sub Normalisation()
     
        Dim lignecourante As Long
        Dim matierecourante As Long
        Dim packagingcourant As Long
        Dim classecourante As Long
        Dim feuillesrc As String, feuillecbl As String
        Dim lignecbl As Long, colonnecbl As Long
     
        feuillesrc = "Feuil1"
        feuillecbl = "Feuil2"
     
        lignecbl = 2
        colonnecbl = 1
     
        lignecourante = 2
     
        Do While IsEmpty(Worksheets(feuillesrc).Cells(lignecourante, 1)) = False
            For matierecourante = 3 To 5
                If Not IsEmpty(Worksheets(feuillesrc).Cells(lignecourante, matierecourante)) Then
                    For packagingcourant = 6 To 7
                        If Not IsEmpty(Worksheets(feuillesrc).Cells(lignecourante, packagingcourant)) Then
                            For classecourante = 8 To 9
                                If Not IsEmpty(Worksheets(feuillesrc).Cells(lignecourante, classecourante)) Then
                                    colonnecbl = 1
                                    Worksheets(feuillecbl).Cells(lignecbl, colonnecbl).Value = Worksheets(feuillesrc).Cells(lignecourante, 1)
                                    colonnecbl = colonnecbl + 1
                                    Worksheets(feuillecbl).Cells(lignecbl, colonnecbl).Value = Worksheets(feuillesrc).Cells(lignecourante, 2)
                                    colonnecbl = colonnecbl + 1
                                    Worksheets(feuillecbl).Cells(lignecbl, colonnecbl).Value = Worksheets(feuillesrc).Cells(lignecourante, matierecourante)
                                    colonnecbl = colonnecbl + 1
                                    Worksheets(feuillecbl).Cells(lignecbl, colonnecbl).Value = Worksheets(feuillesrc).Cells(lignecourante, packagingcourant)
                                    colonnecbl = colonnecbl + 1
                                    Worksheets(feuillecbl).Cells(lignecbl, colonnecbl).Value = Worksheets(feuillesrc).Cells(lignecourante, classecourante)
                                    lignecbl = lignecbl + 1
                                Else
                                    Exit For
                                End If
                            Next
                        Else
                            Exit For
                        End If
                    Next
                Else
                    Exit For
                End If
            Next
     
            lignecourante = lignecourante + 1
        Loop
     
    End Sub

Discussions similaires

  1. Concaténer en ligne les données d'une colonne
    Par philben dans le forum Contribuez
    Réponses: 2
    Dernier message: 16/02/2015, 12h23
  2. Réponses: 6
    Dernier message: 11/10/2009, 10h57
  3. Personnaliser les cellules d'une colonne ou lignes
    Par opensource dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/12/2007, 15h39
  4. Réponses: 8
    Dernier message: 19/04/2007, 19h41
  5. Effacer toutes les données d'une colonne
    Par denisfavre dans le forum Access
    Réponses: 5
    Dernier message: 12/10/2005, 15h20

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