Je souhaite effectuer une analyse croisée avec en en tête de colonne des
dates présentées sous la forme MOIS/ANNEE.
Dans je déclare en tête de colonne l'expression
Format([date_real];"mm/aa"), les dates sont triées dans l'ordre numérique du
mois, exemple le 01/06 est avent le 02/05.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Drizzit
En effet, pas de chance, mais ton "ORDER BY " doit être basé sur un champ de ton "SELECT" et du coup "GROUP BY" La solution consiste à : - Créer un Query pour ton analyse croisée, dans le genre (heu, à toi d'adapter à tes besoins, j'ai simplement fait un exemple sur une de mes bases) : TRANSFORM Sum(Montant) AS SumOfMontant SELECT Format([DateOperation],"mm/yy") AS MaDate, Sum(Montant) AS [Total Of Montant] FROM tblOperation GROUP BY Format([DateOperation],"mm/yy") PIVOT IdDomaine;
Admettons que cette analyse croisée on l'enregistre sous "MonAnalyseCroisee"
- La deuxième étape consiste à faire la requête suivante : SELECT MonAnalyseCroisee.* FROM MonAnalyseCroisee ORDER BY Right([MaDate],2) & Left([MaDate],2);
Je sais, c'est pas très élégant, mais ça fonctionne.
En effet, pas de chance, mais ton "ORDER BY " doit être basé sur un
champ de ton "SELECT" et du coup "GROUP BY"
La solution consiste à :
- Créer un Query pour ton analyse croisée, dans le genre (heu, à toi
d'adapter à tes besoins, j'ai simplement fait un exemple sur une de
mes bases) :
TRANSFORM Sum(Montant) AS SumOfMontant
SELECT Format([DateOperation],"mm/yy") AS MaDate, Sum(Montant) AS
[Total Of Montant]
FROM tblOperation
GROUP BY Format([DateOperation],"mm/yy")
PIVOT IdDomaine;
Admettons que cette analyse croisée on l'enregistre sous
"MonAnalyseCroisee"
- La deuxième étape consiste à faire la requête suivante :
SELECT MonAnalyseCroisee.*
FROM MonAnalyseCroisee
ORDER BY Right([MaDate],2) & Left([MaDate],2);
Je sais, c'est pas très élégant, mais ça fonctionne.
En effet, pas de chance, mais ton "ORDER BY " doit être basé sur un champ de ton "SELECT" et du coup "GROUP BY" La solution consiste à : - Créer un Query pour ton analyse croisée, dans le genre (heu, à toi d'adapter à tes besoins, j'ai simplement fait un exemple sur une de mes bases) : TRANSFORM Sum(Montant) AS SumOfMontant SELECT Format([DateOperation],"mm/yy") AS MaDate, Sum(Montant) AS [Total Of Montant] FROM tblOperation GROUP BY Format([DateOperation],"mm/yy") PIVOT IdDomaine;
Admettons que cette analyse croisée on l'enregistre sous "MonAnalyseCroisee"
- La deuxième étape consiste à faire la requête suivante : SELECT MonAnalyseCroisee.* FROM MonAnalyseCroisee ORDER BY Right([MaDate],2) & Left([MaDate],2);
Je sais, c'est pas très élégant, mais ça fonctionne.
ylb
En effet, pas de chance, mais ton "ORDER BY " doit être basé sur un champ de ton "SELECT" et du coup "GROUP BY" La solution consiste à : - Créer un Query pour ton analyse croisée, dans le genre (heu, à toi d'adapter à tes besoins, j'ai simplement fait un exemple sur une de mes bases) : TRANSFORM Sum(Montant) AS SumOfMontant SELECT Format([DateOperation],"mm/yy") AS MaDate, Sum(Montant) AS [Total Of Montant] FROM tblOperation GROUP BY Format([DateOperation],"mm/yy") PIVOT IdDomaine;
Admettons que cette analyse croisée on l'enregistre sous "MonAnalyseCroisee"
- La deuxième étape consiste à faire la requête suivante : SELECT MonAnalyseCroisee.* FROM MonAnalyseCroisee ORDER BY Right([MaDate],2) & Left([MaDate],2);
Je sais, c'est pas très élégant, mais ça fonctionne.
Merci de votre réponse,
votre solution fonctionne si la date est en entete de ligne, mais moi je souhaite avoir les dates en entete de colonne. Merci d'avance
En effet, pas de chance, mais ton "ORDER BY " doit être basé sur un
champ de ton "SELECT" et du coup "GROUP BY"
La solution consiste à :
- Créer un Query pour ton analyse croisée, dans le genre (heu, à toi
d'adapter à tes besoins, j'ai simplement fait un exemple sur une de
mes bases) :
TRANSFORM Sum(Montant) AS SumOfMontant
SELECT Format([DateOperation],"mm/yy") AS MaDate, Sum(Montant) AS
[Total Of Montant]
FROM tblOperation
GROUP BY Format([DateOperation],"mm/yy")
PIVOT IdDomaine;
Admettons que cette analyse croisée on l'enregistre sous
"MonAnalyseCroisee"
- La deuxième étape consiste à faire la requête suivante :
SELECT MonAnalyseCroisee.*
FROM MonAnalyseCroisee
ORDER BY Right([MaDate],2) & Left([MaDate],2);
Je sais, c'est pas très élégant, mais ça fonctionne.
Merci de votre réponse,
votre solution fonctionne si la date est en entete de ligne, mais moi je
souhaite avoir les dates en entete de colonne.
Merci d'avance
En effet, pas de chance, mais ton "ORDER BY " doit être basé sur un champ de ton "SELECT" et du coup "GROUP BY" La solution consiste à : - Créer un Query pour ton analyse croisée, dans le genre (heu, à toi d'adapter à tes besoins, j'ai simplement fait un exemple sur une de mes bases) : TRANSFORM Sum(Montant) AS SumOfMontant SELECT Format([DateOperation],"mm/yy") AS MaDate, Sum(Montant) AS [Total Of Montant] FROM tblOperation GROUP BY Format([DateOperation],"mm/yy") PIVOT IdDomaine;
Admettons que cette analyse croisée on l'enregistre sous "MonAnalyseCroisee"
- La deuxième étape consiste à faire la requête suivante : SELECT MonAnalyseCroisee.* FROM MonAnalyseCroisee ORDER BY Right([MaDate],2) & Left([MaDate],2);
Je sais, c'est pas très élégant, mais ça fonctionne.
Merci de votre réponse,
votre solution fonctionne si la date est en entete de ligne, mais moi je souhaite avoir les dates en entete de colonne. Merci d'avance
Drizzit
Oups, j'ai mal lu... Alors voilà une petite solution que j'ai élaboré. Attention, on décole.
On image, on a toujours notre Query Analyse Croisé "MonAnalyseCroisee" TRANSFORM Sum(tblOperation.Montant) AS SumOfMontant SELECT tblOperation.IdDomaine, Sum(tblOperation.Montant) AS [Total Of Montant] FROM tblOperation GROUP BY tblOperation.IdDomaine ORDER BY Format([DateOperation],"mm/yy") PIVOT Format([DateOperation],"mm/yy");
On a en plus une autre Query "qryDansLeBonOrdre", dont le SQL va etre modifié par une fonction ( dont le code (à réadapter) est ci-dessous) afin d'avoir les colonnes dans le bon ordre.
Public Function ConstructionSQL()
Dim objRs As Recordset Dim strSQL As String Dim objQuery As QueryDef
' Ici on cherche les valeurs distinct des colonnes qu'on va avoir ' A adapter en fonction de ton query de ton Analyse croisée strSQL = _ " SELECT distinct Format([DateOperation],'mm/yy') as expr1, Format([DateOperation],'yy/mm') as expr2 " & _ " FROM tblOperation " & _ " ORDER BY Format([DateOperation],'yy/mm')"
Set objRs = CurrentDb.OpenRecordset(strSQL) strSQL = "" ' On parcours tous les résultats, qui vont correspondre aux nom ' des colonnes de l'analyse croisée Do If objRs.EOF Then Exit Do ' Concaténation des champs strSQL = strSQL & IIf(strSQL = "", "", ", ") & _ "[" & objRs("Expr1") & "]" objRs.MoveNext Loop
' Modification du SQL de qryDansLeBonOrdre Set objQuery = CurrentDb.QueryDefs("qryDansLeBonOrdre") objQuery.SQL = _ " SELECT IdDomaine, [Total Of Montant], " & strSQL & _ " FROM MonAnalyseCroisee " objQuery.Close Set objQuery = Nothing
' Et la tu peux ouvrir qryDansLeBonOrdre End Function
En espérant que cela va pouvoir t'aider.
Oups, j'ai mal lu...
Alors voilà une petite solution que j'ai élaboré. Attention, on
décole.
On image, on a toujours notre Query Analyse Croisé "MonAnalyseCroisee"
TRANSFORM Sum(tblOperation.Montant) AS SumOfMontant
SELECT tblOperation.IdDomaine, Sum(tblOperation.Montant) AS [Total Of
Montant]
FROM tblOperation
GROUP BY tblOperation.IdDomaine
ORDER BY Format([DateOperation],"mm/yy")
PIVOT Format([DateOperation],"mm/yy");
On a en plus une autre Query "qryDansLeBonOrdre", dont le SQL va etre
modifié par une fonction ( dont le code (à réadapter) est
ci-dessous) afin d'avoir les colonnes dans le bon ordre.
Public Function ConstructionSQL()
Dim objRs As Recordset
Dim strSQL As String
Dim objQuery As QueryDef
' Ici on cherche les valeurs distinct des colonnes qu'on va avoir
' A adapter en fonction de ton query de ton Analyse croisée
strSQL = _
" SELECT distinct Format([DateOperation],'mm/yy') as expr1,
Format([DateOperation],'yy/mm') as expr2 " & _
" FROM tblOperation " & _
" ORDER BY Format([DateOperation],'yy/mm')"
Set objRs = CurrentDb.OpenRecordset(strSQL)
strSQL = ""
' On parcours tous les résultats, qui vont correspondre aux nom
' des colonnes de l'analyse croisée
Do
If objRs.EOF Then Exit Do
' Concaténation des champs
strSQL = strSQL & IIf(strSQL = "", "", ", ") & _
"[" & objRs("Expr1") & "]"
objRs.MoveNext
Loop
' Modification du SQL de qryDansLeBonOrdre
Set objQuery = CurrentDb.QueryDefs("qryDansLeBonOrdre")
objQuery.SQL = _
" SELECT IdDomaine, [Total Of Montant], " & strSQL & _
" FROM MonAnalyseCroisee "
objQuery.Close
Set objQuery = Nothing
' Et la tu peux ouvrir qryDansLeBonOrdre
End Function
Oups, j'ai mal lu... Alors voilà une petite solution que j'ai élaboré. Attention, on décole.
On image, on a toujours notre Query Analyse Croisé "MonAnalyseCroisee" TRANSFORM Sum(tblOperation.Montant) AS SumOfMontant SELECT tblOperation.IdDomaine, Sum(tblOperation.Montant) AS [Total Of Montant] FROM tblOperation GROUP BY tblOperation.IdDomaine ORDER BY Format([DateOperation],"mm/yy") PIVOT Format([DateOperation],"mm/yy");
On a en plus une autre Query "qryDansLeBonOrdre", dont le SQL va etre modifié par une fonction ( dont le code (à réadapter) est ci-dessous) afin d'avoir les colonnes dans le bon ordre.
Public Function ConstructionSQL()
Dim objRs As Recordset Dim strSQL As String Dim objQuery As QueryDef
' Ici on cherche les valeurs distinct des colonnes qu'on va avoir ' A adapter en fonction de ton query de ton Analyse croisée strSQL = _ " SELECT distinct Format([DateOperation],'mm/yy') as expr1, Format([DateOperation],'yy/mm') as expr2 " & _ " FROM tblOperation " & _ " ORDER BY Format([DateOperation],'yy/mm')"
Set objRs = CurrentDb.OpenRecordset(strSQL) strSQL = "" ' On parcours tous les résultats, qui vont correspondre aux nom ' des colonnes de l'analyse croisée Do If objRs.EOF Then Exit Do ' Concaténation des champs strSQL = strSQL & IIf(strSQL = "", "", ", ") & _ "[" & objRs("Expr1") & "]" objRs.MoveNext Loop
' Modification du SQL de qryDansLeBonOrdre Set objQuery = CurrentDb.QueryDefs("qryDansLeBonOrdre") objQuery.SQL = _ " SELECT IdDomaine, [Total Of Montant], " & strSQL & _ " FROM MonAnalyseCroisee " objQuery.Close Set objQuery = Nothing
' Et la tu peux ouvrir qryDansLeBonOrdre End Function
En espérant que cela va pouvoir t'aider.
ylb
Oups, j'ai mal lu... Alors voilà une petite solution que j'ai élaboré. Attention, on décole.
On image, on a toujours notre Query Analyse Croisé "MonAnalyseCroisee" TRANSFORM Sum(tblOperation.Montant) AS SumOfMontant SELECT tblOperation.IdDomaine, Sum(tblOperation.Montant) AS [Total Of Montant] FROM tblOperation GROUP BY tblOperation.IdDomaine ORDER BY Format([DateOperation],"mm/yy") PIVOT Format([DateOperation],"mm/yy");
On a en plus une autre Query "qryDansLeBonOrdre", dont le SQL va etre modifié par une fonction ( dont le code (à réadapter) est ci-dessous) afin d'avoir les colonnes dans le bon ordre.
Public Function ConstructionSQL()
Dim objRs As Recordset Dim strSQL As String Dim objQuery As QueryDef
' Ici on cherche les valeurs distinct des colonnes qu'on va avoir ' A adapter en fonction de ton query de ton Analyse croisée strSQL = _ " SELECT distinct Format([DateOperation],'mm/yy') as expr1, Format([DateOperation],'yy/mm') as expr2 " & _ " FROM tblOperation " & _ " ORDER BY Format([DateOperation],'yy/mm')"
Set objRs = CurrentDb.OpenRecordset(strSQL) strSQL = "" ' On parcours tous les résultats, qui vont correspondre aux nom ' des colonnes de l'analyse croisée Do If objRs.EOF Then Exit Do ' Concaténation des champs strSQL = strSQL & IIf(strSQL = "", "", ", ") & _ "[" & objRs("Expr1") & "]" objRs.MoveNext Loop
' Modification du SQL de qryDansLeBonOrdre Set objQuery = CurrentDb.QueryDefs("qryDansLeBonOrdre") objQuery.SQL = _ " SELECT IdDomaine, [Total Of Montant], " & strSQL & _ " FROM MonAnalyseCroisee " objQuery.Close Set objQuery = Nothing
' Et la tu peux ouvrir qryDansLeBonOrdre End Function
En espérant que cela va pouvoir t'aider.
Merci pour votre réponse.
Je pense que je vais simplement intervertir le mois et l'année et comme cela le tri sera correct. Il suffira de s'habituer au nouveau format d'affichage.
Oups, j'ai mal lu...
Alors voilà une petite solution que j'ai élaboré. Attention, on
décole.
On image, on a toujours notre Query Analyse Croisé "MonAnalyseCroisee"
TRANSFORM Sum(tblOperation.Montant) AS SumOfMontant
SELECT tblOperation.IdDomaine, Sum(tblOperation.Montant) AS [Total Of
Montant]
FROM tblOperation
GROUP BY tblOperation.IdDomaine
ORDER BY Format([DateOperation],"mm/yy")
PIVOT Format([DateOperation],"mm/yy");
On a en plus une autre Query "qryDansLeBonOrdre", dont le SQL va etre
modifié par une fonction ( dont le code (à réadapter) est
ci-dessous) afin d'avoir les colonnes dans le bon ordre.
Public Function ConstructionSQL()
Dim objRs As Recordset
Dim strSQL As String
Dim objQuery As QueryDef
' Ici on cherche les valeurs distinct des colonnes qu'on va avoir
' A adapter en fonction de ton query de ton Analyse croisée
strSQL = _
" SELECT distinct Format([DateOperation],'mm/yy') as expr1,
Format([DateOperation],'yy/mm') as expr2 " & _
" FROM tblOperation " & _
" ORDER BY Format([DateOperation],'yy/mm')"
Set objRs = CurrentDb.OpenRecordset(strSQL)
strSQL = ""
' On parcours tous les résultats, qui vont correspondre aux nom
' des colonnes de l'analyse croisée
Do
If objRs.EOF Then Exit Do
' Concaténation des champs
strSQL = strSQL & IIf(strSQL = "", "", ", ") & _
"[" & objRs("Expr1") & "]"
objRs.MoveNext
Loop
' Modification du SQL de qryDansLeBonOrdre
Set objQuery = CurrentDb.QueryDefs("qryDansLeBonOrdre")
objQuery.SQL = _
" SELECT IdDomaine, [Total Of Montant], " & strSQL & _
" FROM MonAnalyseCroisee "
objQuery.Close
Set objQuery = Nothing
' Et la tu peux ouvrir qryDansLeBonOrdre
End Function
En espérant que cela va pouvoir t'aider.
Merci pour votre réponse.
Je pense que je vais simplement intervertir le mois et l'année et comme cela
le tri sera correct.
Il suffira de s'habituer au nouveau format d'affichage.
Oups, j'ai mal lu... Alors voilà une petite solution que j'ai élaboré. Attention, on décole.
On image, on a toujours notre Query Analyse Croisé "MonAnalyseCroisee" TRANSFORM Sum(tblOperation.Montant) AS SumOfMontant SELECT tblOperation.IdDomaine, Sum(tblOperation.Montant) AS [Total Of Montant] FROM tblOperation GROUP BY tblOperation.IdDomaine ORDER BY Format([DateOperation],"mm/yy") PIVOT Format([DateOperation],"mm/yy");
On a en plus une autre Query "qryDansLeBonOrdre", dont le SQL va etre modifié par une fonction ( dont le code (à réadapter) est ci-dessous) afin d'avoir les colonnes dans le bon ordre.
Public Function ConstructionSQL()
Dim objRs As Recordset Dim strSQL As String Dim objQuery As QueryDef
' Ici on cherche les valeurs distinct des colonnes qu'on va avoir ' A adapter en fonction de ton query de ton Analyse croisée strSQL = _ " SELECT distinct Format([DateOperation],'mm/yy') as expr1, Format([DateOperation],'yy/mm') as expr2 " & _ " FROM tblOperation " & _ " ORDER BY Format([DateOperation],'yy/mm')"
Set objRs = CurrentDb.OpenRecordset(strSQL) strSQL = "" ' On parcours tous les résultats, qui vont correspondre aux nom ' des colonnes de l'analyse croisée Do If objRs.EOF Then Exit Do ' Concaténation des champs strSQL = strSQL & IIf(strSQL = "", "", ", ") & _ "[" & objRs("Expr1") & "]" objRs.MoveNext Loop
' Modification du SQL de qryDansLeBonOrdre Set objQuery = CurrentDb.QueryDefs("qryDansLeBonOrdre") objQuery.SQL = _ " SELECT IdDomaine, [Total Of Montant], " & strSQL & _ " FROM MonAnalyseCroisee " objQuery.Close Set objQuery = Nothing
' Et la tu peux ouvrir qryDansLeBonOrdre End Function
En espérant que cela va pouvoir t'aider.
Merci pour votre réponse.
Je pense que je vais simplement intervertir le mois et l'année et comme cela le tri sera correct. Il suffira de s'habituer au nouveau format d'affichage.