Import excel access . pivot
loic
-
loic -
loic -
bonjour a tous!
g un soucis concernant un champs sous access.
j'importe sous access une table d'excel dont un champ est de la forme 1/35/14 ou 97/65/78 par ex , la premiere partie correspondant a l'annee (dans l'ex 1 pour 2001 et 97 pour 1997) or je souhaite ne selectionner que les enregistrements dont l'année est inferieure a l'annee en cours (donc la premiere partie <4 pour cette annee ,5 pour l' annee prochaine)..on m'a parle de "pivot" afin de repondre a mon probleme mais je ne saisis toujours pas(de transformer mon champs texte ,de rajouter 2000 ou 1900 puis de traiter la date)
si quelqu'un pouvait me renseigner un peu..
merci d'avance!
g un soucis concernant un champs sous access.
j'importe sous access une table d'excel dont un champ est de la forme 1/35/14 ou 97/65/78 par ex , la premiere partie correspondant a l'annee (dans l'ex 1 pour 2001 et 97 pour 1997) or je souhaite ne selectionner que les enregistrements dont l'année est inferieure a l'annee en cours (donc la premiere partie <4 pour cette annee ,5 pour l' annee prochaine)..on m'a parle de "pivot" afin de repondre a mon probleme mais je ne saisis toujours pas(de transformer mon champs texte ,de rajouter 2000 ou 1900 puis de traiter la date)
si quelqu'un pouvait me renseigner un peu..
merci d'avance!
A voir également:
- Import excel access . pivot
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel moyenne - Guide
4 réponses
Salut,
c'est moi le roi du pivot ! ;-)))
Si tu ne souhaites que sélectionner, alors il faut intégrer une contrainte dans ton SELECT, pour ne sélectionner que les caractères à gauche du / qui sont inférieurs à 4
Ca donne ça en SQL (on suppose que le champ s'appelle 'test') :
On utilise la fonction instr qui cherche à quel endroit se trouve une chaine dans une autre : instr(1,test,"/") renvoie la position du caractère / en partant de la gauche. On ne peut pas se contenter de prendre les 2 premiers caractères de gauche, car des fois l'année est sur 1.
Il faut ensuite prendre les caractères à gauche, mais la position renvoyée au dessus est celle du /, il faut donc soustraire 1 :
left(test,instr(1,test,"/")-1)
Il ne reste qu'à tester que c'est inférieur à l'année en cours. C'est pourquoi on est obligé d'utiliser la fonction val qui transforme une chaine en numérique.
C'est plus clair ?
A+ Blux
c'est moi le roi du pivot ! ;-)))
Si tu ne souhaites que sélectionner, alors il faut intégrer une contrainte dans ton SELECT, pour ne sélectionner que les caractères à gauche du / qui sont inférieurs à 4
Ca donne ça en SQL (on suppose que le champ s'appelle 'test') :
WHERE val(left(test,InStr(1,test,"/")-1))>4Comment ça marche :
On utilise la fonction instr qui cherche à quel endroit se trouve une chaine dans une autre : instr(1,test,"/") renvoie la position du caractère / en partant de la gauche. On ne peut pas se contenter de prendre les 2 premiers caractères de gauche, car des fois l'année est sur 1.
Il faut ensuite prendre les caractères à gauche, mais la position renvoyée au dessus est celle du /, il faut donc soustraire 1 :
left(test,instr(1,test,"/")-1)
Il ne reste qu'à tester que c'est inférieur à l'année en cours. C'est pourquoi on est obligé d'utiliser la fonction val qui transforme une chaine en numérique.
C'est plus clair ?
A+ Blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
Voui, dans ce cas, il faut le mettre entre crochets []...
Est-ce que tu as au moins saisi la méthode utilisée ? (c'est quand même le plus important !)
A+ Blux
Est-ce que tu as au moins saisi la méthode utilisée ? (c'est quand même le plus important !)
A+ Blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
salut!!
je ne sais pas si tu te rappelles mais j'avais un soucis pour une requete sur access concernant une date..ben g tjrs ce soucis!!
tu sais ce que le message d'erreur "appel de procedure incorrect" signifie?
merci d'avance!
je ne sais pas si tu te rappelles mais j'avais un soucis pour une requete sur access concernant une date..ben g tjrs ce soucis!!
tu sais ce que le message d'erreur "appel de procedure incorrect" signifie?
merci d'avance!
Ben désolé, mais j'ai dormi depuis !
Pas de souvenir...
Appel de procédure incorrect : c'est quand on appelle une procédure avec de mauvais paramètres (dixit la doc)...
A+ Blux
Pas de souvenir...
Appel de procédure incorrect : c'est quand on appelle une procédure avec de mauvais paramètres (dixit la doc)...
A+ Blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
merci pour ta reponse!
ca y est ca marche!!!!!!!!!!!! en fait tu avais raison vendredi dernier..mais au lieu du caractere "/" c'etait "."..hum..oui je sais c tres bete com erreur!!
voila ma requete:
SELECT TableDecompteOperations.Subdivision, TableDecompteOperations.[Code Nature], TableDecompteOperations.[N° Op], Sum(TableDecompteOperations.C) AS SommeDeC, Sum(TableDecompteOperations.R) AS SommeDeR, Sum(TableDecompteOperations.M) AS SommeDeM, Sum(TableDecompteOperations.A) AS SommeDeA
FROM TableDecompteOperations
WHERE (((Left([TableDecompteOperations].[N° Op],InStr(1,[TableDecompteOperations].[N° Op],".")-1))<Right(Year(Date()),1))) OR (((Left([TableDecompteOperations].[N° Op],InStr(1,[TableDecompteOperations].[N° Op],".")-1))>80) AND ((TableDecompteOperations.[Code Nature]) Like "O"))
GROUP BY TableDecompteOperations.Subdivision, TableDecompteOperations.[Code Nature], TableDecompteOperations.[N° Op];
mon soucis com tu peux le voir c que vu que je selectionne que le dernier chiffre de mon annee actuelle cette requete ne sera valable que jusqu'en 2009...pour l'instant je vais me contenter de ca mais j'aurai voulu pouvoir continuer apres 2010..si jamais tu as une idee..
merci d'avance!
ca y est ca marche!!!!!!!!!!!! en fait tu avais raison vendredi dernier..mais au lieu du caractere "/" c'etait "."..hum..oui je sais c tres bete com erreur!!
voila ma requete:
SELECT TableDecompteOperations.Subdivision, TableDecompteOperations.[Code Nature], TableDecompteOperations.[N° Op], Sum(TableDecompteOperations.C) AS SommeDeC, Sum(TableDecompteOperations.R) AS SommeDeR, Sum(TableDecompteOperations.M) AS SommeDeM, Sum(TableDecompteOperations.A) AS SommeDeA
FROM TableDecompteOperations
WHERE (((Left([TableDecompteOperations].[N° Op],InStr(1,[TableDecompteOperations].[N° Op],".")-1))<Right(Year(Date()),1))) OR (((Left([TableDecompteOperations].[N° Op],InStr(1,[TableDecompteOperations].[N° Op],".")-1))>80) AND ((TableDecompteOperations.[Code Nature]) Like "O"))
GROUP BY TableDecompteOperations.Subdivision, TableDecompteOperations.[Code Nature], TableDecompteOperations.[N° Op];
mon soucis com tu peux le voir c que vu que je selectionne que le dernier chiffre de mon annee actuelle cette requete ne sera valable que jusqu'en 2009...pour l'instant je vais me contenter de ca mais j'aurai voulu pouvoir continuer apres 2010..si jamais tu as une idee..
merci d'avance!
le souci c que si je met :
WHERE (((Left([TableDecompteOperations].[N° Op],InStr(1,[TableDecompteOperations].[N° Op],".")-1))=Right(Year(Date()),2)) AND ((TableDecompteOperations.[Code Nature]) Like "P" Or (TableDecompteOperations.[Code Nature])="A"))
au lieu de
WHERE (((Left([TableDecompteOperations].[N° Op],InStr(1,[TableDecompteOperations].[N° Op],".")-1))=Right(Year(Date()),1)) AND ((TableDecompteOperations.[Code Nature]) Like "P" Or (TableDecompteOperations.[Code Nature])="A"))
ben g plus aucun champ qui correspond...peut etre parceque je ne peux pas comparer deux chiffres a un seul?..est ce que je peux comparer "3" par ex à "04" ?
encore merci!
A+!
WHERE (((Left([TableDecompteOperations].[N° Op],InStr(1,[TableDecompteOperations].[N° Op],".")-1))=Right(Year(Date()),2)) AND ((TableDecompteOperations.[Code Nature]) Like "P" Or (TableDecompteOperations.[Code Nature])="A"))
au lieu de
WHERE (((Left([TableDecompteOperations].[N° Op],InStr(1,[TableDecompteOperations].[N° Op],".")-1))=Right(Year(Date()),1)) AND ((TableDecompteOperations.[Code Nature]) Like "P" Or (TableDecompteOperations.[Code Nature])="A"))
ben g plus aucun champ qui correspond...peut etre parceque je ne peux pas comparer deux chiffres a un seul?..est ce que je peux comparer "3" par ex à "04" ?
encore merci!
A+!
j'avoue que j'ai fait un copier coller et que j'ai tout mis dans le critere de mon champ dans ma requete.or mon champs s'appelle N° Op
et g le message d'erreur suivant : l'expression comporte un point ! ou ( non valide et ca pointe sur InStr(
le fait qu'il y ai un espace dans le nom de mon champ peut poser un pb?
merci d'avance
ben voila exactement ce que g mis :
val(left([TableDecompteOperations].[N° Op],InStr(1,[TableDecompteOperations].[N° Op],"/")-1))>4
et bien cela me met que la syntaxe de l'expression est incorrecte..j'avoue que je ne vois pas bien ou..
si jamais une erreur te saute aux yeux..
et encore merci!
marche très bien chez moi, avec les différentes façons de l'écrire...
A+ Blux
voila ce que donne ma requete access en sql :
SELECT TableDecompteOperations.Subdivision, TableDecompteOperations.[Code Nature], Sum(TableDecompteOperations.C) AS SommeDeC, Sum(TableDecompteOperations.R) AS SommeDeR, Sum(TableDecompteOperations.M) AS SommeDeM, Sum(TableDecompteOperations.A) AS SommeDeA, TableDecompteOperations.[N° Op]
FROM TableDecompteOperations
WHERE val(left([TableDecompteOperations].[N° Op],InStr(1,TableDecompteOperations.[N° Op],"/")-1))>4
GROUP BY TableDecompteOperations.Subdivision, TableDecompteOperations.[Code Nature], TableDecompteOperations.[N° Op]
HAVING (((TableDecompteOperations.[Code Nature]) Like "O"));
encore merci
a +!
A+ Blux