Aide sur VBA pour une requête SQL

Résolu
moby79 Messages postés 17 Statut Membre -  
moby79 Messages postés 17 Statut Membre -
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

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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) 
    2
  2. moby79 Messages postés 17 Statut Membre
     
    Merci beaucoup, sa fonctionne parfaitement!!
    0
  3. moby79 Messages postés 17 Statut Membre
     
    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
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0
    2. moby79 Messages postés 17 Statut Membre
       
      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
      0
  4. moby79 Messages postés 17 Statut Membre
     
    Merci beaucoup, cela fonctionne!!
    0