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

Pb avec une requete dans Excel ...

6 réponses
Avatar
SuperGolgoth
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete
SQL ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS 'REGION', "
SQLString = SQLString + " opdetm.product_group_a AS 'FAMILLE',
"
SQLString = SQLString + " opdetm.product_group_b AS 'SOUS
FAMILLE', "
SQLString = SQLString + " opdetm.product AS 'CODE
PRODUIT', "
SQLString = SQLString + " opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS 'QUANTITE',
"
SQLString = SQLString + " opdetm.val AS 'VALEUR', "
SQLString = SQLString + " opdetm.cost_of_sale AS 'COUT', "
SQLString = SQLString + " opheadm.invoice_date AS 'DATE
FACT', "
SQLString = SQLString + " opheadm.invoice_customer AS 'CLIENT
FAC', "
SQLString = SQLString + " opheadm.customer AS 'CLIENT
LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N° FACT',
"
SQLString = SQLString + " opheadm.alpha AS 'NOM
REDUIT', "
SQLString = SQLString + " opheadm.address1 AS 'TITRE', "
SQLString = SQLString + " opheadm.address2 AS 'ADRESSE2',
"
SQLString = SQLString + " opheadm.address3 AS 'ADRESSE3',
"
SQLString = SQLString + " opheadm.address4 AS 'ADRESSE4',
"
SQLString = SQLString + " opheadm.address5 AS 'ADRESSE5',
"
SQLString = SQLString + " opdetm.order_no AS 'N° ORDER'
"
SQLString = SQLString + "FROM "
SQLString = SQLString + " scheme.opdetm opdetm, "
SQLString = SQLString + " scheme.opheadm opheadm "
SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete
genre WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais
comment en etre sur et comment resoudre ce pb ...
Merci

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~

6 réponses

Avatar
SuperGolgoth
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete et
non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete SQL
ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS 'REGION', "
SQLString = SQLString + " opdetm.product_group_a AS 'FAMILLE', "
SQLString = SQLString + " opdetm.product_group_b AS 'SOUS FAMILLE', "
SQLString = SQLString + " opdetm.product AS 'CODE PRODUIT', "
SQLString = SQLString + " opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS 'QUANTITE', "
SQLString = SQLString + " opdetm.val AS 'VALEUR', "
SQLString = SQLString + " opdetm.cost_of_sale AS 'COUT', "
SQLString = SQLString + " opheadm.invoice_date AS 'DATE FACT', "
SQLString = SQLString + " opheadm.invoice_customer AS 'CLIENT FAC', "
SQLString = SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N° FACT', "
SQLString = SQLString + " opheadm.alpha AS 'NOM REDUIT', "
SQLString = SQLString + " opheadm.address1 AS 'TITRE', "
SQLString = SQLString + " opheadm.address2 AS 'ADRESSE2', "
SQLString = SQLString + " opheadm.address3 AS 'ADRESSE3', "
SQLString = SQLString + " opheadm.address4 AS 'ADRESSE4', "
SQLString = SQLString + " opheadm.address5 AS 'ADRESSE5', "
SQLString = SQLString + " opdetm.order_no AS 'N° ORDER' "
SQLString = SQLString + "FROM "
SQLString = SQLString + " scheme.opdetm opdetm, "
SQLString = SQLString + " scheme.opheadm opheadm "
SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete genre
WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais comment
en etre sur et comment resoudre ce pb ...
Merci


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Avatar
Michel Pierron
Bonjour SuperGolgoth;
As- tu simplement essayé:
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2") + " AND " + Range("E3")

Sinon, tu peux également essayer:
Range("E2").Text + " AND " + Range("E3").Text

MP

"SuperGolgoth" a écrit dans le message de
news:
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete et
non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete SQL
ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS 'REGION', "
SQLString = SQLString + " opdetm.product_group_a AS 'FAMILLE', "
SQLString = SQLString + " opdetm.product_group_b AS 'SOUS FAMILLE', "
SQLString = SQLString + " opdetm.product AS 'CODE PRODUIT', "
SQLString = SQLString + " opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS 'QUANTITE', "
SQLString = SQLString + " opdetm.val AS 'VALEUR', "
SQLString = SQLString + " opdetm.cost_of_sale AS 'COUT', "
SQLString = SQLString + " opheadm.invoice_date AS 'DATE FACT', "
SQLString = SQLString + " opheadm.invoice_customer AS 'CLIENT FAC', "
SQLString = SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N° FACT', "
SQLString = SQLString + " opheadm.alpha AS 'NOM REDUIT', "
SQLString = SQLString + " opheadm.address1 AS 'TITRE', "
SQLString = SQLString + " opheadm.address2 AS 'ADRESSE2', "
SQLString = SQLString + " opheadm.address3 AS 'ADRESSE3', "
SQLString = SQLString + " opheadm.address4 AS 'ADRESSE4', "
SQLString = SQLString + " opheadm.address5 AS 'ADRESSE5', "
SQLString = SQLString + " opdetm.order_no AS 'N° ORDER' "
SQLString = SQLString + "FROM "
SQLString = SQLString + " scheme.opdetm opdetm, "
SQLString = SQLString + " scheme.opheadm opheadm "
SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete genre
WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais comment
en etre sur et comment resoudre ce pb ...
Merci


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~




