Exécution de requête SQL en VBA
Bonjour,
Je suis débutant en VBA et je suis actuellement bloqué pour exécuter les requête SQL de la macro suivantes:
Sub MAJ()
Dim L As Integer
Dim CDE As String
Dim LigneCDE As String
L = 1
For L = 1 To Range("AB65356").End(xlUp).Row
If Range("AB" & L) = "x" Then
CDE = Range("A" & L)
LigneCDE = Range("B" & L)
Dim article As String
Dim tpsCU As String
Dim tpsJet As String
article = "SELECT BECTCODEPF FROM BESOIN WHERE BEKTNUMERO = '" + CDE + "' AND BEKTLIGNE = '" + LigneCDE + "'"
tpsCU = "SELECT BECNPREVU-BECNREALIS As tpsrestant FROM BESOIN WHERE (BEKTNUMERO = '" + CDE + "' AND BEKTLIGNE = '" + LigneCDE + "') AND BECTCODCOM = '212000' "
tpsJet = "SELECT BECNPREVU-BECNREALIS As tpsrestant FROM BESOIN WHERE (BEKTNUMERO = '" + CDE + "' AND BEKTLIGNE = '" + LigneCDE + "') AND BECTCODCOM = '211200' "
MsgBox (article)
MsgBox (tpsCU)
MsgBox (tpsJet)
Range("E" & L).Value = article
Range("X" & L).Value = tpsCU
Range("Z" & L).Value = tpsJet
End If
Next L
End Sub
Pouvez-vous me venir en aide svp.
Bonjour,
Avant de répondre davantage, plusieurs points :
1/ Quel est le format de la base interrogée? Dbase, Access, MySql, SqlServer, autre? La base est-elle protégée par login/mot de passe?
Rq1 : on ne se connecte pas de la même façon suivant le format
Rq2 : ton code n'a pas d'instruction de connexion
Rq3 : ne pas confondre chaine de requête et son résultat
Rq4 : en Vba une requête Sql s'écrit avec quelques particularités de syntaxe
2/ A la lecture du code, il ne me semble pas optimum de faire 3 requêtes différentes sur la même table pour chacune des lignes de la feuille excel. A première vue, ce que je ferai pour ce besoin :
* une seule requête :
SELECT BECTCODEPF, BECNPREVU-BECNREALIS FROM BESOIN
* stockage du résultat de la requête dans un tableau mis en mémoire
* puis boucle sur les lignes de la feuille pour sélectionner les info pertinentes du tableau (selon valeurs en A, B et +-code), pour les afficher en E, X et Z
Pierre
Bonjour Pierre,
Tout d'abord merci de me venir en aide. C'est une table SQL Server. Il faut donc faire une connexion ODBC je crois.
J'ai essayé de faire autrement mais j'ai un autre problème. J'ai fait comme vous avait dit, j'ai fait une connexion via l'assistant excel et je remonte toute la table dans la Feuill4 mais maintenant j'ai des problème d'accès aux feuille excel.
Sub MAJ()
Dim L As Integer
Dim i As Integer
Dim j As Integer
Dim CDE As String
Dim LigneCDE As String
L = 1
i = 1
j = 1
For L = 1 To ActiveSheet.Range("AB65356").End(xlUp).Row
If ActiveSheet.Range("AB" & L) = "x" Then
CDE = ActiveSheet.Range("A" & L)
LigneCDE = ActiveSheet.Range("B" & L)
For i = 1 To Worksheets("Feuil4").Range("F").End(xlUp).Row
If Worksheets("Feuil4").Range("F" & i) = ActiveSheet.Range("A") Then
For j = 1 To Worksheets("Feuil4").Range("G").End(xlUp).Row
If Worksheets("Feuil4").Range("G" & j) = ActiveSheet.Range("B") Then
ActiveSheet.Range("E" & L).Value = Worksheets("Feuill4").Range("D")
If Worksheets("Feuill4").Range("C") = "212000" Then
ActiveSheet.Range("X" & L).Value = Worksheets("Feuill4").Range("H")
End If
If Worksheets("Feuill4").Range("C") = "211200" Then
ActiveSheet.Range("Z" & L).Value = Worksheets("Feuill4").Range("H")
End If
End If
Next j
End If
Next i
End If
ActiveSheet.Range("AB" & L).Value = ""
Next L
End Sub
C'est bon j'ai réussi à faire ce que je voulais.
Sub MAJ()
Dim L As Integer
Dim i As Integer
Dim j As Integer
Dim CDE As String
Dim LigneCDE As String
Dim test As String
Dim article As String
Dim machine As String
L = 1
i = 1
j = 1
For L = 1 To ActiveSheet.Range("AB65356").End(xlUp).Row
If ActiveSheet.Range("AB" & L) = "x" Then
CDE = ActiveSheet.Range("A" & L)
LigneCDE = ActiveSheet.Range("B" & L)
For i = 1 To Sheets("table").Range("F65356").End(xlUp).Row
If Sheets("table").Range("G" & i) = LigneCDE And Sheets("table").Range("F" & i) = CDE Then
ActiveSheet.Range("E" & L).Value = Sheets("table").Range("D" & i)
article = ActiveSheet.Range("E" & L).Value
End If
If Sheets("table").Range("C" & i) = "212000" And Sheets("table").Range("G" & i) = LigneCDE And Sheets("table").Range("F" & i) = CDE And Sheets("table").Range("D" & i) = article Then
ActiveSheet.Range("X" & L).Value = Sheets("table").Range("H" & i)
'test = ActiveSheet.Range("X" & L).Value
Else
ActiveSheet.Range("X" & L).Value = ""
'test = ActiveSheet.Range("X" & L).Value
End If
If Sheets("table").Range("G" & i) = LigneCDE And Sheets("table").Range("F" & i) = CDE And Sheets("table").Range("C" & i) = "211200" And Sheets("table").Range("D" & i) = article Then
ActiveSheet.Range("Z" & L).Value = Sheets("table").Range("H" & i)
Else
ActiveSheet.Range("Z" & L).Value = ""
End If
Next i
End If
ActiveSheet.Range("AB" & L).Value = ""
Next L
End Sub
Merci pour ton aide Pierre