[Catégorie modifiée .Net -> VBA] Requête VBA - SQL, trop de caractères de contin [Résolu]

ffs69 13 Messages postés vendredi 15 avril 2011Date d'inscription 11 janvier 2012 Dernière intervention - 15 avril 2011 à 09:48 - Dernière réponse : ffs69 13 Messages postés vendredi 15 avril 2011Date d'inscription 11 janvier 2012 Dernière intervention
- 18 avril 2011 à 17:07
Bonjour à toutes et tous,

Je suis en train d'essayer d'intégrer une requête SQL dans VBA Excel afin d'afficher ma table dans une feuille avant d'en extraire les données.

Afin d'identifier le code avant retouches, j'ai essayé de passer par l'enregistreur de macro comme me l'a suggéré mon frère.

Mon problème est le suivant, pendant l'enregistrement j'ai le message d'erreur : "Trop de caractères de continuité de ligne." et l'enregistreur s'interrompt à ce moment là.

J'ai trouvé sur un message ici quelques pistes, j'ai tenté de faire des essais, en vain, je créé donc un nouveau sujet espérant que vous puissiez m'aider.

Le début de code proposé par Excel avant erreur est comme ceci :

    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;DSN=XXXXXXXX;UID=YYYYYYYY;;APP=Microsoft Office 2003;WSID=GFPCORDIRPO01;DATABASE=ZZZZZZZZ;" _
        , Destination:=Range("$B$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array( _
        "SELECT ALID01.INV_FILE, ALID01.INV_NUM, ALID01.CUST_REF, ALID01.ORDERSOU, ALID01.CREAC_DATE, ALID01.MARK_CODE, ALID" _
        , _
        "01.CUSTP_CODE, ALID02.ACC_CODE, ALID01.SP_CODE, ALID01.TTC_AMOUNT, ALID03.PAY_AMOUNT, ALID01.AMOUNT_SIGN, ALID01.DA" _
        , _
        "TE_DUE,(ALID02.AUT_OVERD+ALID02.AUT_SFAC), ALID02.CUST_PHONE, ALID02.CUST_FAX, ALID02.SIREN_CODE, ALID01.REL1_DATE," _
        , _
        " ALID01.REL2_DATE, ALID01.REL3_DATE, ALID01.BRANC_CODE, ALID01.CUST_CODE, ALID01.ESRC_FILE, ALID01.RC_NUM, ALID08.N" _
        , _
        "BPAY_DAY, ALID18.SIT_NAME, ALID09.SP_CODE, ALID09.SP_NAME, ALID01.OFF_FILE, ALID01.OFF_NUM, ALID02.ACCOL_CODE, ALID" _
        , _
        "02.INV_NAME,(SELECT COUNT(ALID19.PAY_NUM)"&chr(13)&""&chr(10)&"FROM PROALPES..PAYDETUNPAID ALID19"&chr(13)&""&chr(10)&"WHERE ALID19.INV_FILE=ALID01.INV_FIL" _
        , _
        "E AND ALID19.INV_NUM=ALID01.INV_NUM)"&chr(13)&""&chr(10)&"FROM PROALPES..INREFER ALID01"&chr(13)&""&chr(10)&"INNER JOIN PROALPES..CUSTOMER ALID02  ON (ALID" _
        , _
        "02.CUST_CODE=ALID01.CUSTP_CODE)"&chr(13)&""&chr(10)&"INNER JOIN PROALPES..INVPAY ALID03 ON (ALID03.INV_FILE=ALID01.INV_FILE AND ALID03." _
        , _
        "INV_NUM=ALID01.INV_NUM)"&chr(13)&""&chr(10)&"INNER JOIN PROALPES..CUSTTYPE ALID07 ON (ALID07.CUSTY_CODE=ALID02.CUSTY_CODE)"&chr(13)&""&chr(10)&"INNER JOIN " _
        , _
        "PROALPES..PAYMENT ALID08 ON (ALID08.PAY_CODE=ALID01.PAY_CODE)"&chr(13)&""&chr(10)&"INNER JOIN PROALPES..SALESMEN ALID09 ON (ALID09.SP_C" _
        , _
        "ODE=ALID01.SP_CODE)"&chr(13)&""&chr(10)&"LEFT OUTER JOIN PROALPES..CUSTOMDB ALID12  ON (ALID12.CUST_CODE=ALID01.CUSTP_CODE AND ALID12.B" _
        , _
        "RANC_CODE=ALID01.BRANC_CODE)"&chr(13)&""&chr(10)&"LEFT OUTER JOIN PROALPES..CUSTTYPE ALID17 ON (ALID17.CUSTY_CODE=ALID12.CUSTY_CODE)"&chr(13)&""&chr(10)&"L" _


L'ensemble de la requête que je souhaiterais intégrer est la suivante :

SELECT ALID01.INV_FILE, ALID01.INV_NUM, ALID01.CUST_REF, ALID01.ORDERSOU, ALID01.CREAC_DATE, ALID01.MARK_CODE, ALID01.CUSTP_CODE, ALID02.ACC_CODE, ALID01.SP_CODE, ALID01.TTC_AMOUNT, ALID03.PAY_AMOUNT, ALID01.AMOUNT_SIGN, ALID01.DATE_DUE,(ALID02.AUT_OVERD+ALID02.AUT_SFAC), ALID02.CUST_PHONE, ALID02.CUST_FAX, ALID02.SIREN_CODE, ALID01.REL1_DATE, ALID01.REL2_DATE, ALID01.REL3_DATE, ALID01.BRANC_CODE, ALID01.CUST_CODE, ALID01.ESRC_FILE, ALID01.RC_NUM, ALID08.NBPAY_DAY, ALID18.SIT_NAME, ALID09.SP_CODE, ALID09.SP_NAME, ALID01.OFF_FILE, ALID01.OFF_NUM, ALID02.ACCOL_CODE, ALID02.INV_NAME,(SELECT COUNT(ALID19.PAY_NUM)
FROM PROALPES..PAYDETUNPAID ALID19
WHERE ALID19.INV_FILE=ALID01.INV_FILE AND ALID19.INV_NUM=ALID01.INV_NUM)
FROM PROALPES..INREFER ALID01
INNER JOIN PROALPES..CUSTOMER ALID02  ON (ALID02.CUST_CODE=ALID01.CUSTP_CODE)
INNER JOIN PROALPES..INVPAY ALID03 ON (ALID03.INV_FILE=ALID01.INV_FILE AND ALID03.INV_NUM=ALID01.INV_NUM)
INNER JOIN PROALPES..CUSTTYPE ALID07 ON (ALID07.CUSTY_CODE=ALID02.CUSTY_CODE)
INNER JOIN PROALPES..PAYMENT ALID08 ON (ALID08.PAY_CODE=ALID01.PAY_CODE)
INNER JOIN PROALPES..SALESMEN ALID09 ON (ALID09.SP_CODE=ALID01.SP_CODE)
LEFT OUTER JOIN PROALPES..CUSTOMDB ALID12  ON (ALID12.CUST_CODE=ALID01.CUSTP_CODE AND ALID12.BRANC_CODE=ALID01.BRANC_CODE)
LEFT OUTER JOIN PROALPES..CUSTTYPE ALID17 ON (ALID17.CUSTY_CODE=ALID12.CUSTY_CODE)
LEFT OUTER JOIN PROALPES..CONTRACT ALID18 ON (ALID18.ESRC_FILE=ALID01.ESRC_FILE AND ALID18.RC_NUM=ALID01.RC_NUM)
WHERE ALID01.DOC_STATUS<>5 AND ALID01.FLAG_CONSO=2 AND  ( ALID01.FLAG_PAY=1) AND ALID01.TTC_AMOUNT<>0 AND ( ((ALID12.CUSTY_CODE IS NULL OR ALID12.CUSTY_CODE='') AND (ALID07.FACTOR_TYP<>1 OR ALID07.FACTOR_TYP IS NULL)) OR  (ALID12.CUSTY_CODE IS NOT NULL AND ALID12.CUSTY_CODE<>'' AND (ALID17.FACTOR_TYP<>1 OR ALID17.FACTOR_TYP IS NULL)))


Mon soucis étant à priori (si les formules d'introductions sont correctes) un problème de concaténation que je n'arrive pas à faire sans que Excel me mette tout en rouge.

La piste que j'avais trouvé sur ce forum était du style :

Dim Temp As String
Temp = "v7.1.7  06.04.2006" & vbCrLf & _
              "      Ajout du Module 'arf'" & vbCrLf & vbCrLf & _
              "v7.1.6  30.03.2006" & vbCrLf & _
              "      Ajout du Module 'bin'" & vbCrLf & vbCrLf
Temp = Temp & "v7.1.7  06.04.2006" & vbCrLf & _
              "      Ajout du Module 'arf'" & vbCrLf & vbCrLf & _
              "v7.1.6  30.03.2006" & vbCrLf & _
              "      Ajout du Module 'bin'" & vbCrLf & vbCrLf


Mais étant novice en VBA je ne sais pas comment l'intégrer.

Par avance merci pour votre aide, Camille.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
NHenry 14262 Messages postés vendredi 14 mars 2003Date d'inscription 22 septembre 2018 Dernière intervention - 15 avril 2011 à 12:47
3
Merci
Bonjour,

Déjà,
"a"&chr(13)&""&chr(10)&"b"
peut se remplacer par :
"a" & VbCrLf & "b"

Mets bien un espace avant et un autre après tes &

Ensuite, as-tu essayé de faire ta requête en une ligne ?

Mon site

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 15 avril 2011 à 12:51
3
Merci
Bonjour,

Ta 2ème requête a été tronqué, poste là AVEC la 3ème icône en partant de la droite.

Le nombre de caractères de continuation est limité à 24 Voir ici.

Pourquoi mets-tu 2 points pour séparer la table du champ sélectionné ?

Ex:
INNER JOIN PROALPES..CUSTOMER ALID02  ON (ALID02.CUST_CODE=ALID01.CUSTP_CODE)


Essaie de décomposer en plusieurs variables string:

strSelect = "SELECT..."
strFrom = "FROM ..."
strJoin = "INNER JOIN ..."
etc...

ce sera plus clair par la suite pour le debuggage.

Calade

Merci Calade 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de Calade
Meilleure réponse
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 15 avril 2011 à 15:21
3
Merci
Ecris comme ça, ça ne risque pas marcher !

Ta variable strFrom tout de suite après le strSelect est annulé par une autre 2 lignes plus bas.

Idem pour la variable strJoin. Pour cette dernière, soit tu en définis plusieurs (strJoin1, strJoin2, etc..., soit tu les concatènes (ex pour le 2ème strJoin:

StrJoin = strJoin & "INNER JOIN PROALPES..INVPAY ALID03 ON (ALID03.INV_FILE=ALID01.INV_FILE AND ALID03.INV_NUM=ALID01.INV_NUM)"

au passage, je ne comprends toujours pas les 2 points dans PROALPES..INVPAY par exemple.

Pour le strFrom, inclus la 2ème dans le strWhere.

Autre chose, pour des raisons de clarté de code écris systématiquement le mot clé AS même s'il est facultatif.


Calade

Merci Calade 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de Calade
Meilleure réponse
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 18 avril 2011 à 16:34
3
Merci
CommandText est tout simplement du String, pourquoi lui passer un tableau ?

Essaie comme ceci:

.CommandText = strSQL


Calade

Merci Calade 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de Calade
ffs69 13 Messages postés vendredi 15 avril 2011Date d'inscription 11 janvier 2012 Dernière intervention - 15 avril 2011 à 14:32
0
Merci
Tout d'abord merci pour vos réponses.

La requête suivante est extraite du traceur SQL qui me permet de consulter ma BDD et correspond à la Table qui m'intéresse.

Par contre je suis pas expert, je saurais pas trop vous dire où et comment couper, en entier ça donne cela (dans le cadre de code vous pouvez déplacer le texte pour voir sur la droite):

SELECT ALID01.INV_FILE, ALID01.INV_NUM, ALID01.CUST_REF, ALID01.ORDERSOU, ALID01.CREAC_DATE, ALID01.MARK_CODE, ALID01.CUSTP_CODE, ALID02.ACC_CODE, ALID01.SP_CODE, ALID01.TTC_AMOUNT, ALID03.PAY_AMOUNT, ALID01.AMOUNT_SIGN, ALID01.DATE_DUE,(ALID02.AUT_OVERD+ALID02.AUT_SFAC), ALID02.CUST_PHONE, ALID02.CUST_FAX, ALID02.SIREN_CODE, ALID01.REL1_DATE, ALID01.REL2_DATE, ALID01.REL3_DATE, ALID01.BRANC_CODE, ALID01.CUST_CODE, ALID01.ESRC_FILE, ALID01.RC_NUM, ALID08.NBPAY_DAY, ALID18.SIT_NAME, ALID09.SP_CODE, ALID09.SP_NAME, ALID01.OFF_FILE, ALID01.OFF_NUM, ALID02.ACCOL_CODE, ALID02.INV_NAME,(SELECT COUNT(ALID19.PAY_NUM)
FROM PROALPES..PAYDETUNPAID ALID19
WHERE ALID19.INV_FILE=ALID01.INV_FILE AND ALID19.INV_NUM=ALID01.INV_NUM)
FROM PROALPES..INREFER ALID01
INNER JOIN PROALPES..CUSTOMER ALID02  ON (ALID02.CUST_CODE=ALID01.CUSTP_CODE)
INNER JOIN PROALPES..INVPAY ALID03 ON (ALID03.INV_FILE=ALID01.INV_FILE AND ALID03.INV_NUM=ALID01.INV_NUM)
INNER JOIN PROALPES..CUSTTYPE ALID07 ON (ALID07.CUSTY_CODE=ALID02.CUSTY_CODE)
INNER JOIN PROALPES..PAYMENT ALID08 ON (ALID08.PAY_CODE=ALID01.PAY_CODE)
INNER JOIN PROALPES..SALESMEN ALID09 ON (ALID09.SP_CODE=ALID01.SP_CODE)
LEFT OUTER JOIN PROALPES..CUSTOMDB ALID12  ON (ALID12.CUST_CODE=ALID01.CUSTP_CODE AND ALID12.BRANC_CODE=ALID01.BRANC_CODE)
LEFT OUTER JOIN PROALPES..CUSTTYPE ALID17 ON (ALID17.CUSTY_CODE=ALID12.CUSTY_CODE)
LEFT OUTER JOIN PROALPES..CONTRACT ALID18 ON (ALID18.ESRC_FILE=ALID01.ESRC_FILE AND ALID18.RC_NUM=ALID01.RC_NUM)
WHERE ALID01.DOC_STATUS<>5 AND ALID01.FLAG_CONSO=2 AND  ( ALID01.FLAG_PAY=1) AND ALID01.TTC_AMOUNT<>0 AND ( ((ALID12.CUSTY_CODE IS NULL OR ALID12.CUSTY_CODE='') AND (ALID07.FACTOR_TYP<>1 OR ALID07.FACTOR_TYP IS NULL)) OR  (ALID12.CUSTY_CODE IS NOT NULL AND ALID12.CUSTY_CODE<>'' AND (ALID17.FACTOR_TYP<>1 OR ALID17.FACTOR_TYP IS NULL)))


J'ai vu sur Internet que ça pouvait se décomposer en :
strSelect = "SELECT..."
strFrom = "FROM ..."
strJoin = "INNER JOIN ..."
etc...
Mais comme je disais je comprends pas trop comment c'est construit pour le moment.

Je viens d'essayer avec :
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;DSN=proalpes;UID=Administrateur;;APP=Microsoft Office 2003;WSID=GFPCORDIRPO01;DATABASE=PROALPES;" _
        , Destination:=Range("$B$1")).QueryTable
        .CommandType = xlCmdSql
strSelect = "SELECT ALID01.INV_FILE, ALID01.INV_NUM, ALID01.CUST_REF, ALID01.ORDERSOU, ALID01.CREAC_DATE, ALID01.MARK_CODE, ALID01.CUSTP_CODE, ALID02.ACC_CODE, ALID01.SP_CODE, ALID01.TTC_AMOUNT, ALID03.PAY_AMOUNT, ALID01.AMOUNT_SIGN, ALID01.DATE_DUE,(ALID02.AUT_OVERD+ALID02.AUT_SFAC), ALID02.CUST_PHONE, ALID02.CUST_FAX, ALID02.SIREN_CODE, ALID01.REL1_DATE, ALID01.REL2_DATE, ALID01.REL3_DATE, ALID01.BRANC_CODE, ALID01.CUST_CODE, ALID01.ESRC_FILE, ALID01.RC_NUM, ALID08.NBPAY_DAY, ALID18.SIT_NAME, ALID09.SP_CODE, ALID09.SP_NAME, ALID01.OFF_FILE, ALID01.OFF_NUM, ALID02.ACCOL_CODE, ALID02.INV_NAME,(SELECT COUNT(ALID19.PAY_NUM)"
strFrom = "FROM PROALPES..PAYDETUNPAID ALID19"
strWhere = "WHERE ALID19.INV_FILE=ALID01.INV_FILE AND ALID19.INV_NUM=ALID01.INV_NUM)"
strFrom = "FROM PROALPES..INREFER ALID01"
strJoin = "INNER JOIN PROALPES..CUSTOMER ALID02  ON (ALID02.CUST_CODE=ALID01.CUSTP_CODE)"
strJoin = "INNER JOIN PROALPES..INVPAY ALID03 ON (ALID03.INV_FILE=ALID01.INV_FILE AND ALID03.INV_NUM=ALID01.INV_NUM)"
strJoin = "INNER JOIN PROALPES..CUSTTYPE ALID07 ON (ALID07.CUSTY_CODE=ALID02.CUSTY_CODE)"
strJoin = "INNER JOIN PROALPES..PAYMENT ALID08 ON (ALID08.PAY_CODE=ALID01.PAY_CODE)"
strJoin = "INNER JOIN PROALPES..SALESMEN ALID09 ON (ALID09.SP_CODE=ALID01.SP_CODE)"
strJoin = "LEFT OUTER JOIN PROALPES..CUSTOMDB ALID12  ON (ALID12.CUST_CODE=ALID01.CUSTP_CODE AND ALID12.BRANC_CODE=ALID01.BRANC_CODE)"
strJoin = "LEFT OUTER JOIN PROALPES..CUSTTYPE ALID17 ON (ALID17.CUSTY_CODE=ALID12.CUSTY_CODE)"
strJoin = "LEFT OUTER JOIN PROALPES..CONTRACT ALID18 ON (ALID18.ESRC_FILE=ALID01.ESRC_FILE AND ALID18.RC_NUM=ALID01.RC_NUM)"
strWhere = "WHERE ALID01.DOC_STATUS<>5 AND ALID01.FLAG_CONSO=2 AND  ( ALID01.FLAG_PAY=1) AND ALID01.TTC_AMOUNT<>0 AND ( ((ALID12.CUSTY_CODE IS NULL OR ALID12.CUSTY_CODE='') AND (ALID07.FACTOR_TYP<>1 OR ALID07.FACTOR_TYP IS NULL)) OR  (ALID12.CUSTY_CODE IS NOT NULL AND ALID12.CUSTY_CODE<>'' AND (ALID17.FACTOR_TYP<>1 OR ALID17.FACTOR_TYP IS NULL)))"


Mais ça marche pas mieux :-(

Auriez-vous une autre piste?
Commenter la réponse de ffs69
ffs69 13 Messages postés vendredi 15 avril 2011Date d'inscription 11 janvier 2012 Dernière intervention - 18 avril 2011 à 16:26
0
Merci
Bonjour :) Et encore merci pour vos pistes :)

Ça avance mais j'ai pas encore réussi à venir à bout de ma requête

En suivant vos indications et avec l'aide de l'enregistreur de macro, je suis arrivé à quelque chose comme ceci :

Windows("xxxx.xlsm").Activate
Dim strSQL As String

Sheets("BDD1").Select

strSQL = "SELECT ALID01.INV_FILE, ALID01.INV_NUM, ALID01.CUST_REF, ALID01.ORDERSOU, ALID01.CREAC_DATE, ALID01.MARK_CODE, ALID"
strSQL = strSQL & "01.CUSTP_CODE, ALID02.ACC_CODE, ALID01.SP_CODE, ALID01.TTC_AMOUNT, ALID03.PAY_AMOUNT, ALID01.AMOUNT_SIGN, ALID01.DA"
strSQL = strSQL & "TE_DUE,(ALID02.AUT_OVERD+ALID02.AUT_SFAC), ALID02.CUST_PHONE, ALID02.CUST_FAX, ALID02.SIREN_CODE, ALID01.REL1_DATE,"
strSQL = strSQL & " ALID01.REL2_DATE, ALID01.REL3_DATE, ALID01.BRANC_CODE, ALID01.CUST_CODE, ALID01.ESRC_FILE, ALID01.RC_NUM, ALID08.N"
strSQL = strSQL & "BPAY_DAY, ALID18.SIT_NAME, ALID09.SP_CODE, ALID09.SP_NAME, ALID01.OFF_FILE, ALID01.OFF_NUM, ALID02.ACCOL_CODE, ALID"
strSQL = strSQL & "02.INV_NAME,(SELECT COUNT(ALID19.PAY_NUM)" & VbCrLf & "FROM PROALPES..PAYDETUNPAID ALID19" & VbCrLf & "WHERE ALID19.INV_FILE=ALID01.INV_FIL"
strSQL = strSQL & "E AND ALID19.INV_NUM=ALID01.INV_NUM)" & VbCrLf & "FROM PROALPES..INREFER ALID01" & VbCrLf & "INNER JOIN PROALPES..CUSTOMER ALID02  ON (ALID"
strSQL = strSQL & "02.CUST_CODE=ALID01.CUSTP_CODE)" & VbCrLf & "INNER JOIN PROALPES..INVPAY ALID03 ON (ALID03.INV_FILE=ALID01.INV_FILE AND ALID03."
strSQL = strSQL & "INV_NUM=ALID01.INV_NUM)" & VbCrLf & "INNER JOIN PROALPES..CUSTTYPE ALID07 ON (ALID07.CUSTY_CODE=ALID02.CUSTY_CODE)" & VbCrLf & "INNER JOIN "
strSQL = strSQL & "PROALPES..PAYMENT ALID08 ON (ALID08.PAY_CODE=ALID01.PAY_CODE)" & VbCrLf & "INNER JOIN PROALPES..SALESMEN ALID09 ON (ALID09.SP_C"
strSQL = strSQL & "ODE=ALID01.SP_CODE)"
strSQL = strSQL & "LEFT OUTER JOIN PROALPES..CUSTOMDB ALID12  ON (ALID12.CUST_CODE=ALID01.CUSTP_CODE AND ALID12.BRANC_CODE=ALID01.BRAN"
strSQL = strSQL & "C_CODE)" & VbCrLf & "LEFT OUTER JOIN PROALPES..CUSTTYPE ALID17 ON (ALID17.CUSTY_CODE=ALID12.CUSTY_CODE)" & VbCrLf & "LEFT OUTER JOIN PROALP"
strSQL = strSQL & "ES..CONTRACT ALID18 ON (ALID18.ESRC_FILE=ALID01.ESRC_FILE AND ALID18.RC_NUM=ALID01.RC_NUM)" & VbCrLf & "WHERE ALID01.DOC_STATUS"
strSQL = strSQL & "<>5 AND ALID01.FLAG_CONSO=2 AND  ( ALID01.FLAG_PAY=1) AND ALID01.TTC_AMOUNT<>0 AND ( ((ALID12.CUSTY_CODE IS NULL OR"
strSQL = strSQL & " ALID12.CUSTY_CODE='') AND (ALID07.FACTOR_TYP<>1 OR ALID07.FACTOR_TYP IS NULL)) OR  (ALID12.CUSTY_CODE IS NOT NULL "
strSQL = strSQL & "AND ALID12.CUSTY_CODE<>'' AND (ALID17.FACTOR_TYP<>1 OR ALID17.FACTOR_TYP IS NULL)))"

    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=MSDASQL.1;Persist Security Info=True;Extended Properties=""DSN=xxxxx;Description=xxxxx;UID=Administrateur;APP=Micr" _
        , "osoft Office 2003;WSID=xxxxx;DATABASE=xxxxx"""), Destination:= _
        Range("$C$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array(strSQL)
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = _
        "Tableau_SQL_Queries___xxxxx__x.x.x.x____9.16.2"
        .Refresh BackgroundQuery:=False
    End With

End Sub


Ça a l'air mieux, je n'ai plus le problème de trop de caractères de continuité de lignes.

En revanche j'ai maintenant une "erreur d'exécution '13': Incompatibilité de type" à la ligne ".CommandText = Array(strSQL)".

Je crois avoir trouvé des infos mais je sais pas comment adapter dans mon cas si vous pourriez m'aider encore une fois

C'que j'ai trouvé sur le net ressemble à ça :

- "I think there is a limit of 255 characters for the CommandText property."
- "Try putting the SQL string in the sql argument when you Add the QueryTable."
- "If that doesn't work try using the Sql property instead of the CommandText property. It's been replaced by the CommandText property, but still exists for backwards compatibilty. It's also a variant."

Juste je comprends pas bien où et comment je devrais le mettre si l'une ou l'un de vous pouvait m'aider à y voir plus clair ce serait une bénédiction.

Par avance merci.
Commenter la réponse de ffs69
ffs69 13 Messages postés vendredi 15 avril 2011Date d'inscription 11 janvier 2012 Dernière intervention - 18 avril 2011 à 17:07
0
Merci
yyyyyyyyyyyyyyyyééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé merci :)))
Commenter la réponse de ffs69

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.