Avatar
SuperGolgoth
Excellent ... la reponse etait :
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN '" +
Range("E2").Text + "' AND '" + Range("E3").Text + "'"
Il faut rajouter les '
Merci encore


Michel Pierron a émis l'idée suivante :
Bonjour SuperGolgoth;
As- tu simplement essayé:
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2") + " AND " + Range("E3")

Sinon, tu peux également essayer:
Range("E2").Text + " AND " + Range("E3").Text

MP

"SuperGolgoth" a écrit dans le message de
news:
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete et
non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete SQL
ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS 'REGION', "
SQLString = SQLString + " opdetm.product_group_a AS 'FAMILLE', "
SQLString = SQLString + " opdetm.product_group_b AS 'SOUS FAMILLE',
" SQLString = SQLString + " opdetm.product AS 'CODE
PRODUIT', " SQLString = SQLString + " opdetm.long_description AS
'LIBELLE PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS 'QUANTITE', "
SQLString = SQLString + " opdetm.val AS 'VALEUR', "
SQLString = SQLString + " opdetm.cost_of_sale AS 'COUT', "
SQLString = SQLString + " opheadm.invoice_date AS 'DATE FACT', "
SQLString = SQLString + " opheadm.invoice_customer AS 'CLIENT FAC', "
SQLString = SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N° FACT', "
SQLString = SQLString + " opheadm.alpha AS 'NOM REDUIT', "
SQLString = SQLString + " opheadm.address1 AS 'TITRE', "
SQLString = SQLString + " opheadm.address2 AS 'ADRESSE2', "
SQLString = SQLString + " opheadm.address3 AS 'ADRESSE3', "
SQLString = SQLString + " opheadm.address4 AS 'ADRESSE4', "
SQLString = SQLString + " opheadm.address5 AS 'ADRESSE5', "
SQLString = SQLString + " opdetm.order_no AS 'N° ORDER' "
SQLString = SQLString + "FROM "
SQLString = SQLString + " scheme.opdetm opdetm, "
SQLString = SQLString + " scheme.opheadm opheadm "
SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete genre
WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais comment
en etre sur et comment resoudre ce pb ...
Merci


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~



--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~



Avatar
Paul V.
Bonjour,

Les ' sont indispensable dans ton string d'instruction sql et ne peuvent pas
provenir de la valeur des cellules.
cela devrait marcher si tu utilises :

SQLString = SQLString + " AND opheadm.invoice_date BETWEEN '" +
Range("E2") + "' AND '" + Range("E3") & "'"

remarque les signes ' après between, devant et derrière and et à la fin.
Cela devrait marcher.

Si tu utilises "FormulaR1C1", tu dois ensuite retranférer en date comme
ci-dessous :

CDate(Range("E2").FormulaR1C1)
mais dans tous les cas ne pas oublier de mettre les signes '.

HTH

Paul V

SuperGolgoth wrote:
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete
et non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete
SQL ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS
'REGION', " SQLString = SQLString + " opdetm.product_group_a
AS 'FAMILLE', " SQLString = SQLString + " opdetm.product_group_b
AS 'SOUS FAMILLE', " SQLString = SQLString + " opdetm.product
AS 'CODE PRODUIT', " SQLString = SQLString + "
opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS
'QUANTITE', " SQLString = SQLString + " opdetm.val
AS 'VALEUR', " SQLString = SQLString + " opdetm.cost_of_sale
AS 'COUT', " SQLString = SQLString + " opheadm.invoice_date
AS 'DATE FACT', " SQLString = SQLString + "
opheadm.invoice_customer AS 'CLIENT FAC', " SQLString >> SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N°
FACT', " SQLString = SQLString + " opheadm.alpha AS
'NOM REDUIT', " SQLString = SQLString + " opheadm.address1
AS 'TITRE', " SQLString = SQLString + " opheadm.address2
AS 'ADRESSE2', " SQLString = SQLString + " opheadm.address3
AS 'ADRESSE3', " SQLString = SQLString + " opheadm.address4
AS 'ADRESSE4', " SQLString = SQLString + " opheadm.address5
AS 'ADRESSE5', " SQLString = SQLString + " opdetm.order_no
AS 'N° ORDER' " SQLString = SQLString + "FROM " SQLString >> SQLString + " scheme.opdetm opdetm, " SQLString = SQLString + "
scheme.opheadm opheadm " SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete
genre WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais
comment en etre sur et comment resoudre ce pb ...
Merci




