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 SubBonjour,
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 SUBMerci ç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"
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 IfJ'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 SelectPar quoi dois-je remplacer la variable Etat_Appli dans mon case dans ce cas là ?