changer info d'une ligne plusieurs colonne en 1 colonne plusieurs lignes

mumu

XLDnaute Occasionnel
Bonjour,

Je n'arrive pas à trouver de début de solution à mon problème sur le forum......
Je mets un bout de mon fichier pour que ce soit plus simple.
En fait je voudrais transformer les informations qui sont sur une ligne et plusieurs colonnes en seulement deux colonnes et plusieurs lignes.....

Je n'arrive pas à coder quelque chose de correct....

Merci pour votre aide !!

Mumu
 

Pièces jointes

  • Classeur1.xls
    19 KB · Affichages: 90
  • Classeur1.xls
    19 KB · Affichages: 86
  • Classeur1.xls
    19 KB · Affichages: 91

James007

XLDnaute Barbatruc
Re : changer info d'une ligne plusieurs colonne en 1 colonne plusieurs lignes

Bonjour Mumu :)

Est-ce-que le fichier joint serait un point de départ ...?

A +
:)
 

Pièces jointes

  • TestMumu.xls
    27.5 KB · Affichages: 123
  • TestMumu.xls
    27.5 KB · Affichages: 122
  • TestMumu.xls
    27.5 KB · Affichages: 119

mumu

XLDnaute Occasionnel
Re : changer info d'une ligne plusieurs colonne en 1 colonne plusieurs lignes

Salut James007,

Ah ben je suis impressionnée.... Pour un point de départ, c'est exactement ce que je cherche et la réponse a été plus que rapide !!!
En plus j'apprends de nouvelles fonctions.

Merci beaucoup, ya plus qu'à le transcrire dans une macro mais je devrais y arriver.
Bonne soirée.

Mumu
 

James007

XLDnaute Barbatruc
Re : changer info d'une ligne plusieurs colonne en 1 colonne plusieurs lignes

Bonjour Mumu, :)

Je n'ai même pas vu, qu'en parlant de coder ... tu avais besoin d'une macro ...

Du coup, pour me faire pardonner, ci-joint un fichier test avec les deux solutions
( formule et macro )

VB:
Sub Projet()
Dim i%, x%, der%
' Dernière ligne de la Colonne A
der = Cells(Cells.Rows.Count, "A").End(xlUp).Row
' Nettoyer plage des résultats
Range("L2:M" & ((der - 1) * 4) + 1).ClearContents
' Boucle pour afficher résultats en Colonnes L et M
    For i = 2 To der
        For x = 0 To 3
            Range("L" & ((i - 2) * 2 + (i - 1) * 2) + x).Value = Range("A" & i).Value & " _" & Cells(1, 2 + x)
            Range("M" & ((i - 2) * 2 + (i - 1) * 2) + x).Value = Cells(i, 2 + x).Value
        Next x
    Next i
End Sub

A +
:)
 

Pièces jointes

  • TestMumu.zip
    13.4 KB · Affichages: 36

david84

XLDnaute Barbatruc
Re : changer info d'une ligne plusieurs colonne en 1 colonne plusieurs lignes

Bonjour,
simple prétexte pour saluer James :):
Projet+phase :
Code:
=INDIRECT(ADRESSE(ENT((LIGNES($1:1)-1)/4)+2;1))&"_"&INDIRECT(ADRESSE(1;MOD(LIGNE()-2;4)+2))
Montant :
Code:
=INDIRECT(ADRESSE(ENT((LIGNES($1:1)-1)/4)+2;MOD(LIGNE()-2;4)+2))
Par contre une question concernant la macro : je me demande si le fait de retranscrire le type de formules utilisées en VBA n'aurait pas été plus rapide qu'une boucle...
A+
 

david84

XLDnaute Barbatruc
Re : changer info d'une ligne plusieurs colonne en 1 colonne plusieurs lignes

Re
Juste pour voir, ci-joint code fait à l'aide de l'enregistreur de macro (cf onglet test).
Je poste pour info mais ceci dit, en plaçant application.screenupdating dans ton code (onglet James), c'est rapide comme cela, donc pas la peine de modifier je pense...
A+
 

Pièces jointes

  • TestMumu.xls
    71.5 KB · Affichages: 65
  • TestMumu.xls
    71.5 KB · Affichages: 72
  • TestMumu.xls
    71.5 KB · Affichages: 73

Efgé

XLDnaute Barbatruc
Re : changer info d'une ligne plusieurs colonne en 1 colonne plusieurs lignes

Bonjour mumu, James ; ), david84,
Juste pour proposer une version sans formule,
VB:
Private Sub CommandButton1_Click()
Dim Plg, i%, j&, Tablo(), TabRow&, Cpt&, MaxTab&
Application.ScreenUpdating = False
Plg = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 5)).Value
Cpt = UBound(Plg, 1)
MaxTab = Cpt * 4
Range(Cells(2, 9), Cells(MaxTab, 10)).ClearContents
ReDim Tablo(1 To MaxTab, 1 To 2)
For i = 2 To Cpt
    For j = 2 To 5
        'If Plg(i, j) <> "" Then ' possibilité de ne conserver que les cellules non vides
            TabRow = TabRow + 1
            Tablo(TabRow, 1) = Plg(i, 1) & "-" & Plg(1, j)
            Tablo(TabRow, 2) = Plg(i, j)
        'End If
    Next j
Next i
Cells(2, 9).Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
Application.ScreenUpdating = True
End Sub
Cordialement
 

Pièces jointes

  • TestMumu(3).zip
    26.2 KB · Affichages: 40
Dernière édition:

James007

XLDnaute Barbatruc
Re : changer info d'une ligne plusieurs colonne en 1 colonne plusieurs lignes

Bonjour à tous, salut Efgé :)

Effectivement, pour coder propre, et surtout pour anticiper les énormes fichiers (de plus de dix lignes), la variable tableau() est infiniment plus performante ...

A +
:)
 

mumu

XLDnaute Occasionnel
Re : changer info d'une ligne plusieurs colonne en 1 colonne plusieurs lignes

Bonsoir tout le monde,

Que de solutions à mon problème, c'est fou ce que mes connaissances sont limitées !!
Merci à vous, je ne sais que choisir du coup.
Et pour te rassurer, James007, tu es tout pardonné de ne pas avoir codé dans ton premier post ;) !!!!

Merci encore et à bientôt sur le forum !

Mumu
 

Discussions similaires

Statistiques des forums

Discussions
312 506
Messages
2 089 121
Membres
104 038
dernier inscrit
Helpme59