L'inverse d'un Tableau Croisé

CyK

XLDnaute Junior
Bonjour le Forum et d'avance merci.

Voilà j'ai en données source un tableau qui s'apparenterai dans sa présentation à un tableau croisé dynamique et je cherche à en reconstituer la liste. Je cherche donc à reconstituer les lignes qui décrivent les 'croisements' de mon tableau.

une belle image valant mieux qu'un long discours je vous joint le fichier.

Une idée, j'ai essayé de chercher sur le Forum et sur Goog mais sans succès. [file name=TcToListe.zip size=13176]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TcToListe.zip[/file]
 

Pièces jointes

  • TcToListe.zip
    12.9 KB · Affichages: 24

Hervé

XLDnaute Barbatruc
Bonjour Cyk, le forum

Une proposition en pièce jointe, par vba.

Sub Bouton5_QuandClic()
Dim tablo()
Dim i As Byte, j As Byte, x As Byte
Dim derligne As Byte

x = 1

For i = 3 To Cells(1, 256).End(xlToLeft).Column
derligne = Cells(65536, i).End(xlUp).Row
   
For j = 2 To derligne
       
If Cells(j, i) <> '' Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
ReDim Preserve tablo(1 To 4, 1 To x)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tablo(1, x) = Cells(1, i)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tablo(2, x) = Cells(j, 1)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tablo(3, x) = Cells(j, 2)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tablo(4, x) = Cells(j, i)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x = x + 1
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
Next j
Next i

Sheets('feuil2').Range('a1').Resize(UBound(tablo, 2), UBound(tablo, 1)) = WorksheetFunction.Transpose(tablo)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End Sub

Renvoi des infos en feuille 2

salut
[file name=TcToListev2.zip size=17832]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TcToListev2.zip[/file]
 

Pièces jointes

  • TcToListev2.zip
    17.4 KB · Affichages: 29

Hervé

XLDnaute Barbatruc
Re Cyk , le forum

J'avais pas vu que tu voulais aussi trier par produit, oublie corrigé dans la pièce jointe.

Le produit 29 n'est pas renseigné dans ta liste exemple, c'est normal ?

salut
[file name=TcToListev3.zip size=18457]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TcToListev3.zip[/file]

Message édité par: Hervé, à: 16/09/2005 15:40
 

Pièces jointes

  • TcToListev3.zip
    18 KB · Affichages: 57

CyK

XLDnaute Junior
Bon ç'est sur la bonne voie, merci de ton aide Hervé, si j'applique le code sur ma feuille (qui compte sur le docs que je travaille 65 colonnes et 129 lignes mais qui pourrait en contenir plus) j'ai un dépassement de capacité sur X=X+1. évidemment quand x atteind 255 ! peut on agrandir le tablo ?
 

CyK

XLDnaute Junior
Merci Pascal et Hervé : ça marche impec sur toute la feuille mais uniquement si le bouton est placé sur la feuille, si le bouton est sur une autre feuille (ce qui est mon cas, la feuille 'TCD' etant inexistante au départ et crée à la volée) çela me retourne une erreur d'indice. J'active la feuille source en faisant un
Code:
Sheets('Ruptures Expés').Select
Si avant la boucle je fais un MsgBox ActiveSheet.Name j'ai bien la bonne feuille source activée.

Apparemment la boucle ne lit pas la bonne feuille car la première erreur se produit sur UBound(tablo, 2).
 

Hervé

XLDnaute Barbatruc
Re Cyk, pascal, le forum

Cyk, tu nous donne les infos aux comptes gouttes :)

With Sheets('TCD') 'A ADAPTER
For i = 3 To .Cells(1, 256).End(xlToLeft).Column
derligne = .Cells(65536, i).End(xlUp).Row
For j = 2 To derligne
If .Cells(j, i) <> '' Then
ReDim Preserve tablo(1 To 4, 1 To x)
tablo(1, x) = .Cells(1, i)
tablo(2, x) = .Cells(j, 1)
tablo(3, x) = .Cells(j, 2)
tablo(4, x) = .Cells(j, i)
x = x + 1
End If
Next j
Next i
End With

ce code travaillera avec la feuille nommée TCD (a adapter à ton cas), quel que soit l'endroit d'ou sera lancé la macro.

Note bien les points devant les cells, très important, car ils 'attachent' les codes qui les suivent au bloc d'instruction with.

salut
 

CyK

XLDnaute Junior
Merci Beaucoup je vais regarder ça.

Hervé écrit:
Re Cyk, pascal, le forum
Cyk, tu nous donne les infos aux comptes gouttes :)

;)

C'est parce que j'aime bien chercher au maximum par moi même, mais autant en langage de prog genre C#, perl .... je sais où aller chercher l'info autant j'ai du mal a me mettre en route en VBA. Heureusement que ce forum existe. Il va falloir que je m'achète un bon bouquin sur VBA vu ce qu'on me demande de faire avec excel, des analyses de données de plus en plus poussées sur des quantités de données énormes. Je découvre au fur et à mesure qu'excel couplé à VBA est une vrai mine d'or, c'est extrémement puissant :woohoo:

Encore merci à tous !!!
 

Discussions similaires

Statistiques des forums

Discussions
312 316
Messages
2 087 182
Membres
103 491
dernier inscrit
bilg1