IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Import de données SQL dans une listbox à plusieurs colonnes


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Import de données SQL dans une listbox à plusieurs colonnes
    Bonjour.

    Je souhaiterais récupérer des enregistrements sur base de données SQL et les insérer dans une listbox de plusieurs colonnes.
    Etant débutant en VBA, j'ai du mal a élaborer le code qui me conviendrait.
    J'ai une table contenant 42 colonnes, et une listbox de 43 colonnes (pour compter le nombre d'enregistrement)

    Mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Dim req1 As String, req2 As String
    Dim nbreg As Integer
    Dim i As Integer, j As Integer
    Dim connect As Boolean
    Dim rs1 As New ADODB.Recordset, rs2 As New ADODB.Recordset
    Dim tab1(41) As String
     
     
     
    Private Sub CommandButton1_Click()
    UserForm4.ListBox1.ColumnCount = 43
    req1 = "SELECT count(*) from [" & TL2 & "] ;"
    With rs1
            .CursorLocation = adUseServer           'curseur coté serveur
            .CursorType = adOpenForwardOnly         'type de curseur
            .LockType = adLockReadOnly              'option de curseur 
            .Open req1, cnx, adOpenStatic           'exécution de la requête SQL
            nbreg = .Fields(0).Value                 'récupération de l'enregistrement 
            .Close
            End With
     
    req2 = "select * from [" & TL2 & "]"
    With rs2
            .CursorLocation = adUseServer           'curseur coté serveur
            .CursorType = adOpenForwardOnly         'type de curseur
            .LockType = adLockReadOnly              'option de curseur 
            .Open req2, cnx, adOpenStatic            'exécution de la requête SQL
            For i = 1 To (nbreg)
            UserForm4.ListBox1.AddItem "N°" & i
            For j = 0 To 41
            tab1(j) = .Fields(j).Value                 'récupération de l'enregistrement 
            UserForm4.ListBox1.List(i - 1, j + 1) = tab1(j)
            Next j
            Next i
            .Close
            End With
    End Sub
    Mon problème se situe au niveau de la récupération des données.
    Le premier hic est que j'ai pu constater avec l'aide d'une msgbox que tab1() n'enregistre que la première ligne de la table SQL.
    => Comment puis-je récupérer l'ensemble des données de la table? (j'ai pensé à un tableau à deux dimensions, mais je ne sais pas comment le mettre en oeuvre avec le recordset)

    Ensuite, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm4.ListBox1.List(i - 1, j + 1) = tab1(j)
    me retourne l'erreur "Invalid property value", et je ne sais pas trop à quoi elle correspond :s
    (je soupsonne également req2 de ne pas être la meilleure solution.)

    Toute aide étant la bienvenue, merci d'avance

  2. #2
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour.

    Après quelques recherches supplémentaires (merci à Jean-Marc Rabilloud pour son tuto sur les recordset), j'ai pu avancer dans mon code que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Dim req1 As String
    Dim nbreg As Integer
    Dim i As Integer, j As Integer
    Dim connect As Boolean
    Dim rs1 As New ADODB.Recordset
    Dim tab1() As Variant
     
    Private Sub CommandButton1_Click()
    UserForm4.ListBox1.ColumnCount = 43
    req1 = "select * from [" & TL2 & "]"
     
    With rs1
            .CursorLocation = adUseClient
            .LockType = adLockReadOnly
            .Open req1, cnx, adOpenStatic
            nbreg = .RecordCount
            .MoveFirst
            ReDim tab1(nbreg, 41)
            For i = 1 To (nbreg)
            UserForm4.ListBox1.AddItem "N°" & i
            For j = 0 To 41
            tab1(i - 1, j) = .Fields(j)
            UserForm4.ListBox1.List(i - 1, j + 1) = tab1(i - 1, j)
            'MsgBox tab1(i - 1, j)
            Next j
            .MoveNext
            Next i
            .Close
            End With
    End Sub
    Je récupère maintenant l'ensemble de mes données (vérifié par la msgbox en commentaire).
    J'ai cependant toujours un problème avec l'affichage dans la listbox ; je ne peux pas remplir plus de 10 colonnes : à la 10èm valeur (j = 9) la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm4.ListBox1.List(i - 1, j + 1) = tab1(i - 1, j)
    me retourne "Could not set the list property. Invalid property value.".
    Je n'arrive pas à me débloquer (je ne comprend pas pourquoi les propriétés ne sont plus bonnes à la 10èm colonne :s).
    Je vais continuer mes recherches (autour du rowsource de la listbox également, que j'ai testé sans résultat pour le moment).

    Merci d'avance.

  3. #3
    Membre actif
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 269
    Points
    269
    Par défaut
    Bonjour,

    Je me trompe peut etre, mais de mémoire, une listbox ne peux pas accepter plus de 10 colonnes. C'est une limitation d'excel.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse si rapide

    Je n'ai rien trouvé dans l'aide VBA concernant la limitation de colonnes, et après quelques recherches, j'ai finalement réussi à résoudre mon problème (apparament il n'y a donc pas de limites).

    Mon nouveau code pour ceux que ça pourrait aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    With rs1
            .CursorLocation = adUseClient
            .LockType = adLockReadOnly
            .Open req1, cnx, adOpenStatic
            nbreg = .RecordCount
            .MoveFirst
            ReDim tab1(nbreg, 42)
            For i = 1 To (nbreg)
            For j = 0 To 41
            tab1(i - 1, j) = .Fields(j)
            UserForm4.ListBox1.List = tab1
            Next j
            .MoveNext
            Next i
            .Close
            End With
    Le code fonctionne si on ne précise pas les indexs de la listbox ni ceux de la matrice.

    Merci encore et bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. importer des données XML dans une base Oracle 9
    Par lanfeustdetroll dans le forum JDBC
    Réponses: 3
    Dernier message: 19/07/2007, 00h09
  2. recuperer les données access dans une listbox
    Par inforlab dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/05/2007, 22h09
  3. [SQL] Importer un fichier .sql dans une base de données avec PHP
    Par budiste dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/06/2006, 14h15
  4. Importer valeur requete SQL dans une Requete
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/03/2006, 14h24
  5. Import de Données Excel dans une Table Access
    Par YLF dans le forum Access
    Réponses: 2
    Dernier message: 20/02/2006, 19h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo