[VBA] Déplacer données Table

Déplacer données Table [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 26-06-2008 à 18:04:13    

Bonjour
 
J'ai une table BUDGET de 15 colonnes qui est de cette forme
 

Code :
  1. flux - Mois1 - Mois2 - Mois3 - ... - Mois12 - NOLIG - NOCOL
  2. O  - 
  3. Ra  -
  4. Re  -
  5. S  -


 
 
Et en fait, j'ai besoin de transformer cette table en 7 colonnes, avec une macro je présume, pour que les champs deviennent
 

Code :
  1. MOIS - O - Ra - Re - S - NOLIG - NOCOL
  2. Mois1 - 
  3. Mois2 -
  4. Mois3 -
  5. ...
  6. Mois12 -


 
Oui ça peut paraitre très stupide vu comme ça, mais j'ai pas trop le choix...
Alors je sais faire via Excel, mais pour adapter la macro tirée d'Excel vers Access, vu mon niveau en VB, ça se complique franchement...
 
Si vous avez des idées.. Merci !
 
Je me demande si la macro Excel peut aider mais à tout hasard, je la mets :
 

Code :
  1. Sub TcD()
  2.     Cells.Select
  3.     ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
  4.         "Feuil1!C1:C15" ).CreatePivotTable TableDestination:="", TableName:= _
  5.         "Tableau croisé dynamique1"
  6.     ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
  7.     ActiveSheet.Cells(3, 1).Select
  8.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).SmallGrid = False
  9.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("NOLIG" ). _
  10.         Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
  11.         False, False)
  12.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("NOCOL" ). _
  13.         Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
  14.         False, False)
  15.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Code flux" ). _
  16.         Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
  17.         False, False)
  18.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).AddFields RowFields:= _
  19.         Array("NOLIG", "NOCOL", "Données" ), ColumnFields:="Code flux"
  20.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  21.         "BUDGET01" )
  22.         .Orientation = xlDataField
  23.         .Caption = "01"
  24.         .Position = 1
  25.         .Function = xlSum
  26.     End With
  27.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  28.         "BUDGET02" )
  29.         .Orientation = xlDataField
  30.         .Caption = "02"
  31.         .Position = 2
  32.         .Function = xlSum
  33.     End With
  34.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  35.         "BUDGET03" )
  36.         .Orientation = xlDataField
  37.         .Caption = "03"
  38.         .Position = 3
  39.         .Function = xlSum
  40.     End With
  41.     ...
  42.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  43.         "BUDGET12" )
  44.         .Orientation = xlDataField
  45.         .Caption = "12"
  46.         .Function = xlSum
  47.     End With
  48.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" )
  49.         .ColumnGrand = False
  50.         .RowGrand = False
  51.     End With
  52. End Sub

Reply

Marsh Posté le 26-06-2008 à 18:04:13   

Reply

Marsh Posté le 27-06-2008 à 07:15:25    

Bonjour,
cela ressemble beaucoup à : sélectionner la zone, puis "copier" puis collage spécial et sélectionner "transposer"
 
Ce qui donne en utilisant l'enregistreur de macro:
 
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 27/06/2008 par PAPOU
'
 
'
    Range("A1:D5" ).Select
    Selection.Copy
    Range("A16" ).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
End Sub
 
("A1:D5" ) étant la zone à transposer, et A16 l'endroit où on veut la mettre.


Message édité par seniorpapou le 27-06-2008 à 07:24:58
Reply

Marsh Posté le 01-07-2008 à 11:33:24    

Merci de ta réponse mais cela, tu le fais dans Excel non ?
Je voudrais pouvoir le faire directement dans Access, sans passer par Excel.

Reply

Marsh Posté le 02-07-2008 à 09:47:28    

Ça n'est pas possible de récupérer la macro Excel pour l'adapter à Access.
 
Sous Access il te faut créer dynamiquement la structure de ta nouvelle table en nommant tes champs d'après les valeurs récupérées dans un recordset.
 
Je ne connais pas ton niveau en VBA/Access, mais sans être compliqué, cela demande quelques connaissances des objets Access :
Recordset ,TableDef, Fields, Index, et autres propriétés attachées à ces objets (liste non exhaustive).

Reply

Marsh Posté le 16-09-2008 à 15:33:24    

Je n'ai pas pour habitude de laisser des trucs en plan et laisser des gens qui prennent de leur temps pour moi, sans réponse.  
Désolé j'ai été pris sur un autre truc pendant tout ce temps et n'ai pu me replonger sur le sujet que la semaine dernière.
 
Merci pour tes conseils. Effectivement, j'ai fait autrement en passant par des tables temporaires, des requêtes et tout le toutim.
 
A bientôt

Reply

Sujets relatifs:

Leave a Replay

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