IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Transpose une table ou requête en Access:


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 125
    Points
    125
    Par défaut Transpose une table ou requête en Access:
    Bonjour a tous,
    Je me demande si il existe un moyen pour transposer la table Commande en Access pour obtenir la table Commande_Transpose.
    Table initiale :Commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Commande
    SalesPerson	fn1	fn2	fn3
    a	1	2	3
    b	4	5	6
    c	7	8	9
    Resultat Escompte :Commande_Transpose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SalesPerson	a	b	c
    fn1	1	4	7
    fn2	2	5	8
    fn3	3	6	9
    J’ai utilise la function ci-dessous trouve sur lien http://support.microsoft.com/kb/182822 mais le resultat est un “peu” tordu.
    Commande_Trans:
    1 2 3 4
    SalesPerson a b c
    fn1 1 4 7
    fn2 2 5 8
    fn3 3 6 9


    Fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    1.	Function Transposer(strSource As String, strTarget As String)
    2.	
    3.	         Dim db As Database
    4.	         Dim tdfNewDef As TableDef
    5.	         Dim fldNewField As Field
    6.	         Dim rstSource As Recordset, rstTarget As Recordset
    7.	         Dim i As Integer, j As Integer
    8.	
    9.	         On Error GoTo Transposer_Err
    10.	
    11.	         Set db = CurrentDb()
    12.	         Set rstSource = db.OpenRecordset(strSource)
    13.	         rstSource.MoveLast
    14.	
    15.	         ' Create a new table to hold the transposed data.
    16.	         ' Create a field for each record in the original table.
    17.	         Set tdfNewDef = db.CreateTableDef(strTarget)
    18.	         For i = 0 To rstSource.RecordCount
    19.	            Set fldNewField = tdfNewDef.CreateField(CStr(i + 1), dbText)
    20.	            tdfNewDef.Fields.Append fldNewField
    21.	         Next i
    22.	         db.TableDefs.Append tdfNewDef
    23.	
    24.	         ' Open the new table and fill the first field with
    25.	         ' field names from the original table.
    26.	         Set rstTarget = db.OpenRecordset(strTarget)
    27.	         For i = 0 To rstSource.Fields.Count - 1
    28.	            With rstTarget
    29.	              .AddNew
    30.	              .Fields(0) = rstSource.Fields(i).Name
    31.	              .Update
    32.	            End With
    33.	         Next i
    34.	
    35.	         rstSource.MoveFirst
    36.	         rstTarget.MoveFirst
    37.	         ' Fill each column of the new table
    38.	         ' with a record from the original table.
    39.	         For j = 0 To rstSource.Fields.Count - 1
    40.	            ' Begin with the second field, because the first field
    41.	            ' already contains the field names.
    42.	            For i = 1 To rstTarget.Fields.Count - 1
    43.	               With rstTarget
    44.	                  .Edit
    45.	                  .Fields(i) = rstSource.Fields(j)
    46.	                  rstSource.MoveNext
    47.	                  .Update
    48.	               End With
    49.	
    50.	            Next i
    51.	            rstSource.MoveFirst
    52.	            rstTarget.MoveNext
    53.	         Next j
    54.	
    55.	         db.Close
    56.	
    57.	         Exit Function
    58.	
    59.	      Transposer_Err:
    60.	
    61.	         Select Case Err
    62.	            Case 3010
    63.	               MsgBox "The table " & strTarget & " already exists."
    64.	            Case 3078
    65.	               MsgBox "The table " & strSource & " doesn't exist."
    66.	            Case Else
    67.	               MsgBox CStr(Err) & " " & Err.Description
    68.	         End Select
    69.	
    70.	         Exit Function
    71.	
    72.	      End Function
    Merci d’avance de me repondre.

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 063
    Points : 24 668
    Points
    24 668
    Par défaut
    Bonjour,

    Normalement on utilise une requête d'analyse croisée.

    Cordialement,

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 777
    Points : 58 179
    Points
    58 179
    Billets dans le blog
    42
    Par défaut
    salut,

    ben il marche très bien ce code...
    Images attachées Images attachées  

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 125
    Points
    125
    Par défaut
    Bonsoir,
    @ Loufab: je ne vois pas comment utiliser une requete croisee pour obtenir le resultat escompte.j'ai essaye tout ce que je peux. la je suis oblige d'exporter la table vers Excel, la transposer tranquilement et enfin la re-importer vers Access. je trouve cela un encombrant et surtout moins professionnel .

    @ F-Leb: je confirme que j’obtiens le resultat que toi et que ce n’est pas du tout le resultat escompte; la table finale (TRANSPOSEE) devrait avoir les champs suivants:
    au lieu de :
    Donc ,je ne peux pas dire que ce code marche tres bien !
    Merci d’avance pour vos tentatives de reponses.

Discussions similaires

  1. [AC-2003] Requête mise à jour d'un champ d'une Table dans plusieurs bases ACCESS
    Par alainfbsi dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/05/2013, 20h35
  2. [AC-2007] Transposer une table access sur un fichier excel avec VBA
    Par christophe31 dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/04/2010, 15h51
  3. lier une table Sql Server sur Access
    Par JerBi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2006, 16h27
  4. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21
  5. [DEB.] - Transposer une table SQL en XML SCHEMA ???
    Par oulahoup dans le forum Valider
    Réponses: 2
    Dernier message: 10/06/2003, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo