Transformer un tableau de plusieurs colonnes en 1 seule colonne

loulourav

XLDnaute Occasionnel
Bonjour à tous,

je suis souvent confronté à ce genre de manip que je réalise à la main, mais je suis sûr qu'il y a un moyen via des formules de faire ceci en "automatique"

voici le genre de tableau que j'ai de base :

tab.PNG

et ce que je souhaite obtenir :

tab2.jpg

soit en littéral :
les valeurs en ligne sont transposées, et la colonne B (avec les code 1010,1011,1012 etc ...) est recopiée 12 fois en l’occurrence, du moins autant de fois qu'il y a de valeurs.


Qu'est il possible de faire pour ne pas faire des copié/coller/transposer ... ???

merci de votre aide
 

Pièces jointes

  • tab.PNG
    tab.PNG
    58.5 KB · Affichages: 272
  • help.xlsx
    18.2 KB · Affichages: 78
  • help.xlsx
    18.2 KB · Affichages: 74
  • help.xlsx
    18.2 KB · Affichages: 71
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Transformer un tableau de plusieurs colonnes en 1 seule colonne

RE:

Ah, c'est plus simple avec un fichier exemple (on ne le dira jamais assez).

C'est le calcul de la dernière colonne renseignée qui n'était pas adapté à la structure des onglets.

Voici donc une copie modifiée qui me semble répondre à ta question.

Cordialement.
 

Pièces jointes

  • macro_modifiee_pour_transposer_un_tableau.xlsm
    601.6 KB · Affichages: 108

loulourav

XLDnaute Occasionnel
Re : Transformer un tableau de plusieurs colonnes en 1 seule colonne

ok ca fonctionne bien désormais ;)
2 remarques cependant :

RE:

C'est le calcul de la dernière colonne renseignée qui n'était pas adapté à la structure des onglets.

pourquoi ... ????

ensuite, est ce que la ligne :
For i = 3 To Feuil1.Range("A65535").End(xlUp).Row

limite la feuille 1 à 65535 lignes ?

enfin, je vois que ce n'est pas tant le nombre de colonne non vide qui détermine le "ncol" mais plutôt les valeurs vides de ces colonnes.
(par exemple sur le fichier que tu m'a retourné, n'ayant aucune donnée du 07/12/2014 au 15/12/2014, les dates n'ont pas été transposées dans 'feuil2')
est ce possible d'y remédier ou par défaut une valeur 0 doit être présente ? en lieu et place de ""


désolé si j'abuse :rolleyes:
 
Dernière édition:

klin89

XLDnaute Accro
Re : Transformer un tableau de plusieurs colonnes en 1 seule colonne

Bonsoir à tous,

Non testé sous Excel 2007
VB:
Sub test1()
Dim a, b(), i As Long, j As Long, n As Long
    With Sheets("Feuil1").Range("a2").CurrentRegion
        a = .Value
        ReDim b(1 To .Cells.Count, 1 To 3)
    End With
    For i = 2 To UBound(a, 1)
        For j = 3 To UBound(a, 2)
            n = n + 1
            b(n, 1) = a(i, 1)
            b(n, 2) = a(1, j)
            b(n, 3) = a(i, j)
        Next
    Next
    With Sheets("Feuil2").Cells(1).Resize(n, 3)
        .CurrentRegion.Clear
        .Value = b
        On Error Resume Next
        .Columns(3).SpecialCells(xlCellTypeBlanks) = 0
        On Error GoTo 0
    End With
End Sub
klin89
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Transformer un tableau de plusieurs colonnes en 1 seule colonne

ensuite, est ce que la ligne :
For i = 3 To Feuil1.Range("A65535").End(xlUp).Row
limite la feuille 1 à 65535 lignes ?

Elle limite le calcul sur 65535 lignes, mais ne change en rien le nombre de lignes par défaut des onglets. Cette valeur m'avait échappé. Pour ma part, je préfère toujours utiliser Rows.Count qui récupère le nombre total de lignes suivant la version d'excel.

enfin, je vois que ce n'est pas tant le nombre de colonne non vide qui détermine le "ncol" mais plutôt les valeurs vides de ces colonnes.
(par exemple sur le fichier que tu m'a retourné, n'ayant aucune donnée du 07/12/2014 au 15/12/2014, les dates n'ont pas été transposées dans 'feuil2')
est ce possible d'y remédier ou par défaut une valeur 0 doit être présente ? en lieu et place de ""

Si tu veux faire figurer les cellules vides, il suffit alors de supprimer la condition If...End If et l'affichage concernera les colonnes qui comportent une date.

Je te propose donc de peaufiner ton code comme ceci:

Code:
Sub Bouton1_Clic()
With Sheets("Feuil2")
  Sheets("Feuil2").Cells.Delete
  ligne = 2
  ncol = Feuil1.Cells(2, Columns.Count).End(xlToLeft).Column
  For i = 3 To Feuil1.Range("A" & Rows.Count).End(xlUp).Row
    For j = 3 To ncol
        .Cells(ligne, 1) = Feuil1.Cells(i, 1)
        .Cells(ligne, 2) = Feuil1.Cells(2, j)
        .Cells(ligne, 3) = Feuil1.Cells(i, j)
        ligne = ligne + 1
    Next j
  Next i
  .Select
End With
End Sub
Cordialement.
 

ED31

XLDnaute Junior
Re : Transformer un tableau de plusieurs colonnes en 1 seule colonne

Bonjour,
Problème classique.
Je fais un INDEX sur le tableau en faisant varier le no de ligne avec Modulo x (nb colonnes du tableau) donc en générant deux colonnes noligne no colonne.
Mais je crois qu'Excel propose une commande dans le menu Données pour transformer un tableau en "base de données", au moins sur ma version (Excel 2007). Sinon, macro (c'est vendredi aujourd'hui).
 

loulourav

XLDnaute Occasionnel
Re : Transformer un tableau de plusieurs colonnes en 1 seule colonne

hello,
d'abord tout mes vœux à tous (et toutes)
je déterre mon sujet, car j'ai une demande similaire à celle traitée plus haut mais un peu plus complexe (il me semble ...)
dans la même optique de transposer des valeurs de ligne en colonne, cette fois ci en plus j'aurai besoin de le faire pour plusieurs onglet.
J'ai un fichier mensuel avec un onglet pour chaque jour du mois, à la fin de ce fichier j'ai besoin de faire une récap des infos de chaque onglet via un TCD, les données doivent être sous forme de colonne.

je vous laisse mon fichier test avec 2 jours + la récap que j'ai fait à la main
j'ai laissé qlqs commentaires qui je l'espère seront assez explicite !
NB : le nombre de colonne (secteur) est susceptible de varier d'un onglet à l'autre ...

PS : au passage si vous avez une autre astuce pour le calendrier en B2 je suis preneur, de temps en temps il devient devient démesuré et un autre apparaît en haut de la feuille ...

merci !
 

Pièces jointes

  • rapport test.xlsx
    34.3 KB · Affichages: 42
  • rapport test.xlsx
    34.3 KB · Affichages: 57
  • rapport test.xlsx
    34.3 KB · Affichages: 53
Dernière édition:

Discussions similaires

Réponses
16
Affichages
486

Statistiques des forums

Discussions
312 304
Messages
2 087 062
Membres
103 447
dernier inscrit
DamD