Transpostion table sous access

Résolu/Fermé
Co52 Messages postés 78 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 8 octobre 2016 - Modifié par Co52 le 18/04/2010 à 22:29
Co52 Messages postés 78 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 8 octobre 2016 - 21 avril 2010 à 10:15
Bonjour,

J'utilise Access 2007. J'ai une table sous cette forme

Nom.....Nbre doc....Nbre autre
Toto..............10..................20
Titi..................5...................15
Tata..............15....................5

J'ai besoin de la mettre sous la forme suivante :

Type.............Toto............Titi.................Tata
Nbre doc..........10..............5....................15
Nbre autre.......20............15......................5

En sachat que c'est une table qui est figé et que les seuls changement qu'il peut y avoir ce sont les nombres.

Je n'arrive pas à le faire et je ne connais pas suffisamment VBA pour créer quelque chose de moi même.

Quelqu'un peut-il m'aider. Merci







A voir également:

10 réponses

Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
18 avril 2010 à 23:01
Bonjour,
Le plus simple est de créer une nouvelle table avec les champs [Type], [Toto], [Titi] et [Tata].
Ou est-ce simplement un formulaire que vous voulez ?
0
Co52 Messages postés 78 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 8 octobre 2016 3
18 avril 2010 à 23:21
D'abord merci d'avoir répondu.

Je ne peux pas créer simplement une nouvelle table.
J'ai ici simplifié l'info mais j'ai d'autres données dans ma table qui ne peuvent pas être mises autrement que dans ce sens.
Je peux à la rigueur créer une nouvelle table où j'extrais juste c'est trois colonnes mais elles resterons bien 3 colonnes pour 10 lignes alors que je veux 10 colonnes pour 3 lignes.
De plus les deux colonnes Nbre doc et Nbre autres sont remplis par le biais d'une requête maj avec regroupement suite à des saisies dans d'autres tables.

En fait, j'ai besoin de cette table pour ensuite créer un état et je n'arrive pas à le mettre dans le bon sens pour mes besoins et du coup, je n'arrive pas à faire des totaux dans mon état alors que la table transposée, je pourrais faire cet état
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
19 avril 2010 à 10:52
Bonjour,
Oui c'est un peut différent, alors dans un premier temps il est possible d'utiliser Excel pour transposer la table (le plus simple ... ).
Exporter la table vers Excel / ouvrir le fichier Excel / sélectionner la plage et Copier / Transposer / mettre votre nouvel plage en place (dés A1....) / Enregistre et fermer le fichier.
Sur Access, Données externes Importer .... Suivre les instructions ... prendre soin de donner un nouveau nom (exemple existant: T_Co52 nouveau : T_Co52_transposer).
0
Co52 Messages postés 78 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 8 octobre 2016 3
19 avril 2010 à 11:54
Bonjour,

Merci pour la réponse. Effectivement je connais cette démarche mais cela veut dire des manipulations à chaque fois alors que ce n'est pas obligatoirement moi qui vais me servir de la base de donnée et donc je voulais l'automatiser par une macro.

En fouillant j'ai trouver un un site qui explique comment faire par un module (méthode 2)

voici la page concerne http://support.microsoft.com/kb/283875/fr

J'ai essayé et ça fonctionne ça me crée bien une table transposer qu'éventuellement je peux ensuite modifier par requête donc ca me va.

J'ai tout de même un soucis. Pour exécuter le module, il faut dans la partie exécution taper la formule

?Transposer("Suppliers","SuppliersTrans")

avec le nom de l'ancienne table et le nom de la nouvelle table.

Je ne trouve pas comment faire pour automatiser ça par le biais d'une macro.

dans ma macro j'ai fait "OuvrirModule" avec le nom du module que j'ai créé je ne trouve pas ce qu'il faut que je mette dans "Nom de la procédure" et je ne sais pas comment exécuter la ligne ?Transposer("Suppliers","SuppliersTrans")
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
19 avril 2010 à 16:08
Bonjour,
Je suppose que vous avez besoin de cette table transposé pour votre Etat.
Il faut introduire cette ligne de commande [ Call Transposer("tableX","tablexTrans")] dans la procédure que vous utilisez pour filtrer les données nécessaires.
0
Co52 Messages postés 78 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 8 octobre 2016 3
20 avril 2010 à 10:55
Merci pour la réponse. J'essaye et je dis ce qu'il en est.
0
Co52 Messages postés 78 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 8 octobre 2016 3
Modifié par Co52 le 20/04/2010 à 14:14
Bon je suis vraiment pas douée avec visual basic. Je reprend depuis le début.

J'ai créé un module où j'ai recopier le code suivant :

Function Transposer(strSource As String, strTarget As String)

Dim db As DAO.Database
Dim tdfNewDef As DAO.TableDef
Dim fldNewField As DAO.Field
Dim rstSource As DAO.Recordset, rstTarget As DAO.Recordset
Dim i As Integer, j As Integer

On Error GoTo Transposer_Err

Set db = CurrentDb()
Set rstSource = db.OpenRecordset(strSource)
rstSource.MoveLast

' Création d'une nouvelle table pour contenir les données transposées.
' Création d'un champ pour chaque enregistrement dans la table d'origine.
Set tdfNewDef = db.CreateTableDef(strTarget)
For i = 0 To rstSource.RecordCount
Set fldNewField = tdfNewDef.CreateField(CStr(i + 1), dbText)
tdfNewDef.Fields.Append fldNewField
Next i
db.TableDefs.Append tdfNewDef


' Ouverture de la nouvelle table et remplissage du premier champ avec
' les noms de champs de la table d'origine.
Set rstTarget = db.OpenRecordset(strTarget)
For i = 0 To rstSource.Fields.Count - 1
With rstTarget
.AddNew
.Fields(0) = rstSource.Fields(i).Name
.Update
End With
Next i

rstSource.MoveFirst
rstTarget.MoveFirst
' Remplissage de chaque colonne de la nouvelle table
' avec un enregistrement de la table d'origine.
For j = 0 To rstSource.Fields.Count - 1
' Commencer par le deuxième champ car le premier
' contient déjà les noms de champs.
For i = 1 To rstTarget.Fields.Count - 1
With rstTarget
.Edit
.Fields(i) = rstSource.Fields(j)
rstSource.MoveNext
.Update
End With

Next i
rstSource.MoveFirst
rstTarget.MoveNext
Next j

db.Close

Exit Function

Transposer_Err:

Select Case Err
Case 3010
MsgBox "The table " & strTarget & " already exists."
Case 3078
MsgBox "The table " & strSource & " doesn't exist."
Case Else
MsgBox CStr(Err) & " " & Err.Description
End Select

Exit Function

End Function


Ensuite je fais Ctrl G et dans la section édition je tape

?Transposer("tableX","tablexTrans") puis Enter

C'est bon ça me créé bien la table que je veux mais il faut le faire en mode manuel alors que je veux le lancer en automatique par le biais d'une macro (je ne connais pas suffisamment VB voir presque pas donc je passe par des macros).

Vous me dites de rajouter la commande


[ Call Transposer("tableX","tablexTrans")]

Où exactement dois-je mettre cette ligne de commande dans les lignes du module ?

Faut-il mettre les [ ]

Dois-je modifier autre chose dans le module ?

Comment puis-je lancer ce module automatiquement après par le biais d'une macro ?

Voilà tous mes soucis. Merci du coup de main

Salutations
Co
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
20 avril 2010 à 15:42
Bonjour,
Sans rien connaitre de la structure de votre base ce n'est pas évident.
En principe vous devez mettre cette ligne de code Transposer("tableX","tablexTrans) dans une procédure événementielle [Sur ouverture] du formulaire (ou d'un état).
Exemple :
Private Sub Form_Open(Cancel As Integer)
Call Transposer("T_Co52", "T_Co52Trans")
End Sub 

0
Co52 Messages postés 78 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 8 octobre 2016 3
20 avril 2010 à 16:41
Merci pour la patience, génial, ça marche
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
20 avril 2010 à 18:00
Bonjour,
Merci pour l'information.
Petite note : pour que cette table transposer soit toujours à jour il serait bien de la supprimer après emploi ou alors modifier la procédure Function Transposer(strSource As String, strTarget As String) pour tenir compte des valeurs actuelles de la table source
0
Co52 Messages postés 78 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 8 octobre 2016 3
21 avril 2010 à 10:15
Bonjour,
Effectivement dans ma macro, avant de lancer l'état je supprime la table transposer pour la recréer à chaque fois.
Encore merci
0