Aide sur VBA pour une requête SQL

Résolu
Bonjour, je viens de réaliser une requête SQL sur VBA qui fonctionne, pour allez chercher des information sur un client via son numéros:

Destination:=Range("$B$1")).QueryTable
.CommandText = Array( _
"SELECT *" & Chr(13) & "" & Chr(10) & " FROM [Entreprise].[dbo].[Client]" & Chr(13) & "" & Chr(10) & "WHERE clID = 'CL00001'")

Maintenant, je souhaite saisir le N° client sur dans une cellule Excel, et renvoyer cette valeur à la place du 'CL00001' de mon exemple.

j'arrive à mettre ma valeur en 'mémoire' dans une variable num:

Dim num As String

num = Sheets("Feuil1").Range("A4").Value

Et la je n'arrive pas à utiliser cette variable à la place du 'CL00001' de mon exemple

Donc si quelqu'un à une solution à me proposer, je suis preneur!

Merci pour vos réponses

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Bonjour,
    Je ne connais pas du tout les requêtes SQL.
    Cependant avez vous essayé :
    [j'ai ajouté un test : si num est bien entouré de ']
    Dim num As String
    num = Sheets("Feuil1").Range("A4").Value
    If Right(num, 1) <> "'" Then
    num = num & "'"
    End If
    If Left(num, 1) <> "'" Then
    num = "'" & num
    End If
    Destination:=Range("$B$1")).QueryTable 
    .CommandText = Array( _ 
    "SELECT *" & Chr(13) & "" & Chr(10) & " FROM [Entreprise].[dbo].[Client]" & Chr(13) & "" & Chr(10) &"WHERE clID =" & num) 
    1. Maintenant, je voudrais que ma macro s'exécute dés que je change la valeur de ma cellule A4
      (Actuellement je la commande avec un bouton, ce qui n'est pas très pratique!!)

      Merci pour vos réponses
      1. Modérateur
        Salut,
        Clic droit sur l'onglet de la feuille concernée / Visualiser le code puis copier coller ceci (ou quelque chose dans le genre...) :

        Private Sub Worksheet_Change(ByVal Target As Range)
        Dim num As String
        If Target.Address <> "$A$4" Then Exit Sub
        num = Sheets("Feuil1").Range("A4").Value
        If Right(num, 1) <> "'" Then
        num = num & "'"
        End If
        If Left(num, 1) <> "'" Then
        num = "'" & num
        End If
        Destination:=Range("$B$1")).QueryTable 
        .CommandText = Array( _ 
        "SELECT *" & Chr(13) & "" & Chr(10) & " FROM [Entreprise].[dbo].[Client]" & Chr(13) & "" & Chr(10) &"WHERE clID =" & num) 
        End Sub
      2. Bonjour, j'ai un autre soucis: tout mes exemple donné si dessus concerne une macro qui est écrite dans la feuil1. Or je souhaite que ma valeur A4 qui déclenche la macro et qui est une variable de ma requête soit saisie sur une autre feuille (feuil 2 par ex) et garder le résultat de ma requête sur la feuille 1

        j'ai donc écrit le code suivant

        Dans Feuil2 j'ai :

        Private Sub Worksheet_Change(ByVal Target As Range)

        'Exécution automatique
        If Target.Address <> ("A4") Then Exit Sub

        Call Requete
        End Sub

        Dans This Workbook j'ai :

        'Affectation d'une valeur dans la variable
        tabl = Worksheets(2).Range("A4").Value

        'Place [ et ] sur tabl
        If Right(tabl, 1) <> "]" Then
        tabl = tabl & "]"
        End If
        If Left(tabl, 1) <> "[" Then
        tabl = "[" & tabl
        End If

        'Efface les valeur déja présente
        Worksheets(1).Range("B:CW").ClearContents

        'Requete SQL
        With Worksheets(1).ListObjects.Add(SourceType:=0, Source:= _
        "ODBC;DSN=Serveur;UID=aa;PWD=mdp;;;DATABASE=Entreprise" _
        , Destination:=Worksheets(1).Range("$B$1")).QueryTable
        .CommandText = _
        "SELECT" & col & Chr(13) & "" & Chr(10) & "FROM [Entreprise].[dbo]." & tabl & Chr(13) & "" & Chr(10) & "WHERE" & whe & fil
        .Refresh BackgroundQuery:=True
        End With

        End Sub

        Or ce code ne marche pas, j'ai message d'erreur qui me dit q'un sub ou une function non définie, et je ne voit mon erreur, donc si quelqu'un veut bien m'aider

        Merci