Avatar
SuperGolgoth
Thank's


Paul V. a formulé la demande :
Bonjour,

Les ' sont indispensable dans ton string d'instruction sql et ne peuvent pas
provenir de la valeur des cellules.
cela devrait marcher si tu utilises :

SQLString = SQLString + " AND opheadm.invoice_date BETWEEN '" +
Range("E2") + "' AND '" + Range("E3") & "'"

remarque les signes ' après between, devant et derrière and et à la fin.
Cela devrait marcher.

Si tu utilises "FormulaR1C1", tu dois ensuite retranférer en date comme
ci-dessous :

CDate(Range("E2").FormulaR1C1)
mais dans tous les cas ne pas oublier de mettre les signes '.

HTH

Paul V

SuperGolgoth wrote:
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete
et non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete
SQL ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS
'REGION', " SQLString = SQLString + " opdetm.product_group_a
AS 'FAMILLE', " SQLString = SQLString + " opdetm.product_group_b
AS 'SOUS FAMILLE', " SQLString = SQLString + " opdetm.product
AS 'CODE PRODUIT', " SQLString = SQLString + "
opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS
'QUANTITE', " SQLString = SQLString + " opdetm.val
AS 'VALEUR', " SQLString = SQLString + " opdetm.cost_of_sale
AS 'COUT', " SQLString = SQLString + " opheadm.invoice_date
AS 'DATE FACT', " SQLString = SQLString + "
opheadm.invoice_customer AS 'CLIENT FAC', " SQLString >>> SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N°
FACT', " SQLString = SQLString + " opheadm.alpha AS
'NOM REDUIT', " SQLString = SQLString + " opheadm.address1
AS 'TITRE', " SQLString = SQLString + " opheadm.address2
AS 'ADRESSE2', " SQLString = SQLString + " opheadm.address3
AS 'ADRESSE3', " SQLString = SQLString + " opheadm.address4
AS 'ADRESSE4', " SQLString = SQLString + " opheadm.address5
AS 'ADRESSE5', " SQLString = SQLString + " opdetm.order_no
AS 'N° ORDER' " SQLString = SQLString + "FROM " SQLString >>> SQLString + " scheme.opdetm opdetm, " SQLString = SQLString + "
scheme.opheadm opheadm " SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete
genre WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais
comment en etre sur et comment resoudre ce pb ...
Merci




--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~



Avatar
Michel Pierron
Salut Paul;
ça bas de soie comme dirait JPS.
MP

"Paul V." a écrit dans le message de
news:
Bonjour,

Les ' sont indispensable dans ton string d'instruction sql et ne peuvent pas
provenir de la valeur des cellules.
cela devrait marcher si tu utilises :

SQLString = SQLString + " AND opheadm.invoice_date BETWEEN '" +
Range("E2") + "' AND '" + Range("E3") & "'"

remarque les signes ' après between, devant et derrière and et à la fin.
Cela devrait marcher.

Si tu utilises "FormulaR1C1", tu dois ensuite retranférer en date comme
ci-dessous :

CDate(Range("E2").FormulaR1C1)
mais dans tous les cas ne pas oublier de mettre les signes '.

HTH

Paul V

SuperGolgoth wrote:
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete
et non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete
SQL ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS
'REGION', " SQLString = SQLString + " opdetm.product_group_a
AS 'FAMILLE', " SQLString = SQLString + " opdetm.product_group_b
AS 'SOUS FAMILLE', " SQLString = SQLString + " opdetm.product
AS 'CODE PRODUIT', " SQLString = SQLString + "
opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS
'QUANTITE', " SQLString = SQLString + " opdetm.val
AS 'VALEUR', " SQLString = SQLString + " opdetm.cost_of_sale
AS 'COUT', " SQLString = SQLString + " opheadm.invoice_date
AS 'DATE FACT', " SQLString = SQLString + "
opheadm.invoice_customer AS 'CLIENT FAC', " SQLString > >> SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N°
FACT', " SQLString = SQLString + " opheadm.alpha AS
'NOM REDUIT', " SQLString = SQLString + " opheadm.address1
AS 'TITRE', " SQLString = SQLString + " opheadm.address2
AS 'ADRESSE2', " SQLString = SQLString + " opheadm.address3
AS 'ADRESSE3', " SQLString = SQLString + " opheadm.address4
AS 'ADRESSE4', " SQLString = SQLString + " opheadm.address5
AS 'ADRESSE5', " SQLString = SQLString + " opdetm.order_no
AS 'N° ORDER' " SQLString = SQLString + "FROM " SQLString > >> SQLString + " scheme.opdetm opdetm, " SQLString = SQLString + "
scheme.opheadm opheadm " SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete
genre WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais
comment en etre sur et comment resoudre ce pb ...
Merci