[XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

ALBAN92

XLDnaute Nouveau
Bonjour,

je fais appel à votre aide sur un sujet dans lequel je suis littéralement noyé...

J'ai un fichier xl (en PJ) avec deux onglet:
-SOURCE
-CIBLE

L'objectif est par du VBA de présenter les données de l'onglet source au format de l'onglet cible.
1. dans l'onglet source j'ai des formules dont je n'ai pas la nécessité dans l'onglet cible. (Ca Ok)
2. Le nombre de colonne et le nombre de lignes peut varier il faut que la macro s'adapte (Ca OK)
3. l'objectif du fichier cible est de transposer les lignes grisées et les données en rouge autant de fois qu'il y a de colonnes vertes

Et c'est que je me paume... comment faire pour que la répétition des mes ligne grisées et mes données en rouge soit reprise à chaque fois tout en rapatriant les données qui figuraient en colonne afin de le mettre en ligne.

Les entêtes de lignes deviennent des entêtes de colonnes les datas en lignes deviennent des datas en colonne et vice versa... bref je suis paumé...

Je pense que ma cible est parfaitement définie car le problème peut aussi parfois venir de la mais c'est bien ce modele que je cherche a obtenir.

MErci d'avance a ceux qui ont eu le courage de s'y pencher.
 

ALBAN92

XLDnaute Nouveau
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Bon en relisant je crois que je me suis un peu emballé dans ma demande...
 

gosselien

XLDnaute Barbatruc
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

et ???
quelle est la question donc ?
 

ALBAN92

XLDnaute Nouveau
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Je retente l'explication de mon problème?

Je souhaite réaliser une Macro qui permettrait deux choses :

1. recopier et surtout répéter les lignes d'un tableau autant de fois que le nombre de colonne figurant dans un second tableau.
Cela permettrait pour mon point 2 :
2. de transposer les données et entête de mes colonnes sous forme de ligne dans mon nouveau tableau.

Afin d'expliciter mon problème j'ai simplifié mon premier doc :

Donc l'onglet "source" j'ai deux tableau un bleu et un orange
L'objectif est que dans mon onglet "cible" les lignes du tableau bleu soient répétées autant de fois que j'ai de colonne dans le tableau orange de mon onglet "source".
Cela afin de transposer mon tableau orange présenté sous forme de colonne en ligne dans mon tableau "cible".

Bien sur la petite spécificité est que le nombre de colonne de mon tableau 'orange' peut varié ainsi que le nombre de ligne de mon tableau bleu.

Achèvement de la journée : je suis arrivé à faire une macro permettant de déterminer le nombre de colonne de mon tableau orange... et ainsi déterminer le nombre de fois que doivent etre copiées les lignes de mon tablea bleu... bref j'aurai fini dans deux ans quoi :s
 

ALBAN92

XLDnaute Nouveau
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Bonjour a tous,

Forcé de constaté que mon sujet ne rencontre pas un franc succès... certainement qu'il est mal explicité...

je me permets malgré cela un partage de mes avancées suite à ma demande sait on jamais quelqu'un pourrait trouver cela interressant voir pourrait m'aiguiller sur la suite

J'ai donc réussi a rapatrié par une macro des lignes d'un tableau source (bleu) et surtout de les répéter autant de fois qu'il y a de données en colonne dans la seconde partie de mon tableau source (orange).

la suite de mes travaux à réaliser:

- Rapatrier les datas qui se trouvaient en ligne dans le second tableau source (orange) afin de les mettre en colonne dans mon tableau cible pour chacune des lignes rapatriées.

-Second point mais annexe la macro ne tient jamais compte de la dernière ligne de mon tableau source ...

je vous joint le doc avec la macro

Si quelqu'un pouvait m'aiguiller sur le premier point ca serait grandement apprécier :))
bonne journee
 

gosselien

XLDnaute Barbatruc
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Bonjour,

je ne saurai pas t'aider mais tu boucles beaucoup dans ton code, notamment pour la dernière ligne;
j'ai testé juste ceci :

'Call ChercheLigneVide_ligne
ligne = Feuil3.[A65000].End(xlUp).Row + 1
Cells(ligne, 1).Activate 'si tu tiens à garder ton "activecell"
With ActiveCell
etc etc...

ensuite pour calculer le nombre de lignes tu te bases sur le nombre de données dans Kx à Ox , je pense

je mettrais:
tFlux = Application.CountA(Feuil1.Range("K" & i & ":" & "O" & i))

ceci compte en ligne 3-4-5 etc le nombre de data dans la feuil1 (feuil1 est le codename-et peut remplacer sheets("source"))
 

ALBAN92

XLDnaute Nouveau
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Bonjour et merci pour ton retour,

