Aide sur VBA pour une requête SQL

Résolu/Fermé
moby79 Messages postés 16 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 19 mars 2012 - 7 avril 2011 à 11:39
moby79 Messages postés 16 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 19 mars 2012 - 22 avril 2011 à 09:22
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
A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 avril 2011 à 13:23
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
moby79 Messages postés 16 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 19 mars 2012
7 avril 2011 à 15:02
Merci beaucoup, sa fonctionne parfaitement!!
0
moby79 Messages postés 16 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 19 mars 2012
Modifié par moby79 le 8/04/2011 à 08:41
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 avril 2011 à 08:51
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
moby79 Messages postés 16 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 19 mars 2012
22 avril 2011 à 09:22
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
moby79 Messages postés 16 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 19 mars 2012
8 avril 2011 à 09:42
Merci beaucoup, cela fonctionne!!
0