Comment construire une liste à partir d'un tableau (pas croisé d yn
1 réponse
Richard Grenier
J'ai déjà un tableau dans une feuille Excel. Je voudrais, sans faire du
copier-coller, demander à Excel de me construire une liste à partir du
tableau, donc décroiser le tableau. Le tableau a plusieurs niveaux en X et en
Y.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pita
Bonjour, S'il s'agissait en effet d'un tableau croisé dynamique.... en double-cliquant sur le grand total... Excel vous produirait une nouvelle feuille contenant les lignes de détail qui ont servi à construire le tableau et votre problème serait pratiquement résolu...
Étant donné que ce n'est pas le cas, je vous suggèrerais d'insérer au "ras" du tableau c'est à dire immédiatement au dessus et devant la zone des données proprement dites (variables cumulées) une ligne et une colonne d'entête destinées à recuillir (via une formule) la concaténation des clés des différents niveaux caractéristiques des colonnes ou des lignes concernées... les clés de différents niveaux horizontal ou vertical étant séparées dans cette concaténation par un caractère conventionnel arbitraire tel que "/" ou "" ou "$" qui n'apparaît pas dans les libellés d'en-tête de lignes ou de colonnes, ceci pour éviter toute confusion. Vous aurez ainsi dans votre ligne d'entête de colonne des cellules contenant: "Direction1/Service1" suivie horizontalement de "Direction1/Service2".... "Directionp/Servicen" et... une colonne d'entête de ligne contenant: "Région1/Ville1" suivie verticalement de "Région1/Ville2" ....."Régionq/Villet"
En supposant vore tableau rangé dans la "Feuil1" et en nommant ces deux zones d'entête de ligne et de colonne respectivement "Enteteligne" et "EnteteColonne" ainsi que "début" la cellule intersection de cette ligne et cette colonne d'entête (Celle ci précéde le début de chacune de ces deux zones), l'utilisation de la macro suivante devrait règler votre problème: ------------------------------------------------ Sub DécroiseTableau() ' ' Macro4 Macro ' Macro enregistrée le 2004-10-27 par JPP'
' Sheets("Feuil1").Select Sheets.Add feuilleRésultat = ActiveSheet.Name Application.Goto Reference:="Entetecolonne" Set col = Selection Application.Goto Reference:="Enteteligne" Set lig = Selection Application.Goto Reference:="début" Set debut = Selection Sheets(feuilleRésultat).Select Range("A2").Select icol = 0 For Each zcol In col icol = icol + 1 zcole = zcol.Value
ilig = 0 For Each zlig In lig ilig = ilig + 1 zligne = zlig.Value X = zcole & "/" & zligne & "/" & debut.Offset(ilig, icol).Value ActiveCell.Offset(1, 0).Select ActiveCell.Value = X Next zlig Next zcol Columns("A:A").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _ Semicolon:úlse, Comma:úlse, Space:=True, Other:=True, OtherChar:= _ "/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)) _ , TrailingMinusNumbers:=True
ActiveSheet.Name = "Résultat" End Sub ------------------------------------------------- Bonne chance, JPP
en supposant que vos en-têtes de lignes et de colonnes sont répétées dans les cellules voisines des lignes et des colonnes même s'il s'agit des mêmes valeurs (Ceci implique un travail préalable de mise en forme parce qu'en général... la présentation des tableaux force à la suppression des clés suivantes identiques...)
"Richard Grenier" wrote:
J'ai déjà un tableau dans une feuille Excel. Je voudrais, sans faire du copier-coller, demander à Excel de me construire une liste à partir du tableau, donc décroiser le tableau. Le tableau a plusieurs niveaux en X et en Y.
Bonjour,
S'il s'agissait en effet d'un tableau croisé dynamique.... en
double-cliquant sur le grand total... Excel vous produirait une nouvelle
feuille contenant les lignes de détail qui ont servi à construire le tableau
et votre problème serait pratiquement résolu...
Étant donné que ce n'est pas le cas, je vous suggèrerais d'insérer au "ras"
du tableau c'est à dire immédiatement au dessus et devant la zone des données
proprement dites (variables cumulées) une ligne et une colonne d'entête
destinées à recuillir (via une formule) la concaténation des clés des
différents niveaux caractéristiques des colonnes ou des lignes concernées...
les clés de différents niveaux horizontal ou vertical étant séparées dans
cette concaténation par un caractère conventionnel arbitraire tel que "/" ou
"" ou "$" qui n'apparaît pas dans les libellés d'en-tête de lignes ou de
colonnes, ceci pour éviter toute confusion.
Vous aurez ainsi dans votre ligne d'entête de colonne des cellules contenant:
"Direction1/Service1" suivie horizontalement de "Direction1/Service2"....
"Directionp/Servicen"
et...
une colonne d'entête de ligne contenant:
"Région1/Ville1" suivie verticalement de "Région1/Ville2"
....."Régionq/Villet"
En supposant vore tableau rangé dans la "Feuil1" et en nommant ces deux
zones d'entête de ligne et de colonne respectivement "Enteteligne" et
"EnteteColonne" ainsi que "début" la cellule intersection de cette ligne et
cette colonne d'entête (Celle ci précéde le début de chacune de ces deux
zones), l'utilisation de la macro suivante devrait règler votre problème:
------------------------------------------------
Sub DécroiseTableau()
'
' Macro4 Macro
' Macro enregistrée le 2004-10-27 par JPP'
'
Sheets("Feuil1").Select
Sheets.Add
feuilleRésultat = ActiveSheet.Name
Application.Goto Reference:="Entetecolonne"
Set col = Selection
Application.Goto Reference:="Enteteligne"
Set lig = Selection
Application.Goto Reference:="début"
Set debut = Selection
Sheets(feuilleRésultat).Select
Range("A2").Select
icol = 0
For Each zcol In col
icol = icol + 1
zcole = zcol.Value
ilig = 0
For Each zlig In lig
ilig = ilig + 1
zligne = zlig.Value
X = zcole & "/" & zligne & "/" & debut.Offset(ilig, icol).Value
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = X
Next zlig
Next zcol
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:úlse, Comma:úlse, Space:=True, Other:=True,
OtherChar:= _
"/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1),
Array(4, 1), Array(5, 1)) _
, TrailingMinusNumbers:=True
ActiveSheet.Name = "Résultat"
End Sub
-------------------------------------------------
Bonne chance,
JPP
en supposant que vos en-têtes de lignes et de colonnes sont répétées dans
les cellules voisines des lignes et des colonnes même s'il s'agit des mêmes
valeurs (Ceci implique un travail préalable de mise en forme parce qu'en
général... la présentation des tableaux force à la suppression des clés
suivantes identiques...)
"Richard Grenier" wrote:
J'ai déjà un tableau dans une feuille Excel. Je voudrais, sans faire du
copier-coller, demander à Excel de me construire une liste à partir du
tableau, donc décroiser le tableau. Le tableau a plusieurs niveaux en X et en
Y.
Bonjour, S'il s'agissait en effet d'un tableau croisé dynamique.... en double-cliquant sur le grand total... Excel vous produirait une nouvelle feuille contenant les lignes de détail qui ont servi à construire le tableau et votre problème serait pratiquement résolu...
Étant donné que ce n'est pas le cas, je vous suggèrerais d'insérer au "ras" du tableau c'est à dire immédiatement au dessus et devant la zone des données proprement dites (variables cumulées) une ligne et une colonne d'entête destinées à recuillir (via une formule) la concaténation des clés des différents niveaux caractéristiques des colonnes ou des lignes concernées... les clés de différents niveaux horizontal ou vertical étant séparées dans cette concaténation par un caractère conventionnel arbitraire tel que "/" ou "" ou "$" qui n'apparaît pas dans les libellés d'en-tête de lignes ou de colonnes, ceci pour éviter toute confusion. Vous aurez ainsi dans votre ligne d'entête de colonne des cellules contenant: "Direction1/Service1" suivie horizontalement de "Direction1/Service2".... "Directionp/Servicen" et... une colonne d'entête de ligne contenant: "Région1/Ville1" suivie verticalement de "Région1/Ville2" ....."Régionq/Villet"
En supposant vore tableau rangé dans la "Feuil1" et en nommant ces deux zones d'entête de ligne et de colonne respectivement "Enteteligne" et "EnteteColonne" ainsi que "début" la cellule intersection de cette ligne et cette colonne d'entête (Celle ci précéde le début de chacune de ces deux zones), l'utilisation de la macro suivante devrait règler votre problème: ------------------------------------------------ Sub DécroiseTableau() ' ' Macro4 Macro ' Macro enregistrée le 2004-10-27 par JPP'
' Sheets("Feuil1").Select Sheets.Add feuilleRésultat = ActiveSheet.Name Application.Goto Reference:="Entetecolonne" Set col = Selection Application.Goto Reference:="Enteteligne" Set lig = Selection Application.Goto Reference:="début" Set debut = Selection Sheets(feuilleRésultat).Select Range("A2").Select icol = 0 For Each zcol In col icol = icol + 1 zcole = zcol.Value
ilig = 0 For Each zlig In lig ilig = ilig + 1 zligne = zlig.Value X = zcole & "/" & zligne & "/" & debut.Offset(ilig, icol).Value ActiveCell.Offset(1, 0).Select ActiveCell.Value = X Next zlig Next zcol Columns("A:A").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _ Semicolon:úlse, Comma:úlse, Space:=True, Other:=True, OtherChar:= _ "/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)) _ , TrailingMinusNumbers:=True
ActiveSheet.Name = "Résultat" End Sub ------------------------------------------------- Bonne chance, JPP
en supposant que vos en-têtes de lignes et de colonnes sont répétées dans les cellules voisines des lignes et des colonnes même s'il s'agit des mêmes valeurs (Ceci implique un travail préalable de mise en forme parce qu'en général... la présentation des tableaux force à la suppression des clés suivantes identiques...)
"Richard Grenier" wrote:
J'ai déjà un tableau dans une feuille Excel. Je voudrais, sans faire du copier-coller, demander à Excel de me construire une liste à partir du tableau, donc décroiser le tableau. Le tableau a plusieurs niveaux en X et en Y.