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 :

Transposition partielle d'un tableau [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    contrôleur gestion
    Inscrit en
    Septembre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : contrôleur gestion

    Informations forums :
    Inscription : Septembre 2014
    Messages : 53
    Points : 26
    Points
    26
    Par défaut Transposition partielle d'un tableau
    Bonjour,

    Je dispose d'une macro obtenue sur le forum (si ma mémoire est bonne) qui me permet à partir d'un tableau ou les données sont ordonnées en colonnes mais également en lignes d'organiser un second tableau ou toutes les données sont en lignes. Seuls les mois, les EFF mensuels et les ETP mensuels sont transposés

    Tableau initital 1

    Unité ; Code statut ; libellé statut ; janvier eff; janvier ETP, février eff ; février ETP ...........; décembre eff ; décembre ETP

    Tableau final 1

    Unité ; Code statut ; libellé statut ; mois ; EFF ; ETP

    Cette macro est une véritable bénédiction quand on sait le nombre de lignes qu'une base ressource humaine peut contenir mais elle ne m'a pas été expliquée et le problème c'est que le tableau initial a gagné 2 colonnes supplémentaires. là encore seuls les mois, les EFF mensuels et les ETP mensuels sont à transposer

    Tableau initial 2

    Unité ; Code statut ; libellé statut ; code emploi ; libellé emploi ; janvier eff; janvier ETP, février eff ; février ETP ...........; décembre eff ; décembre ETP

    Le tableau final devrait prendre la forme suivante

    Tableau final 2

    Unité ; Code statut ; libellé statut ; code emploi ;libellé emploi ;mois ; EFF ; ETP



    J'ai pris l'habitude d'utiliser le bouton F8 (pas à pas détaillé) pour tenter de comprendre le fonctionnement de la macro mais il semblerait que cette macro réalise tout d'abord la réorganisation complète du tableau avant de l'afficher sur le second onglet.


    Je vous joins le code utilisé pour le tableau 1:


    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
    Sub TRANSPOSE_RHPM()
    Dim a, b(), i As Long, j As Long, n As Long, x
        With Sheets("RHPM SOURCE").Range("a4").CurrentRegion
            a = .Value
        End With
        ReDim b(1 To (((UBound(a, 2) - 3) / 2) * (UBound(a, 1) - 1)), 1 To 6)
        For i = 2 To UBound(a, 1)
            For j = 4 To UBound(a, 2) Step 2
                n = n + 1
                x = Split(a(1, j), "-")
     
                b(n, 1) = a(i, 1): b(n, 2) = a(i, 2): b(n, 3) = a(i, 3)
                b(n, 4) = x(0): b(n, 5) = a(i, j)
                b(n, 5) = a(i, j): b(n, 6) = a(i, j + 1)
            Next
        Next
        With Sheets("RHPM RESULTAT").Cells(1).Resize(, 6)
            .CurrentRegion.Clear
            .Value = [{"Unité","Code Statut","Libellé Statut","Mois","Eff Prév","Etp Rém"}]
            .Offset(1).Resize(n).Value = b
            With .CurrentRegion
                .Font.Name = "calibri"
                .Font.Size = 10
                .VerticalAlignment = xlCenter
                .BorderAround Weight:=xlThin
                .Borders(xlInsideVertical).Weight = xlThin
                With .Rows(1)
                    .BorderAround Weight:=xlThin
                    .HorizontalAlignment = xlCenter
                    .Interior.ColorIndex = 36
                    .Font.Size = 11
                End With
                .Columns.ColumnWidth = 14
            End With
            .Parent.Activate
        End With
    End Sub
    Serait- il aussi possible d'avoir des explications pour ce script. Histoire de ne pas vous solliciter si d'aventure de nouvelles colonnes venaient à apparaître dans le fichier initial.

    Merci beaucoup

  2. #2
    Membre habitué Avatar de Klin89
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 119
    Points : 178
    Points
    178
    Par défaut
    Bonsoir morgan75

    Essaie ceci :
    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
    Option Explicit
    Sub transpose()
    Dim a, b(), i As Long, j As Long, n As Long, x
        With Sheets("RHPM SOURCE").Range("a4").CurrentRegion
            a = .Value
        End With
        ReDim b(1 To (((UBound(a, 2) - 5) / 2) * (UBound(a, 1) - 1)), 1 To 8)
        For i = 2 To UBound(a, 1)
            For j = 6 To UBound(a, 2) Step 2
                n = n + 1
                x = Split(a(1, j), "-")
                If LCase(x(0)) = "fevrier" Then x(0) = "février"
                b(n, 1) = a(i, 1): b(n, 2) = a(i, 2): b(n, 3) = a(i, 3)
                b(n, 4) = a(i, 4): b(n, 5) = a(i, 5)
                'b(n, 3) = x(0): b(n, 4) = a(i, j)
                'ici le réajustement
                b(n, 6) = Month(CDate("01/" & "" & x(0) & "")): b(n, 7) = a(i, j)
                b(n, 8) = a(i, j + 1)
            Next
        Next
        With Sheets("RHPM RESULTAT").Cells(1).Resize(, 8)
            .CurrentRegion.Clear
            .Value = [{"Unité","Code Statut","Libellé statut","Code emploi","Libellé emploi","Mois","Eff Prév","Etp Rém"}]
            .Offset(1).Resize(n).Value = b
            With .CurrentRegion
                .Font.Name = "calibri"
                .Font.Size = 10
                .VerticalAlignment = xlCenter
                .BorderAround Weight:=xlThin
                .Borders(xlInsideVertical).Weight = xlThin
                With .Rows(1)
                    .BorderAround Weight:=xlThin
                    .HorizontalAlignment = xlCenter
                    .Interior.ColorIndex = 36
                    .Font.Size = 11
                End With
                .Columns.ColumnWidth = 14
            End With
            .Parent.Activate
        End With
    End Sub
    klin89

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    contrôleur gestion
    Inscrit en
    Septembre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : contrôleur gestion

    Informations forums :
    Inscription : Septembre 2014
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Bonjour Klin89,

    je te remercie pour les modifications apportées à la macro initiale. Elle fonctionne après avoir résolu un bug sur cette ligne de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b(n, 6) = Month(CDate("01/" & "" & x(0) & "")): b(n, 7) = a(i, j)
    que j'ai remplacé par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b(n, 6) = x(0): b(n, 7) = a(i, j)

    J'ai également retiré:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LCase(x(0)) = "fevrier" Then x(0) = "février"
    Ma procédure suivante ne reconnaissant pas février avec un accent.

    Encore merci pour ton aide,

    M75

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

Discussions similaires

  1. [XL-2010] Transposition partielle d'un tableau
    Par morgan75 dans le forum Excel
    Réponses: 4
    Dernier message: 02/09/2016, 15h13
  2. [XL-2003] Transposition particulière d'un tableau
    Par Soycd dans le forum Excel
    Réponses: 7
    Dernier message: 07/07/2010, 15h19
  3. affichage partiel d'un tableau
    Par étoile de mer dans le forum Débuter
    Réponses: 2
    Dernier message: 07/11/2009, 19h23
  4. Foreach et parcours partiel d'un tableau
    Par gandolfi dans le forum Langage
    Réponses: 5
    Dernier message: 05/12/2008, 09h57
  5. Export partiel d'un tableau en CSV
    Par vanitom dans le forum Excel
    Réponses: 2
    Dernier message: 07/02/2008, 20h14

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