Transformation Tableau en Liste de Données

Transformation Tableau en Liste de Données - VB/VBA/VBS - Programmation

Marsh Posté le 21-11-2008 à 10:54:41    

Tout d'abord Bonjour à tous, je viens poster ici après une multitude de recherches et de tests qui n'ont rien donné.
Je vous explique mon problème, j'ai un tableau Excel sous la forme
 
           A           B            C
X        12          52          96
Y        9            37          49
Z        16          18          60
 
Je voudrais faire un petit prog qui me permettrait de transformer ce tableau sous la forme toujours dans Excel
     
        Col1         Col2
        X*A         12
        X*B         52
        X*C         96
        Y*A         12
        Y*B         37
        Y*C         49
        Z*A         16
        Z*B         18
        Z*C         60
 
Sachant que j'ai pris pour exemple un tableau à 3 ligne et 3 colonne mais il y en a bien plus.
Je pense être obligé de la faire en VBA pour sortir quelque chose de bien mais ca fait bien trop longtemps que je n'ai pas utilisé VBA.
 
Je vous remercie d'avance pour votre aide

Reply

Marsh Posté le 21-11-2008 à 10:54:41   

Reply

Marsh Posté le 22-11-2008 à 14:23:40    

Le code parle tout seul. Indiquer seulement l'endroit où commencent les données dans la section 'Initialisation des variables (ligne 23 et suivantes) et éventuellement le nom des en-tête de colonnes de sortie, ainsi que le nom de la feuille créée.
 

Code :
  1. Sub teamamenore()
  2. Dim colDataIn As Integer 'N° colonne contenant les données d'entrée
  3. Dim ligDataIn As Integer 'N° ligne contenant les données d'entrée
  4. Dim colDataOut As Integer 'N° colonne contenant les données de sortie
  5. Dim ligDataOut As Integer 'N° ligne contenant les données de sortie
  6. Dim intLigEntete As Integer 'N° de ligne où sont stocké les nom des entete d'entrée
  7. Dim intColEntete As Integer 'N° de colonne où sont stocké les nom des entete d'entrée
  8. Dim strRepCol As String 'Nom de la colonne d'entrée courante
  9. Dim strRepLig As String 'Nom de la ligne d'entrée courante
  10. Dim strExpres As String 'Expression Ligne*Colonne
  11. Dim strData As String 'Donnée courante traitée
  12. Dim strEntete1 As String 'Nom de l'entete de la colonne 1 de la feuille de sortie
  13. Dim strEntete2 As String 'Nom de l'entete de la colonne 2 de la feuille de sortie
  14. Dim FeuilIn  As Worksheet 'Feuille (objet) où sont stockées les données d'entrée
  15. Dim FeuilOut As Worksheet 'Feuille (objet) où sont stockées les données de sortie
  16. Dim strNomFeuille As String 'Nom de la feuille contenant les données de sortie
  17. 'Initialisation des variables
  18. Set FeuilIn = ActiveSheet
  19. intLigEntete = 1 '<- Indiquer ici le n° de ligne où sont indiqué les en-tête de colonnes
  20. intColEntete = 1 '<- Indiquer ici le n° de colonne où sont indiqué les en-tête de ligne (A=1, B=2 etc.)
  21. strNomFeuille = "Données en colonne" 'Nom de la feuille de donnée de sortie
  22. strEntete1 = "Col1"
  23. strEntete2 = "Col2"
  24. colDataIn = intColEntete + 1 'Les donnée d'entrées commencent à la deuxième colonne (après entete)
  25. ligDataIn = intLigEntete + 1 'Les donnée d'entrées commencent à la deuxième ligne (sous entete)
  26. ligDataOut = 2
  27. 'Création de la feuille de donnée de sortie
  28. 'Suppression de cette feuille si elle existe
  29. EffacerFeuille (strNomFeuille)
  30. 'Création de la feuille
  31. Sheets.Add.Name = strNomFeuille
  32. Set FeuilOut = Sheets(strNomFeuille)
  33. 'Création des entêtes (col1 et col2) sur cette nouvelle feuille
  34. FeuilOut.Cells(1, 1) = strEntete1
  35. FeuilOut.Cells(1, 2) = strEntete2
  36. 'Parcours du tableau des données d'entrées
  37. 'Lecture du tableau par ligne
  38. Do
  39.     strData = FeuilIn.Cells(ligDataIn, colDataIn)
  40.     If strData = "" Then Exit Do '(sort de la boucle si la cellule est vide = bas du tableau)
  41.     'Lecture de la ligne du tableau
  42.     Do
  43.         strData = FeuilIn.Cells(ligDataIn, colDataIn)
  44.         If strData = "" Then Exit Do '(sort de la boucle si la cellule est vide = fin de ligne)
  45.         'Composition de l'expression Ligne*Colonne :
  46.         'Lecture du repère de la ligne
  47.         strRepLig = FeuilIn.Cells(ligDataIn, intColEntete)
  48.         'Lecture du repère de la colonne
  49.         strRepCol = FeuilIn.Cells(intLigEntete, colDataIn)
  50.         'Expression :
  51.         strExpres = strRepLig & "*" & strRepCol
  52.         'Ecriture sur la feuille de sortie de l'expression Ligne*Colonne
  53.         FeuilOut.Cells(ligDataOut, 1) = strExpres
  54.         'Ecriture sur la feuille de sortie de la donnée
  55.         FeuilOut.Cells(ligDataOut, 2) = strData
  56.         'On passe à la colonne suivante dans le tableau d'entrée
  57.         colDataIn = colDataIn + 1
  58.         'On passe à la ligne suivante dans le tableau de sorti
  59.         ligDataOut = ligDataOut + 1
  60.     Loop 'on passe à la colonne suivante
  61.     'On passe à la ligne suivante du tableau d'entrée
  62.     ligDataIn = ligDataIn + 1
  63.     'On revient à la première colonne du tableau d'entrée
  64.     colDataIn = intColEntete + 1
  65. Loop 'et on recommence à lire la ligne suivante...
  66. End Sub
  67. Private Sub EffacerFeuille(nomFeuille As String)
  68. On Error Resume Next
  69. 'Eviter les messages d'alerte
  70. Application.DisplayAlerts = False
  71. 'Effacer la feuille existante :
  72. Sheets(nomFeuille).Delete
  73. 'Remet les messages d'alerte
  74. Application.DisplayAlerts = True
  75. End Sub


 
(TIP: Double clic dans la fenêtre du code ci-dessus pour enlever les numéros de ligne avant de copier-coller vers l'éditeur vba)
 
JM


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed