Convertir des blocs de données en lignes en colonnes

blord

XLDnaute Impliqué
Bonjour à tous,

J'ai besoin de votre aide pour réaliser une petite macro qui serait en mesure de convertir des données qui se trouvent sur des lignes en colonnes.

Les données sont présentées par bloc de lignes variables puis séparées par deux lignes vides. Par exemple, il y a un premier bloc de lignes de la ligne 1 à 12, les lignes 13 et 14 sont vides, d'autres données sont dans les lignes 15 à 27, les lignes 28 et 29 sont vides etc...

Les nombre de lignes dans les blocs est variable ainsi que le nombre de blocs de lignes...

Comme ces explications risquent d'être confusent, le petit fichier ci-joint devrait être plus facile à comprendre... Les données sont dans la feuille "Source" et le résultat attendu dans la feuille "Résultat".

Merci pour votre aide !

Benoit Lord
 

Pièces jointes

  • test.xls
    14.5 KB · Affichages: 118
  • test.xls
    14.5 KB · Affichages: 117
  • test.xls
    14.5 KB · Affichages: 115

flyonets44

XLDnaute Occasionnel
Re : Convertir des blocs de données en lignes en colonnes

Bonjour
en pj un fichier qui devrait pouvoir t'aider
Cordialement
Flyonets
 

Pièces jointes

  • Convertir_tableau_en _liste.xls
    43 KB · Affichages: 174
  • Convertir_tableau_en _liste.xls
    43 KB · Affichages: 172
  • Convertir_tableau_en _liste.xls
    43 KB · Affichages: 163

Dranreb

XLDnaute Barbatruc
Re : Convertir des blocs de données en lignes en colonnes

Bonjour.
Essayez ça:
VB:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 06/09/2011 par Luck
'

Dim CDéb As Range, CFin As Range, L As Long
Set CDéb = Range("A1"): L = 0
Do
   Set CFin = CDéb.End(xlDown)
   Range(CDéb, CFin).Copy
   L = L + 1
   Sheets("Résultat").Cells(L, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
   Set CDéb = CFin.End(xlDown)
   Loop Until CDéb.Row >= 65536
End Sub
Mais faites des tests avec une seule ligne et autre vacherie, la méthode End a parfois des comportements inattendus.

P.S. d'ailleurs je viens de voir la solution donnée par Fionets, que je salue, Current region serait mieux à cet égard.
À+
 
Dernière édition:

flyonets44

XLDnaute Occasionnel
Re : Convertir des blocs de données en lignes en colonnes

Bonjour
la réponse précedente légèrement modifiée
Sub Macro1()
' Macro enregistrée le 06/09/2011 par Luck
Dim CDéb As Range, CFin As Range, L As Long
Set CDéb = Range("A1"): L = 0
Do
Set CFin = CDéb.Range("A65536").End(xlUp).Row
Range(CDéb, CFin).Copy
L = L + 1
Sheets("Résultat").Cells(L, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Set CDéb = CFin.End(xlDown)
Loop Until CDéb.Row >= cfin
End Sub
Cordialement
Flyonets
 

Dranreb

XLDnaute Barbatruc
Re : Convertir des blocs de données en lignes en colonnes

Alors donc, ma propre macro modifiée:
VB:
Sub Macro1()
Dim CDéb As Range, CRég As Range, L As Long
Set CDéb = Range("A1"): L = 0
Do
   Set CRég = CDéb.CurrentRegion
   CRég.Copy  ' Attention ne marche plus si la colonne B n'est plus vide
   L = L + 1
   Sheets("Résultat").Cells(L, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
   Set CDéb = CRég.Rows(CRég.Rows.Count).End(xlDown)
   Loop Until CDéb.Row >= 65536
End Sub
À+
 

blord

XLDnaute Impliqué
Re : Convertir des blocs de données en lignes en colonnes

Bonjour flyonets44, Dranreb, le Forum,

Tout d'abord, merci pour le fichier joint, je le trouve très intéressant et je vais le conserver pour référence future...

Dans le dernier code de flyonets44 il y a une erreur sur la ligne suivante :
Set CFin = CDéb.Range("A65536").End(xlUp).Row

Le dernier bout de code donné par Dranreb fonctionne parfaitement...

Merci à vous deux pour votre aide si précieuse et bonne fin de journée !

Benoit Lord
 

Discussions similaires

Statistiques des forums

Discussions
312 364
Messages
2 087 624
Membres
103 624
dernier inscrit
PhilduMorvan