Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

question pour spécialistes d'access et excel

9 réponses
Avatar
eric.zzzz
Bonjour,
Voici mon code :
Private Sub Commande81_Click()
Dim qd As QueryDef
Dim Chaine
On Error GoTo Commande81_Click_Err
Chaine =3D "SELECT IndGSdo.Niv, IndGSdo.Code, IndGSdo.TypDipl,
IndGSdo.GSNdo, IndGSdo.GSdo, IndGSdo.GSNda, IndGSdo.GrpSpec,
IndGSdo.Lib, IndGSdo.DateOuv, IndGSdo.Dat1reSes, IndGSdo.DatDernSes,
IndGSdo.TxSpecial, IndGSdo.EffTotalEntrants, IndGSdo.DontPartScol,
IndGSdo.PublDansScol, IndGSdo.EffScol "
Chaine3 =3D "FROM IndGSdo WHERE IndGSdo.GSdo=3D[Formulaires]!
[Form_IndicGSdorigine]![GSdo]"
Chaine =3D Chaine & Chaine3
Set qd =3D CurrentDb.CreateQueryDef("Requete_Temporaire", Chaine)
DoCmd.TransferSpreadsheet acExport, 8, "Requete_Temporaire", "D:
\Baf\Tableautest", True, ""
Call Shell("excel.exe D:\Baf\Tableautest", 1)

L=E0, =E7a marche sans probl=E8me; mais si je rajoute une chaine2 :
Chaine =3D "SELECT IndGSdo.Niv, IndGSdo.Code, IndGSdo.TypDipl,
IndGSdo.GSNdo, IndGSdo.GSdo, IndGSdo.GSNda, IndGSdo.GrpSpec,
IndGSdo.Lib, IndGSdo.DateOuv, IndGSdo.Dat1reSes, IndGSdo.DatDernSes,
IndGSdo.TxSpecial, IndGSdo.EffTotalEntrants, IndGSdo.DontPartScol,
IndGSdo.PublDansScol, IndGSdo.EffScol, "
'(NB : en r=E9alit=E9, dans chaine2, il y a plusieurs champs, j'ai mis un
seul champ juste pour tester...)
Chaine2 =3D "IndGSdo.IPA07 "
Chaine =3D Chaine & Chaine2
Chaine3 =3D "FROM IndGSdo WHERE IndGSdo.GSdo=3D[Formulaires]!
[Form_IndicGSdorigine]![GSdo]"
Chaine =3D Chaine & Chaine3
Set qd =3D CurrentDb.CreateQueryDef("Requete_Temporaire", Chaine)
DoCmd.TransferSpreadsheet acExport, 8, "Requete_Temporaire", "D:
\Baf\Tableautest", True, ""
Call Shell("excel.exe D:\Baf\Tableautest", 1)
L=E0, le DoCmd s'ex=E9cute, je constate que la requete_temporaire est bien
cr=E9=E9e, mais apr=E8s, le code "saute" =E0 la gestion d'erreurs et j'ai un=

message vbOkOnly :"Trop de champs d=E9finis"

Merci d'avance si qqu'un a une id=E9e...
Eric

9 réponses

Avatar
Pierre CFI [mvp]
bonjour
tu as un critére extérieur dans ta req
a écrit dans le message de news:

Bonjour,
Voici mon code :
Private Sub Commande81_Click()
Dim qd As QueryDef
Dim Chaine
On Error GoTo Commande81_Click_Err
Chaine = "SELECT IndGSdo.Niv, IndGSdo.Code, IndGSdo.TypDipl,
IndGSdo.GSNdo, IndGSdo.GSdo, IndGSdo.GSNda, IndGSdo.GrpSpec,
IndGSdo.Lib, IndGSdo.DateOuv, IndGSdo.Dat1reSes, IndGSdo.DatDernSes,
IndGSdo.TxSpecial, IndGSdo.EffTotalEntrants, IndGSdo.DontPartScol,
IndGSdo.PublDansScol, IndGSdo.EffScol "
Chaine3 = "FROM IndGSdo WHERE IndGSdo.GSdo=[Formulaires]!
[Form_IndicGSdorigine]![GSdo]"
Chaine = Chaine & Chaine3
Set qd = CurrentDb.CreateQueryDef("Requete_Temporaire", Chaine)
DoCmd.TransferSpreadsheet acExport, 8, "Requete_Temporaire", "D:
BafTableautest", True, ""
Call Shell("excel.exe D:BafTableautest", 1)

