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 :

Requete SQL d'un classeur fermé vers une listebox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut Requete SQL d'un classeur fermé vers une listebox
    Bonjour,

    J'ai le code suivant qui permet d'interroger un classeur fermé.
    Je lui envoi une designation et il me remonte tout les codes articles qui sont identique à cette désignation dans une lisbox.
    Ce que je cherche à faire c'est d'inclure dans cette liste d'autre champs qui sont issue de mon classeur fermé et qui correspondent à la même ligne que le code qui à été trouvé.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    code |  Designation1 |   Designation2  |  Prix
    xx        Test                 Test2              10
    Je cherche à afficher dans une listebox les champs [code], [Designation1],[designation2]


    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    Private Sub UserForm_Initialize()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String
        Dim texte_SQL1 As String
        Dim texte_SQL2 As String
        Dim texte_SQL3 As String
        Dim texte_SQL4 As String
        Dim texte_SQL5 As String
     
        Dim Rst1 As ADODB.Recordset
        Dim Rst2 As ADODB.Recordset
        Dim Rst3 As ADODB.Recordset
        Dim Rst4 As ADODB.Recordset
        Dim Rst5 As ADODB.Recordset
     
        Dim Tbl() As Variant
        Dim i As Integer, N As Integer
     
        UserForm1.Caption = "PUNCH"
     
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\Documents and Settings\BaseCDC00003.xls"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "TECHNIQUE_1"
     
        Set Cn = New ADODB.Connection
     
        '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
            .Open
        End With
     
        MatriceStd = "MATRICE 1MB2-59-S"
        '-----------------
         'Définit la requête.
     
        texte_SQL1 = "SELECT[Reference] FROM [TECHNIQUE_1$] WHERE[Designation] LIKE '" & MatriceStd & "%' "
     
        Set Rst1 = New ADODB.Recordset
     
        With Rst1
        .ActiveConnection = Cn
        .Open texte_SQL1 _
            , , adOpenStatic, adLockOptimistic, adCmdText
        End With
     
    ListBox1.Clear
    ListBox1.ColumnCount = Rst1.Fields.Count
     
    ReDim Tbl(Rst1.RecordCount - 1, Rst1.Fields.Count)
    'Tbl = Rst1.GetRows
     
    Do While Not Rst1.EOF
        For i = 0 To Rst1.Fields.Count - 1
            If IsNull(Rst1.Fields(0).Value) = True Then
                Tbl(N, i) = ""
                Else
                Tbl(N, i) = CStr(Rst1.Fields(0).Value)
                RequeteMatriceStd = Rst1.Fields(0).Value
                MsgBox RequeteMatriceStd
     
            End If
        Next i
     
        N = N + 1
        Rst1.MoveNext
    Loop
     
     
    ListBox1.List() = Tbl
     
        '--- Fermeture connexion ---
     
        Cn.Close
        Set Cn = Nothing
     
     
    End Sub
    Quelqu'un à t'il une idéee de comment je peux faire?

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Août 2009
    Messages : 85
    Par défaut
    Ben comme ton programme est super bien codé, tu n'as qu'à changer ta requête SQL ! En effet, dynamiquement, le nombre de colonne de la listbox sera égal au nombre de champs retournés par ta requête...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.ColumnCount = Rst1.Fields.Count

    Je ne sais pas ce que tu attends comme champs retournés, mais commence par écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte_SQL1 = "SELECT* FROM [TECHNIQUE_1$] WHERE[Designation] LIKE '" & MatriceStd & "%' "
    Et tu auras TOUS les champs.

    Je mets ce code de côté, super bien écrit !

    Edit: j'ai oublié un espace, c'est

    SELECT *

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    Merci pour le compliment mais l'écriture du code vient d'un peu partout sur les FAQ du site.

    Pour la solution, j'en suis arrivé hier à la même conclusion que toi.
    MOn problème reste entier. Si j'ai besoins de ne selectionner que 3 colonnes sur 4 ou 5 je fais comment?

  4. #4
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    Bon j'ai trouvé,en faite c'est simple, je laisse la réponse au cas où.

    tout se passe au niveau de la requête il suffit de mettre des "," entre chaques colonnes que l'on veut sélectionner.

    Dans mon cas précis je souhaite séléctionner le champs "Reference" et "Designation" de la table Technique_1 dans ma listbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    texte_SQL1 = "SELECT [Reference],[Designation] FROM [TECHNIQUE_1$] WHERE[Designation] LIKE '" & MatriceStd & "%' "

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

Discussions similaires

  1. Extraire une feuille d'un classeur fermé vers un classeur ouvert
    Par Kutoh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/08/2013, 11h23
  2. Réponses: 15
    Dernier message: 23/05/2013, 19h33
  3. Réponses: 13
    Dernier message: 11/01/2007, 15h39
  4. Réponses: 3
    Dernier message: 09/11/2006, 10h25
  5. Requete sql pour création de table dans une base access
    Par Ben156 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/01/2006, 22h12

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