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

Rechercher des sujets similaires à "execution requete sql vba"