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
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
A voir également:
- Transpostion table sous access
- Table ascii - Guide
- Table des matières word - Guide
- Access appdata - Guide
- Table des annexes word ✓ - Forum Word
- WOrd 365 Liste des figures et annexes ✓ - Forum Word
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
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 ?
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 ?
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
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
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
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
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).
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).
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
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")
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
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
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.
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.
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
20 avril 2010 à 10:55
Merci pour la réponse. J'essaye et je dis ce qu'il en est.
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
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
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
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
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 :
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
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
20 avril 2010 à 16:41
Merci pour la patience, génial, ça marche
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
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
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
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
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
Effectivement dans ma macro, avant de lancer l'état je supprime la table transposer pour la recréer à chaque fois.
Encore merci