Résultat de requête SQL dans une variable pour boucler dessus

Bonjour,

Tout est dans le titre

Actuellement, je récupère les données de ma bdd via un recordset que j'insère dans une feuille Excel de mon classeur pour traiter les données.

J'aimerais passer par une variable (un tableau ?) pour justement éviter d'avoir une feuille qui contient des données.

J'ai regardé un peu sur internet mais je ne trouve rien de fou.

Une idée de comment insérer les données d'une requêtes qui retourne 2 voir 3 colonnes pour ensuite boucler dessus ?

Merci

Bon a priori j'ai réussi à les mettre dans un tableau.

Par contre j'ai l'impression que les deux colonnes sont mélangées, je n'arrive pas à les distinguer lorsque je boucle dessus.

J'ai par exemple essayé d'afficher les données du tableau dans ma boucle pour vérifier si les données sont correctes mais les données restent dans la même cellule au lieu de changer de ligne (variable i).

Alors que via le CopyFromRecordset les données s'affichent correctement dans ma feuille Excel.

Sub test()
    Lire_Fichier_config("BDD")

    'Création variable pour la requête SQL
    Dim maRequete As String
    Dim tableau() As Variant
    Dim rst As ADODB.Recordset

    maRequete = "select cln1, cln2 from ma_table"

    'Initialisation de la connexion
    Set cnx = New ADODB.CONNECTION
    cnx.Open CONNECTION

    Set rst = New ADODB.Recordset
    Set rst = cnx.Execute(maRequete)
    tableau = rst.GetRows()

    For Each ligne In tableau
        For i = 1 To rst.Fields.Count - 1
            Sheets("test").Cells(i, "J").Value = ligne
        Next
    Next

    Sheets("test").Cells(1, "D").CopyFromRecordset rst
    'Fermeture de la connexion
    cnx.Close

End Sub

Bonjour,

tableau =application.transpose( rst.GetRows)
Sub test()
Dim tableau() As Variant
    Lire_Fichier_config("BDD")
with  new ADODB.CONNECTION
.Open CONNECTION
tableau = Application.transpose(.Execute("select cln1, cln2 from ma_table").GetRows)
Sheets("test").Cells(1,"D").Resize(ubound(tableau,1),ubound(tableau,2)=tableau
.close
end with
End SUB

Merci ça fonctionne ! Va falloir que je regarde ce que font exactement les fonctions que tu utilises.

Avec la variable "tableau" c'est possible de faire des comparaisons dans un If ?

Par exemple ma requête me retourne deux colonnes (pour vérifier, je les ais bien dans les colonnes A et B de ma feuille) :

Colonne 1 : nom de l'application

Colonne 2 : Etat de l'application qui peut être soit "terminé", soit "en erreur"

test

Dans la V1 de mon projet, je traite les données directement depuis la feuille avec mon If.

If Sheets("Feuil1").Cells(i, "B") = "TERMINE"  Then
            Etat_appli = "OK"
            Sheets("Feuil1").Cells(i, "C").Value = "OK"

ElseIf Sheets("Feuil1").Cells(i, "B") = "EN ERREUR" Then
            Etat_appli = "KO"
            Sheets("Feuil1").Cells(i, "C").Value = "KO"
            Exit For
Else
            Sheets("Feuil1").Cells(i, "C").Value = "Inconnu"
            Etat_appli = "KO"
            Exit For
End If

J'aimerais que ce traitement ne passe plus par la feuille mais par la variable du tableau directement. Le but étant de retirer la feuille qui récupère et traite les données pour que ce soit plus "propre".

Je ne sais pas du tout si c'est quelque chose qu'il est possible de faire.

 maRequete = "select cln1, cln2,iif(cln2='TERMINE','OK',iif(cln2='EN ERREUR','KO','Inconnu'))  from [ma_table]"

Merci pour ton retour.

Mais du coup avec ta requête, comment je peux utiliser les trois états ailleurs ?

J'utilisais les états pour coloriser des cases sur ma feuille Excel principale :

Select Case Etat_appli
                Case "OK"
                    Sheets("UTI Quotidien").Cells(29, "E").Interior.Color = RGB(154, 205, 50) 'VERT
                Case "KO"
                    Sheets("UTI Quotidien").Cells(29, "E").Interior.Color = RGB(255, 255, 255) 'BLANC
                Case "Inconnu"
                    Sheets("UTI Quotidien").Cells(29, "E").Interior.Color = RGB(255, 255, 255) 'BLANC
            End Select

Par quoi dois-je remplacer la variable Etat_Appli dans mon case dans ce cas là ?

bonjour,

dans Excel tu peux utiliser une mise en forme conditionnelle

Rechercher des sujets similaires à "resultat requete sql variable boucler dessus"