Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1075 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Transformation Tableau en Liste de Données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transformation Tableau en Liste de Données

n°1814853
teamamenor​e
Posté le 21-11-2008 à 10:54:41  profilanswer
 

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

mood
Publicité
Posté le 21-11-2008 à 10:54:41  profilanswer
 

n°1815299
otobox
Maison fondée en 2005
Posté le 22-11-2008 à 14:23:40  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Transformation Tableau en Liste de Données

 

Sujets relatifs
Problème connexion base de données[HTML/Javascript/CSS] [resolu] spoiler une partie de tableau
[RESOLU]jointure d'extraction de donnéesHeader application PDF avec base de données POSTGRE
[Php/Mysql]Effacer ligne d'un tableau de donnéesexemple syntaxe dictionnaire des données oracle
Ajouter une ligne à un tableau en javascriptRecuperation de données dans un menu deroulant
Problème courant du tableau 2D 
Plus de sujets relatifs à : Transformation Tableau en Liste de Données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR