Transpostion table sous access
Résolu
Co52
Messages postés
78
Date d'inscription
Statut
Membre
Dernière intervention
-
Co52 Messages postés 78 Date d'inscription Statut Membre Dernière intervention -
Co52 Messages postés 78 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Transpostion table sous access
- Table ascii - Guide
- Table des matières word - Guide
- Table des caractères - Guide
- Access runtime ✓ - Forum Access
- Table des annexes word ✓ - Forum Word
10 réponses
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 ?
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 ?
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
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
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).
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).
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")
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")
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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
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
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 :
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