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 vertical variable en tableau horizontal fixe.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de RastaBomboclat
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2014
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 240
    Par défaut Transposer un tableau vertical variable en tableau horizontal fixe.
    Bonjour la communauté,

    Je reviens avec un problème qui nécessitera, je pense, une bonne maitrise de la notion des boucles et tableaux. Parce que j’ai essayé de le faire avec les fonctions d’Excel telles que Lookup et VLookup, mais ça n’a pas marché. Voilà pourquoi je me tourne vers les macros.

    Au fait, j’aimerai transferer des données d'une tableau(initial) vers un autre(final). Sauf que le tableau final est fixe alors que le tableau initial ne n'est pas. Sur mon tableau initial, la colonne A peut avoir pour le premier sous-total de 3 a 15 lignes de donnée. Alors que dans le tableau final(dans la feuille "Format Final") il y a 15 Colonnes prédefinies qui doivent etre remplies avec les données du tableau initial(qui se trouve dans sur la 1ere feuille "Format Initail").
    Pour mieux me faire comprendre je joints un fichier pour mieux illuster la situation.

    P.S.: Messieurs les Administrateur du groupe, j'ai en effet une autre question en attente sur un autre post, qui n'est pas encore completement resolu. Je post celle-ci parce que c'est un autre problème auquel je fais face et que je souhaiterai vraiment resoudre avant Noël, voila pourquoi, messieurs les Administrateurs du groupe, je vous pries de ne pas bloquer ce post, mais au contraire d'y contribuer avec une belle solution

    Merci à tous pour vos contribution.

    Rasta Bomboclat
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Un truc dans le genre ?
    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
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Tbl()
        Dim TblDonnees
        Dim I As Integer
        Dim J As Integer
     
        With Worksheets("Format Initial")
     
            Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        'titres des colonnes
        TblDonnees = Array("Donnée_1", "Donnée_2", "Donnée_3", "Donnée_4", "Donnée_5", _
                           "Donnée_6", "Donnée_7", "Donnée_8", "Donnée_9", "Donnée_10", _
                           "Donnée_11", "Donnée_12", "Donnée_13", "Donnée_14", "Donnée_15")
     
        'défini le nombre de lignes du tableau (+ 1 = ligne des titres)
        I = Application.CountIf(Plage, "Total_Données") + 1
     
        'les bornes étant connues, dimensionne le tableau
        ReDim Tbl(1 To I, 1 To UBound(TblDonnees) + 1)
     
        'rempli la première ligne (titres)
        For I = 1 To UBound(TblDonnees) + 1: Tbl(1, I) = TblDonnees(I - 1): Next I
     
        'évite la ligne des titres
        I = 2
     
        For Each Cel In Plage
     
            If Cel.Value <> "Total_Données" Then
     
                'récupère la valeur de la cellule en colonne B (à adapter, Débit=1 ou Crédit=2)
                Tbl(I, Application.Match(Cel.Value, TblDonnees, 0)) = Cel.Offset(, 1).Value
     
            Else
     
                'ligne suivante
                I = I + 1
     
            End If
     
        Next Cel
     
        'colle le tableau dans la feuille
        With Worksheets("Format Final"): .Range(.Cells(1, 1), .Cells(UBound(Tbl, 1), UBound(Tbl, 2))).Value = Tbl: End With
     
    End Sub

  3. #3
    Membre éclairé Avatar de RastaBomboclat
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2014
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 240
    Par défaut
    C'est vraiment Noël!!!
    J'ai une réponse en moins de 12h. J'ai dû vraiment assurer cette année; le père Noël viendra, je crois.

    Merci Theze!, je l'essaie tout de suite...

    Rasta Bomboclat

    Merci encore pour ton code Theze.

    Il fonctionne mais a moitié. C'est-à-dire que quand la partie Débit fonctionne, la partie Crédit ne fonctionne pas, et vis-vers-ça.
    j'ai vu dans le code un commentaire "à adapter", mais mes adaptation ne marchent pas.

    Pourrais-tu, s'il te plaît, essayer de trouver une adaptation qui puisse faire fonctionner les deux colonnes (Débít et Crédit)?

    Merci a tous pour votre contribution et participation.

    Rasta Bomboclat

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Tu veux récupérer les deux valeurs (Débit et Crédit), si c'est le cas, il te faut 2 tableaux ou alors, concaténer les deux valeurs dans la même cellule mais dans ce cas, il te sera plus difficile d'effectuer des calculs !

    dans l'hypothèse où tu veux récupérer les deux valeurs, elles seront dans deux tableaux différents :
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim TblDebit()
        Dim TblCredit()
        Dim TblDonnees
        Dim I As Integer
        Dim J As Integer
     
        With Worksheets("Format Initial")
     
            Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        'titres des colonnes
        TblDonnees = Array("Donnée_1", "Donnée_2", "Donnée_3", "Donnée_4", "Donnée_5", _
                           "Donnée_6", "Donnée_7", "Donnée_8", "Donnée_9", "Donnée_10", _
                           "Donnée_11", "Donnée_12", "Donnée_13", "Donnée_14", "Donnée_15")
     
        'défini le nombre de lignes du tableau (+ 1 = ligne des titres)
        I = Application.CountIf(Plage, "Total_Données") + 1
     
        'les bornes étant connues, dimensionne les tableaux
        ReDim TblDebit(1 To I, 1 To UBound(TblDonnees) + 1)
        ReDim TblCredit(1 To I, 1 To UBound(TblDonnees) + 1)
     
        'rempli la première ligne de chaque tableau (les titres)
        For I = 1 To UBound(TblDonnees) + 1: TblDebit(1, I) = TblDonnees(I - 1): Next I
        For I = 1 To UBound(TblDonnees) + 1: TblCredit(1, I) = TblDonnees(I - 1): Next I
     
        'évite la ligne des titres
        I = 2
     
        For Each Cel In Plage
     
            If Cel.Value <> "Total_Données" Then
     
                'récupère la valeur de la cellule en colonne B (débit) et C (crédit)
                J = Application.Match(Cel.Value, TblDonnees, 0) 'pour positionner les valeurs dans les tableaux
                TblDebit(I, J) = Cel.Offset(, 1).Value
                TblCredit(I, J) = IIf(J = 1, Cel.Offset(, 1).Value, Cel.Offset(, 2).Value)
     
            Else
     
                'ligne suivante
                I = I + 1
     
            End If
     
        Next Cel
     
        'colle le tableau dans la feuille
        With Worksheets("Feuil1") '"Format Final")
     
            .Cells(1, 1).Value = "Tableau Débit"
            .Range(.Cells(2, 1), .Cells(UBound(TblDebit, 1) + 1, UBound(TblDebit, 2))).Value = TblDebit
     
            .Cells(UBound(TblDebit, 1) + 2, 1).Value = "Tableau Crédit"
            .Range(.Cells(UBound(TblCredit, 1) + 3, 1), .Cells(UBound(TblCredit, 1) * 2 + 2, UBound(TblCredit, 2))).Value = TblCredit
     
        End With
     
    End Sub

  5. #5
    Membre éclairé Avatar de RastaBomboclat
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2014
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 240
    Par défaut
    Merci Theze pour ton retour rapide et aussi ton code.
    Je le teste tout de suite.

    Entretemps, je voulais rappeler que le but pour moi est d’obtenir dans le format que j’utilise, les infos reçu d’un autre département. Il me les envois en brut comme dans la feuille « Format Initial », et moi je voudrai les mettre dans le format que j’utilise et ainsi terminer mon travail. Sauf que quand les données font plus de 5000 ligne, les faire une à une n’est pas du tout pratique. Donc pour moi Il ne suffit que je puis transposer le fichier (Format Initial) que je reçois de mon collègue dans mon format (Format Final), et pour le reste je pourrai facilement me débrouiller.

    Il y a des Données (Donnée_1 ; Donnée_2 ; Donnée_3 ; …) qui sont toujours au débit et d’autres (Donnée_10, Donnée_11 ; Donnée_12 ; …) qui sont toujours au Crédit. Si je les identifiais une a une, peut-être que ça simplifierai les choses ?

    • Débit (Donnée_1 à Donnée_9)
    • Crédit (Donnée_10 à Donnée_15)

    Merci à tout le monde pour la contribution et participation.

    Rasta Bomboclat

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Il y a des Données (Donnée_1 ; Donnée_2 ; Donnée_3 ; …) qui sont toujours au débit et d’autres (Donnée_10, Donnée_11 ; Donnée_12 ; …) qui sont toujours au Crédit. Si je les identifiais une a une, peut-être que ça simplifierai les choses ?
    A moins que tu ais un compilateur devin, je pense qu'il serait préférable des les identifier les unes par rapport aux autres !

  7. #7
    Membre éclairé Avatar de RastaBomboclat
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2014
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 240
    Par défaut
    Merci Theze, il fonctionne bien, et en principe je devrais me caller sur ce dernier code, et mettre une petite formule Excel pour regrouper les deux tableaux en un seul, puisque le plus gros a été fait. Mais je décelé une omission de ma part. Je l'explique plus bas.

    P.S.:
    Dans le code sur la ligne 56, il y a eu une erreur que j’ai corrigée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     With Worksheets("Feuil1") '"Format Final")
    Je l’ai remplacer d’abord par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     With Worksheets("1") '"Format Final")
    Ce qui m’a mis la réponse attend sur ma feuille “Format Initial”, puis j’ai corrigé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets("2") '"Format Final")
    Ce qui m’a résolu la petite erreur.

    Quand j'ai essayer finalment de l'appliquer sur mon fichier de travail, une erreur a été generé.
    Je viens de me rendre compte que la « Donnée_1 » est variable, puisqu’étant un code employé (tel que DA1234 ou LU1234). C’est le seul problème qui reste. Comme les code employés changent pour chaque employé, on ne peut plus declarer dans le TblDonnes "Données_1". Vraiment désolé pour ce gros oubli. Il y a-t-il moyen d'y remedier ?

    j'ai joint le fichier ci-dessous.

    Merci à tout le monde pour la contribution et participation.

    Rasta Bomboclat
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Transformer tableau vertical en tableau horizontal
    Par misterlagaffe dans le forum IHM
    Réponses: 7
    Dernier message: 06/08/2014, 12h36
  2. Alignement horizontal/vertical d'une tableau
    Par 01011 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 7
    Dernier message: 11/01/2010, 18h14
  3. Ascenseurs horizontal et vertical dans un tableau
    Par pc75 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 19/02/2009, 15h44
  4. Modifier mon tableau vertical/horizontal
    Par nova313 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/12/2008, 21h27
  5. tableau vertical alors qu'on le veut horizontal
    Par schats dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 04/10/2007, 14h50

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