gros pb

Le
mamadedna
comment transposer l'affichage d'une requête?
c'est a dire que les données qui sont en ligne apparaissent en
colonnes?
merci
nb: j'ai deja essayé l'analyse croisé? mais ne marche pas car il m'est
impossible d'afficher qu'une seule en tete de colonne et qu'une seule
valeur.
merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thierry (ze Titi)
Le #6301471
*Bonjour* à toi aussi mamadedna

La fonction suivante fait exactement ce que tu veux:

Function TransposeQuery(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ée une nouvelle table pour contenir les données transposées.
' Crée un champ pour chaque enregistrement de 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

' Ouvre la nouvelle table et complète le premier champ avec
' les noms des 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
' Complète chaque colonne de la nouvelle table
' avec un enregistrement de la table d'origine.
For j = 0 To rstSource.Fields.Count - 1
' Commence par le second champ, car le premier
' contient déjà les noms des 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 "La table " & strTarget & " existe déjà."
Case 3078
MsgBox "La table " & strSource & " n'existe pas."
Case Else
MsgBox CStr(Err) & " " & Err.Description
End Select

Exit Function
End Function


Dans ton message
comment transposer l'affichage d'une requête?
c'est a dire que les données qui sont en ligne apparaissent en
colonnes?
merci
nb: j'ai deja essayé l'analyse croisé? mais ne marche pas car il m'est
impossible d'afficher qu'une seule en tete de colonne et qu'une seule
valeur.
merci


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Tisane
Le #6301461
Bonjour "mamadedna",

comment transposer l'affichage d'une requête?
c'est a dire que les données qui sont en ligne
apparaissent en colonnes?
nb: j'ai deja essayé l'analyse croisé? mais ne
marche pas car il m'est
impossible d'afficher qu'une seule en tete
de colonne et qu'une seule valeur.


Le plus simple : exporte le résultat de ta requête dans Excel.
Dans Excel, tu sélectionnes le tableau et tu le copies puis menu Edition |
Collage spécial | Transposé.

--
Tisane

Tisane
Le #6301451

La fonction suivante fait exactement ce que tu veux:
Function TransposeQuery(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
[...]


Tu as vu la quantité de code qu'il te faut pour faire ce qu'Excel propose en
une ligne ?;-)

--
Tisane



On Error GoTo Transposer_Err

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

' Crée une nouvelle table pour contenir les données transposées.
' Crée un champ pour chaque enregistrement de 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

' Ouvre la nouvelle table et complète le premier champ avec
' les noms des 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
' Complète chaque colonne de la nouvelle table
' avec un enregistrement de la table d'origine.
For j = 0 To rstSource.Fields.Count - 1
' Commence par le second champ, car le premier
' contient déjà les noms des 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 "La table " & strTarget & " existe déjà."
Case 3078
MsgBox "La table " & strSource & " n'existe pas."
Case Else
MsgBox CStr(Err) & " " & Err.Description
End Select

Exit Function
End Function


Dans ton message
comment transposer l'affichage d'une requête?
c'est a dire que les données qui sont en ligne apparaissent en
colonnes?
merci
nb: j'ai deja essayé l'analyse croisé? mais ne marche pas car il m'est
impossible d'afficher qu'une seule en tete de colonne et qu'une seule
valeur.
merci


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info



Thierry (ze Titi)
Le #6301431
Vui, je sais... Mais c'est pô de ma faute ! :o)

Message du jeudi 26/07/2007


La fonction suivante fait exactement ce que tu veux:
Function TransposeQuery(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
[...]


Tu as vu la quantité de code qu'il te faut pour faire ce qu'Excel propose en
une ligne ?;-)

--
Tisane



On Error GoTo Transposer_Err

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

' Crée une nouvelle table pour contenir les données transposées.
' Crée un champ pour chaque enregistrement de 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

' Ouvre la nouvelle table et complète le premier champ avec
' les noms des 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
' Complète chaque colonne de la nouvelle table
' avec un enregistrement de la table d'origine.
For j = 0 To rstSource.Fields.Count - 1
' Commence par le second champ, car le premier
' contient déjà les noms des 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 "La table " & strTarget & " existe déjà."
Case 3078
MsgBox "La table " & strSource & " n'existe pas."
Case Else
MsgBox CStr(Err) & " " & Err.Description
End Select

Exit Function
End Function


Dans ton message
comment transposer l'affichage d'une requête?
c'est a dire que les données qui sont en ligne apparaissent en
colonnes?
merci
nb: j'ai deja essayé l'analyse croisé? mais ne marche pas car il m'est
impossible d'afficher qu'une seule en tete de colonne et qu'une seule
valeur.
merci


-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info



--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info



Michel_D
Le #6300541
Salut,

Je pense qu'une requête union doit pouvoir faire ce que tu cherche.

SELECT Un_Champ
FROM De_TaTable
UNION SELECT Un_Autre_Champ
FROM De_TaTable
UNION SELECT Un_Autre_Autre_Champ
FROM De_TaTable
...


"mamadedna" comment transposer l'affichage d'une requête?
c'est a dire que les données qui sont en ligne apparaissent en
colonnes?
merci
nb: j'ai deja essayé l'analyse croisé? mais ne marche pas car il m'est
impossible d'afficher qu'une seule en tete de colonne et qu'une seule
valeur.
merci
mamadedna
Le #6300381
slt et je te remercie d'avoir repondu a ma question mais ce n'est pas
exactement ce que je veut faire.
alorr je te donne un exemple.

nom prenom ville nbre_de_lits nbre_de_chaises
nbre_de_maisons nbre_denfants
toto ch lille 5
7 10 1
toto ch avignon 4
8 14 2
toto ch dunkerque 3
6 7 5
toto ch marseille 5
7 10 1
titi yo lille 6
5 1 7
titi yo avignon 4
3 1 2
titi yo dunkerque 8
4 5 7
titi yo lmarseille 6
8 1 7

voila pence que cette exemple resume en gros mon pb.
ce que j'aimerais faire c'est pouvoir obtenir un tableau cous access
qui me donne

nom prenom nbre_de_lits a lille nbre_de_lits à avignon
nbre_de_lits à dunkerque nbre_lits à avignon
toto ch 5
4 3
5
faire la meme chose pour titi yo
autant pour les lits que pour les enfants les maisons que pour les
chaises sur la meme table

j'espère que j'ai été assez explicite
merci d'avance
Publicité
Poster une réponse
Anonyme