Récuperer variable pour une requête SQL

Bonjour à tous

Je rencontre un souci pour récupérer une variable dans mon code VBA :

Voici le code

Sub test1()
'
' test1 Macro
'
Dim labo As String

Message = "Merci de saisir le code labo SVP! "
Titre = "CODE DU LABORATOIRE"
Defaut = " "

Reponse = InputBox(Message, Titre, Defaut)
labo = " ' " & CStr(Reponse) & " ' "

  Application.CutCopyMode = False
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "ODBC;DSN=XXXXX;UID=XXXXX;PWD=XXXXXX", Destination:=Range("$A$1")).QueryTable
        .CommandText = Array( _
        "select nodem," & Chr(10) & "nodemx, " & Chr(10) & "patient.nom," & Chr(10) & "patient.prenom" & Chr(10) & "from demande" & Chr(10) & "join patient on patient.nopat =demande.nopat" & Chr(10) & "where " _
        , "clabo =' & Reponse & ' " & Chr(10) & "and demande.datenreg ='190527'" & Chr(10) & "order by " & Chr(10) & "nodemx")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .RefreshPeriod = False
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "tabyupppop"
        .Refresh BackgroundQuery:=False
    End With

l'inputbox apparait bien , je saisi donc le code labo et je n'ai aucun retour que des cases vides dans le tableau

capture d ecran 2019 05 28 a 07 02 36

Je précise que si dans la requête originale je saisi le code labo en dur ( Where clabo ='A') ça fonctionne !!

Merci pour votre aide

Cordialement

Bonjour

Un problème d'espace a priori

Pourquoi Défaut est un espace et pas une chaîne vide ? Et quel est son intérêt ?

labo = " ' " & CStr(Reponse) & " ' " donnera ' A ' et non 'A'

Les inputbox renvoient des chaînes donc le CStr n'est sans doute pas utile

Bonjour 78Chris

Merci pour ton retour

j'ai modifié les espaces comme tu me l'a suggéré ( j'ai mis un bout du code)

Dim labo As String

Message = "Merci de saisir le code labo SVP! "
Titre = "CODE DU LABORATOIRE"
Defaut = ""

Reponse = InputBox(Message, Titre, Defaut)
labo = "'" & CStr(Reponse) & "'"

        , "clabo =' & Reponse & ' 
        .Refresh BackgroundQuery:=False
    End With

'

j'ai une erreur sur le .refreshBackgroundQuery : =False ( si je mets à True c'est pareil)

capture d ecran 2019 05 28 a 11 44 11

Voila ce que me renvoie Excel !

Une idée STP

Cordialement

bonjour,

la syntaxe de création de ton SQL n'est pas correcte

remplace ceci

, "clabo =' & Reponse & ' " &

par

, "clabo ='" & Reponse & "'" &

Rien n'y fait toujours la même erreur sur le .refresh

capture d ecran 2019 05 28 a 13 02 57

Il doit y avoir un espace de trop ou un espace manquant ....... c'est rageant

bonjour,

le sql généré est correct, j'ai adapté ton code pour le rendre visible.

le problème est ailleurs.

Sub test1()
'
' test1 Macro
'
    Dim labo As String

    Message = "Merci de saisir le code labo SVP! "
    Titre = "CODE DU LABORATOIRE"
    Defaut = ""

    Reponse = InputBox(Message, Titre, Defaut)

    Sql = "select nodem, nodemx, patient.nom, patient.prenom from demande join patient on patient.nopat = demande.nopat " & Chr(10) & _
          "where clabo ='" & Reponse & "' and demande.datenreg ='190527' order by nodemx"
    MsgBox Sql

    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
                                     "ODBC;DSN=XXXXX;UID=XXXXX;PWD=XXXXXX", Destination:=Range("$A$1")).QueryTable
        .CommandText = Sql
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .RefreshPeriod = False
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "tabyupppop"
        .Refresh BackgroundQuery:=False
    End With
End Sub

Super h2so4

Dans la même foulée je vais aussi mettre une inputBox sur la date .

Si je veux changer .ListObject.DisplayName = "tabyupppop"

je dois aussi faire une InputBox pour récupérer le nom du tableau ? STP

bonjour,

j'ai pas compris quelle était ta question.

je pense que tu as tous les éléments pour le faire par toi-même. N'hésite pas à nous revenir si tu as encore des questions.

Ok h2so4

je clôture mon ticket

Je reviendrais si jamais je "cale" car tu as compris je découvre la syntaxe Vba, encre une fois un grand MERCI

Bonjour,

voici comment ajouter la sélection d'un code postal et le choix d'un nom de tableau variables.

Sub test1()
'
' test1 Macro
'
    Dim labo As String

    Message = "Merci de saisir le code labo SVP! "
    Titre = "CODE DU LABORATOIRE"
    Defaut = ""

    Reponse = InputBox(Message, Titre, Defaut)
    codepostal = InputBox("Code Postal", "Veuillez saisir le code postal", "")
    nomdelatable = InputBox("Table", "Veuillez introduire un nom de table", "")

    Sql = "select nodem, nodemx, patient.nom, patient.prenom from demande join patient on patient.nopat = demande.nopat where clabo ='" & Reponse & "' and demande.datenreg ='" & codepostal & "' order by nodemx"
    MsgBox Sql 'à supprimer si l'affichage n'est plus nécesaire

    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
                                     "ODBC;DSN=XXXXX;UID=XXXXX;PWD=XXXXXX", Destination:=Range("$A$1")).QueryTable
        .CommandText = Sql
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .RefreshPeriod = False
        .PreserveColumnInfo = True
        .ListObject.DisplayName = nomdelatable
        .Refresh BackgroundQuery:=False
    End With
End Sub

Bonjour h2so4 , bonjour à tous

Message bien reçu , j'ai compris plus ou moins la syntaxe VBA entre les espaces et les & _ à respecter sinon rien ne fonctionne.

Encore une dernière requête SVP

Dans ma requête sur le nombre de dossiers je dois exclure les dossiers en préaccueil , donc dans mon code en SQL je mets ceci

and demande.nodemx not like '%?%' en VBA je n'ai pas d'erreur le code va jusqu'au bout mais il me ramène les dossiers pré accueillis alors qu'il ne devrait pas !

capture d ecran 2019 05 30 a 10 14 03

Sur la capture d'écran le ? signifie que ce dossier n'est pas finalisé contrairement au B90529A0380 et B90529A0381

Il y a surement des espaces ou des " ou ' encadrant ' % ? % '

Précision sous le requéteur Oracle (Sql developper) ça fonctionne je n'ai pas les numéros de dossiers avec des ?

Merci pour votre retour

Cordialement

Re bonjour

Finalement il y avait un espace de trop au lieu de :

and demande.nodemx not like ' % ? % ' 

il faut réduire les espaces entre les sigles % et les quotes

and demande.nodemx not like '%?%' 

Résolu

Rechercher des sujets similaires à "recuperer variable requete sql"