Là, ça marche sans problème; mais si je rajoute une chaine2 :
Chaine = "SELECT IndGSdo.Niv, IndGSdo.Code, IndGSdo.TypDipl,
IndGSdo.GSNdo, IndGSdo.GSdo, IndGSdo.GSNda, IndGSdo.GrpSpec,
IndGSdo.Lib, IndGSdo.DateOuv, IndGSdo.Dat1reSes, IndGSdo.DatDernSes,
IndGSdo.TxSpecial, IndGSdo.EffTotalEntrants, IndGSdo.DontPartScol,
IndGSdo.PublDansScol, IndGSdo.EffScol, "
'(NB : en réalité, dans chaine2, il y a plusieurs champs, j'ai mis un
seul champ juste pour tester...)
Chaine2 = "IndGSdo.IPA07 "
Chaine = Chaine & Chaine2
Chaine3 = "FROM IndGSdo WHERE IndGSdo.GSdo=[Formulaires]!
[Form_IndicGSdorigine]![GSdo]"
Chaine = Chaine & Chaine3
Set qd = CurrentDb.CreateQueryDef("Requete_Temporaire", Chaine)
DoCmd.TransferSpreadsheet acExport, 8, "Requete_Temporaire", "D:
BafTableautest", True, ""
Call Shell("excel.exe D:BafTableautest", 1)
Là, le DoCmd s'exécute, je constate que la requete_temporaire est bien
créée, mais après, le code "saute" à la gestion d'erreurs et j'ai un
message vbOkOnly :"Trop de champs définis"

Merci d'avance si qqu'un a une idée...
Eric
Avatar
eric.zzzz
On 2 avr, 12:37, "Pierre CFI [mvp]"
wrote:
bonjour
tu as un critére extérieur dans ta req


Peut-tu être plus précis, je n'ai pas compris...(je n'ai fait que
rajoute le champ IPA07 ...)

Avatar
Pierre CFI
dans la req que tu fais, il y a uncritére qui est la valeur d'un champ de
formulaire et çà en vba çà passe pas, pour étre sur tu mets un critére en
"dur" , et tu testes

--
Pierre CFI
a écrit dans le message de news:

On 2 avr, 12:37, "Pierre CFI [mvp]"
wrote:
bonjour
tu as un critére extérieur dans ta req


Peut-tu être plus précis, je n'ai pas compris...(je n'ai fait que
rajoute le champ IPA07 ...)

Avatar
eric.zzzz
Je ne sais pas si tu as vu que j'avais écrit : "Là, ça marche sans
problème; mais si je rajoute une chaine2 ..."
Donc, ça marche même avec un critère extérieur. ça ne marche plus
quand je rajoute la chaine2
Avatar
Gilbert
Bonjour,

As-tu essayé d'exécuter ta requête "Requete_Temporaire" pour vérifier ?

--
Cordialement,

Gilbert


a écrit dans le message de
news:
Bonjour,
Voici mon code :
Private Sub Commande81_Click()
Dim qd As QueryDef
Dim Chaine
On Error GoTo Commande81_Click_Err
Chaine = "SELECT IndGSdo.Niv, IndGSdo.Code, IndGSdo.TypDipl,
IndGSdo.GSNdo, IndGSdo.GSdo, IndGSdo.GSNda, IndGSdo.GrpSpec,
IndGSdo.Lib, IndGSdo.DateOuv, IndGSdo.Dat1reSes, IndGSdo.DatDernSes,
IndGSdo.TxSpecial, IndGSdo.EffTotalEntrants, IndGSdo.DontPartScol,
IndGSdo.PublDansScol, IndGSdo.EffScol "
Chaine3 = "FROM IndGSdo WHERE IndGSdo.GSdo=[Formulaires]!
[Form_IndicGSdorigine]![GSdo]"
Chaine = Chaine & Chaine3
Set qd = CurrentDb.CreateQueryDef("Requete_Temporaire", Chaine)
DoCmd.TransferSpreadsheet acExport, 8, "Requete_Temporaire", "D:
BafTableautest", True, ""
Call Shell("excel.exe D:BafTableautest", 1)