En fouillant sur de multiple forum j'ai trouver cette macro qui me permet de transposé en liste l'ensemble des datas de mon tableau en supprimant les cellules vides.
PHP:
Sub transposer()

    Dim PlageSource As Range
    Dim FeuilleResultat As Worksheet

    Dim NumColonneResultat As Integer
    Dim NumLigneResultat As Integer
    Dim Cell As Range
    Dim Un As Collection
    Dim i As Long
 
    ' nommer tous les endroits sur lesquels on travaille. ca permettra de modifier plus facilement plus tard
    Set PlageSource = Workbooks("classeur10.xlsm").Worksheets("test").Range("A3:E8")
    Set FeuilleResultat = Workbooks("classeur10.xlsm").Worksheets("test2")
     NumColonneResultat = 2
     NumLigneResultat = 1
 
    ' creer une liste sans doublons, d'après un tuto de Silkyroad
    Set Un = New Collection
    On Error Resume Next
    'Boucle sur la plage de cellule
    For Each Cell In PlageSource
        'If Cell <> "" Permet de ne pas prendre en compte les cellules vides
        'Un.Add Cell, CStr(Cell) Ajoute le contenu de la cellule dans la collection
        'le 2ème argument Cstr(cell) est le TAG de l'élément. Le tag est unique, c'est ca qui évite les doublons
        'ici on choisi le contenu de la cellule, transformé en chaine de caractere (par Cstr)
        If Cell <> "" Then Un.Add Cell, CStr(Cell)
    Next Cell
    On Error GoTo 0
 
    'Boucle sur les éléments de la collection
    'les écrire dans feuille2, en chagneant de colonne à chaque fois
    For i = 1 To Un.Count
        FeuilleResultat.Cells(NumLigneResultat + i - 1, NumColonneResultat) = CStr(Un(i).Value)
    Next i
 
    Set Un = Nothing
End Sub
Avec ce code et la fonction transposée j'arriverai je pense à mes fins.

Cependant car il y a toujours un mais.. le code exclu les doublons alors que moi je ne souhaite pas les exclure. je souhaite qu'ils soient repris et ca je n'arrive pas a modifier le code pour "squeezer" cette étape :/
 

Efgé

XLDnaute Barbatruc
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Bonjour à tous

Une proposition avec ce que j'ai compris.
Reste à lier la macro au bouton.

VB:
Sub Test()
Dim i&, J&, L&
Dim TReport As Variant, TData As Variant, TAlea As Variant
Dim RngAlea As Range
L = 1
With Sheets("SOURCE")
    TData = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(3).Offset(, 8))
    Set RngAlea = .Range(.Cells(2, 11), .Cells(2, .Columns.Count).End(1).Offset(UBound(TData, 1), 0))
End With
TAlea = RngAlea
nbLigne = Application.CountA(RngAlea)
ReDim TReport(1 To nbLigne, 1 To (UBound(TData, 2) + 2))
For J = 1 To UBound(TData, 2)
    TReport(1, J) = TData(1, J)
Next J
TReport(1, UBound(TData, 2) + 1) = "Titre"
TReport(1, UBound(TData, 2) + 2) = "Titre2"
For i = 2 To UBound(TData, 1)
    For J = 1 To UBound(TAlea, 2)
        If TAlea(i, J) <> "" Then
            L = L + 1
            For k = 1 To UBound(TData, 2)
                TReport(L, k) = TData(i, k)
            Next k
            TReport(L, k) = TAlea(1, J)
            TReport(L, k + 1) = TAlea(i, J)
        End If
    Next J
Next i
With Sheets("CIBLE")
    .Cells(3, 1).CurrentRegion.ClearContents
    .Cells(3, 1).Resize(UBound(TReport, 1), UBound(TReport, 2)) = TReport
    .Activate
End With
End Sub
Cordialement
 

Fichiers joints

gosselien

XLDnaute Barbatruc
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Dim Un As Collection

' creer une liste sans doublons, d'après un tuto de Silkyroad
Set Un = New Collection



Cependant car il y a toujours un mais.. le code exclu les doublons alors que moi je ne souhaite pas les exclure. je souhaite qu'ils soient repris et ca je n'arrive pas a modifier le code pour "squeezer" cette étape :/
il est indiqué dans le début du code: une collection, comme un dictonnaire exclu les doublons...
tu ne doit pas passer ce cet outil :)
 

ALBAN92

XLDnaute Nouveau
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Bon que dire... Merci!!

Merci à vous deux Gosselien et Efgé!

Merci Gosselien pour les pistes et remarques pertinentes qui m'ont fait avancé!
Merci Efgé pour ce code parfaitement fonctionnel qui n'a rien a voir avec le mien qui semble daté de l'age de pierre...

Par contre je déteste ne pas comprendre et la il va falloir que je le décortique a fond pour comprendre la logique derrière

Pour ensuite l'appliquer sur plusieurs centaines de fichiers ... Gloups :)

Merci encore a vous deux!!
 

gosselien

XLDnaute Barbatruc
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

C'est OK alors ?

Je demande pour ne plus chercher sur ton fichier à corriger des erreurs de jeunesse :)

P.
 

Efgé

XLDnaute Barbatruc
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Re

Une version avec ajout de la déclaration de variables oubliées et des commentaires.

Cordialement
 

Fichiers joints

ALBAN92

XLDnaute Nouveau
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Gosselien merci mais c'est bon je vais travailler depuis le fichier de Efgé merci encore pour ton aide
 

Efgé

XLDnaute Barbatruc
Re : [XL 2010] VBA Comment transposé un tableau "complexe" en ligne et en colonne

Re

Suite à
MP, la structure étant différente de l'exemple initial, une nouvelle version.
Regardez les différences entre les deux pour comprendre (en particulier le décalage de +10 lié à la présentation des données)

Cordialement
 

Fichiers joints

Discussions similaires


Haut Bas