Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

transposer un tableau

  • Initiateur de la discussion Initiateur de la discussion br1dil
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

br1dil

Guest
Salut tout le monde,

je souhaiterais faire une macro pour transposer un tableau en ligne en colonne :

ex :
A | B | C | D
1 | couleur | date | presentation | tarif
2 | ........ |........|.. ..... .| ;;;
3 | ........ |........|.. ..... .| ;;;;
4 | ........ |........|.. ..... .| ;;;;

sous la forme

----------------
1 | couleur(1)
----------------
2 | date(1)
----------------
3 | presentation(1)
----------------
4 | tarif(1)
----------------
5 | couleur(2)
----------------
6 | date(2)
----------------
7 | presentation(2)
----------------
8 | tarif(2)
----------------


la particularité de cette macro c'est que tout doit se mettre dans la même colonne.

J'ai réussi à transposer autant de lignes que nécessaire mais je n'arrive pas à les coller les uns en dessous des autres.

merci d'avance....

la br1dil(le)
 
Bonjour

Pas sur d'avoir tout compris regarde en pièce jointe.

Code:
Public Sub vev2()
Dim i As Integer, j As Integer, derligne As Integer
derligne = Range('a65536').End(xlUp).Row
For j = 1 To 4
    For i = 2 To Range('a65536').End(xlUp).Row
        Range('f' & derligne) = Cells(i, j)
        If IsDate(Cells(i, j)) Then Range('f' & derligne) = CDate(Cells(i, j))
        derligne = derligne + 1
    Next i
Next j
End Sub

Salut
Hervé [file name=Classeur3.zip size=8359]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur3.zip[/file]
 

Pièces jointes

En fait,

c'est presque ça mais pas tout à fait.

l'ordre doit rester le même qu'en ligne c'est à dire :

couleur date presentation tarif
vert 14/01/2005 A 10
bleu 15/01/2005 B 20
jaune 16/01/2005 C 30
rouge 17/01/2005 D 40

avec ce tableau on doit obtenir :

couleur
date
presentation
tarif
vert
14/01/2005
A
10
bleu
15/01/2005
B
20

j'ai presque réussi avec votre formule mais il ne me prend que les 4 premières lignes...

merci en tous cas.

La B1dil(le)
 
re

c'est marrant j'etais parti sur cette idée et au dernier moment j'ai changé :

🙂

Code:
Public Sub vev2()
Dim i As Integer, j As Integer, derligne As Integer
derligne = Range('a65536').End(xlUp).Row
For i = 2 To Range('a65536').End(xlUp).Row
    For j = 1 To 4
        Range('f' & derligne) = Cells(i, j)
        If IsDate(Cells(i, j)) Then Range('f' & derligne) = CDate(Cells(i, j))
        derligne = derligne + 1
    Next j
Next i
End Sub

Salut
Hervé
 
Salut Hervé,

merci pour ton aide, toutefois j'aurais une dernière chose à te demander. Comment faire pour que le résultat apparaisse dans un nouveau fichier excel ?

merci d'avance ...
 
bonsoir brindille

Cette macro va créer une feuille (Résultats) faire le traitement dedans, puis se transformer en classeur, et enfin te proposer de sauvegarder. (Pour le café, faudra atteindre, lol)

Attention je n'ai pas mis de gestionnaire d'erreur pour le cas ou une feuille Résultats existerai déjà dans ton classeur (donc si une feuille porte déjà ce nom, bug), si il te le faut dis le moi...

Code:
Public Sub vev2()
Dim i As Integer, j As Integer, n As Integer
Dim nomfeuille As String
'on stock le nom de la feuille active
nomfeuille = ActiveSheet.Name
'on crée la feuille résultat
Sheets.Add.Name = 'Résultats'
'on retourne à la feuille des données
Sheets(nomfeuille).Select
'on fait le traitement
n = 1
For i = 2 To Range('a65536').End(xlUp).Row
    For j = 1 To 4
    With Sheets('Résultats')
        .Range('A' & n) = Cells(i, j)
        If IsDate(Cells(i, j)) Then .Range('a' & n) = CDate(Cells(i, j))
        n = n + 1
    End With
    Next j
Next i
'on déplace la feuille résultats vers un nouveau classeur
Sheets('Résultats').Move
'on ouvre la boite d'enregistrement
Application.GetSaveAsFilename
End Sub

En espérant que ceci te conviendra, sinon tu connais la maison...

Salut
Hervé
 
Merci beaucoup, tout fonctionne très bien, par contre j'essaye de comprendre la formule, à quoi correspond le IsDate & CDate ?
Et si je veux transposer, toujours 4colonnes, en lignes à partir de la colonne 'N' où est-ce que je dois modifier ta formule ?

En tout cas bravo et merci pour ton aide.
 
Bonjour

1)
If IsDate(Cells(i, j)) Then Range('f' & derligne) = CDate(Cells(i, j))=
si la cellule source (cells(i,j) est une date (isdate) alors la cellule cible(Range('f' & derligne) ) doit recevoir la cellule source sous forme de date (Cdate).

Ce code t'évite d'avoir la date sous format standard 38406 (pour aujourd'hui) mais bien au format 23/02/05.

2)
Cette macro fonctionne par boucle avec cells :

cells(i,j)=cells(ligne, colonne)

donc, dans ton cas les colonnes sont la variable j,

dans la boucle for j=1 to 4 = pour la colonne 1 jusqu'a la colonne 4

ainsi pour partir de la colonne N et pour 4 colonnes tu utilises : for j=14 to 17

Voila, j'espère que tu auras compris mes explications, je ne suis pas très pédago.

Salut
Hervé
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
410
Réponses
2
Affichages
325
Réponses
2
Affichages
434
Réponses
0
Affichages
402
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…