Là, ça marche sans problème; mais si je rajoute une chaine2 :
Chaine = "SELECT IndGSdo.Niv, IndGSdo.Code, IndGSdo.TypDipl,
IndGSdo.GSNdo, IndGSdo.GSdo, IndGSdo.GSNda, IndGSdo.GrpSpec,
IndGSdo.Lib, IndGSdo.DateOuv, IndGSdo.Dat1reSes, IndGSdo.DatDernSes,
IndGSdo.TxSpecial, IndGSdo.EffTotalEntrants, IndGSdo.DontPartScol,
IndGSdo.PublDansScol, IndGSdo.EffScol, "
'(NB : en réalité, dans chaine2, il y a plusieurs champs, j'ai mis un
seul champ juste pour tester...)
Chaine2 = "IndGSdo.IPA07 "
Chaine = Chaine & Chaine2
Chaine3 = "FROM IndGSdo WHERE IndGSdo.GSdo=[Formulaires]!
[Form_IndicGSdorigine]![GSdo]"
Chaine = Chaine & Chaine3
Set qd = CurrentDb.CreateQueryDef("Requete_Temporaire", Chaine)
DoCmd.TransferSpreadsheet acExport, 8, "Requete_Temporaire", "D:
BafTableautest", True, ""
Call Shell("excel.exe D:BafTableautest", 1)
Là, le DoCmd s'exécute, je constate que la requete_temporaire est bien
créée, mais après, le code "saute" à la gestion d'erreurs et j'ai un
message vbOkOnly :"Trop de champs définis"

Merci d'avance si qqu'un a une idée...
Eric
Avatar
eric.zzzz
On 2 avr, 17:47, "Gilbert" wrote:
Bonjour,

As-tu essayé d'exécuter ta requête "Requete_Temporaire" pour vérif ier ?


Evidemment..O:))
J'ai réglé le probl en diminuant la longueur des chaines : j'ai
remplacé DatDernSes par DatDer, EffTotalEntrants par EfTot, etc.
J'en déduis qu'on est limité...

Avatar
Michel_D
Bonjour,

On 2 avr, 17:47, "Gilbert" wrote:
Bonjour,

As-tu essayé d'exécuter ta requête "Requete_Temporaire" pour vérifier ?


Evidemment..O:))
J'ai réglé le probl en diminuant la longueur des chaines : j'ai
remplacé DatDernSes par DatDer, EffTotalEntrants par EfTot, etc.
J'en déduis qu'on est limité...


Tu peux utiliser un alias pour la table car tu dois être limité sur la
longueur de la chaîne (peut-être 255 caractères), fait afficher la
longueur pour en avoir le coeur net.

L'exemple avec un alias :
Chaine = "SELECT T1.Niv, T1.Code, etc ...
[...]
Chaine3 = "FROM IndGSdo AS T1 WHERE T1.GSdo=[Formulaires]! etc ...


Avatar
eric.zzzz
On 2 avr, 18:39, Michel_D wrote:
Bonjour,

Tu peux utiliser un alias pour la table car tu dois être limité sur la
  longueur de la chaîne (peut-être 255 caractères), fait afficher la
  longueur pour en avoir le coeur net.

L'exemple avec un alias :
Chaine = "SELECT T1.Niv, T1.Code, etc ...
[...]
Chaine3 = "FROM IndGSdo AS T1 WHERE T1.GSdo=[Formulaires]! etc ...


Merci, je ferais un essai...

Avatar
eric.zzzz
Tu peux utiliser un alias pour la table car tu dois être limité sur la
  longueur de la chaîne (peut-être 255 caractères), fait afficher la
  longueur pour en avoir le coeur net.


Effectivement, ça ne marche que si la longeur du code SQL est < 255.
J'ai l'impression qu'il n'y a aucune solution dans ce cas là...