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 :

Recuperer des données d'une base ACCESS avec Excel VBA [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut Recuperer des données d'une base ACCESS avec Excel VBA
    Bonjour,

    Je m'excuse d'abord pour m'être trompé de forum au tout départ.

    J'essaie de créer un outil qui permet de remplir une base de données access à partir de Excel sur VBA. J'ai pu gérer cette première étape.

    J'essaie maintenant de faire en sorte que lorsque l'utilisateur rentre un champ dans une cellule Excel et en appuie sur le bouton MATH, le fichier excel propose dans la colonne H les différentes valeurs possibles qu'il aura importé du champ REF HEADER de la table HEADER de la base de données ACCESS (Dico).

    Mon problème se trouve au niveau de l'affichage je pense, je ne sais pas trop comment afficher les valeurs trouvées. Pourrais-je avoir des indications svp ?

    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
     
     
    Public Sub matchREFs()
     
    Dim refsource As String
     
    refsource = "" & Sheets(1).Range("F6").Value
     
    MsgBox (refsource)
     
    'sql = "INSERT INTO REF_HEADERS ( HEADER ) VALUES (" & refsource & ");"
     
     
    Dim SQLstring As String
     
    Dim db As DataBase
    Set db = New DataBase
     
    Dim isOpen As Boolean
    Dim filePath As String
     
    filePath = ActiveWorkbook.Path & "\Dictionary.accdb"
     
    db.Fichier = filePath
    If db.openConnection(DBType.ACCESS_2012) = False Then
        Exit Sub
    End If
     
    Dim sql As String
    Dim rs As Recordset
     
    sql = "SELECT HEADER FROM REF_HEADERS WHERE HEADER Like (" & refsource & ");"
     
     
    Set rs = db.OpenRecordSet(sql)
    If rs Is Nothing Then
        Exit Sub
    End If
    Dim ResSQL As String
    Do While rs.EOF = False
    For i = 0 To rs.Fields.Count - 1
        ResSQL = ResSQL & rs.Fields.Item(i).Name & ";" & rs.Fields.Item(i).Value & Chr(13) & Chr(10)
    Next
    rs.MoveNext
    Loop
     
     
    MsgBox ResSQL
     
    If db.executeSQL(sql) = False Then
        db.closeConnection
        Exit Sub
    End If
     
    db.closeConnection
     
    End Sub
    Merci par avance.

    Cordialement

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    si tu souhaites par exemple afficher le contenu de ton recordset, utilise directement CopyFromRecordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set rs = db.OpenRecordSet(sql)
    Range("A1)".CopyFromRecordset rs
    a noter que dans ton SQL tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HEADER Like (" & refsource & ");"
    pense bien à ajouter les apostrophes avant et apres pour bien considérer la valeur passée comme du texte.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Merci pour ta réponse.

    Je n'arrive toujours pas à afficher correctement .


    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
     
     
    refsource = "" & Sheets(1).Range("F6").Value
     
    'sql = "INSERT INTO REF_HEADERS ( HEADER ) VALUES (" & refsource & ");"
     
     
    Dim SQLstring As String
     
    Dim db As DataBase
    Set db = New DataBase
     
    Dim isOpen As Boolean
    Dim filePath As String
     
    filePath = ActiveWorkbook.Path & "\Dictionary.accdb"
     
    db.Fichier = filePath
    If db.openConnection(DBType.ACCESS_2012) = False Then
        Exit Sub
    End If
     
    Dim sql As String
    Dim rs As Recordset
    Dim V As Variant
    Dim fld As Field
     
    sql = "SELECT HEADER FROM REF_HEADERS WHERE HEADER Like ('*" & refsource & "*');"
     
    MsgBox sql
    'sql = "SELECT * FROM REF_HEADERS WHERE HEADER LIKE ('*" & refsource & "*');"
     
     
    Set rs = db.OpenRecordSet(sql)
     
    Worksheets("HEADERS").Range("G7:G50").CopyFromRecordset rs
     
    If db.executeSQL(sql) = False Then
        db.closeConnection
        Exit Sub
    End If
     
    db.closeConnection
    Que dois-je corriger ?

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @aziz1015 :
    Pour ma part je comprends pas exactement quel est la question!

    Arrête de nous fournir du code incohérent et explique nous ce que tu demande a Access et comment tu veux l'afficher?

    Dans ton premier poste tu balayes tous les champs du recordset alors que ta requête ne comporte que HEADER!
    Pour concatène le nom du champ qui est forcément HEADER ; avec la valeur??????

    Dans le poste 2 tu fais un copyfromrecordset sur un plage????

    Pour écrire ta requête, va dans le requêteur d'access et dessin la en mode graphique. Ensuite en bas à droite click sir l'icone SQL et copies colle le script sql dans vba!



    @Maxime91327:
    Je ne suis pas sur que aziz1015 soit le mieux placé pour t'aider et je ne penses pas que deux discussions pour le prix d'une l'aidera lui!
    Dernière modification par Invité ; 02/03/2018 à 07h58.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,

    @aziz1015 :
    Pour ma part je comprends pas exactement quel est la question!
    Merci pour ta réponse.

    Ma question était de savoir comment afficher le résultat de ma requête sur une feuille excel. Le copyFromrecordset était donc pour ça.

    J'avait fait une erreur dans l'écriture de la requête en mettant * au lieu de % pour le Like.

    Finalement, j'ai trouvé quelque chose qui m'a permis de récupérer correctement le résultat de ma requête.

    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
     
     
    Dim filePath As String
     
    filePath = ActiveWorkbook.Path & "\Dictionary.accdb"
     
    db.Fichier = filePath
    If db.openConnection(DBType.ACCESS_2012) = False Then
        Exit Sub
    End If
     
    Dim sql As String
    Dim rs As Recordset
    Dim refsource As String
     
    refsource = Sheets(1).Range("F6").Value
     
    sql = "SELECT REF_HEADERS.HEADER, REF_HEADERS.ID FROM REF_HEADERS WHERE (REF_HEADERS.HEADER) Like '%" & refsource & "%'"
     
     
    Set rs = db.OpenRecordSet(sql)
     
    Dim F As Range
    Dim I As Integer, t As Long
     
     
    Worksheets("HEADERS").Range("G9:H1000").Clear
    Set F = Worksheets("HEADERS").Range("G9")
     
    For I = 0 To rs.Fields.Count - 1
        F.Offset(0, I) = rs.Fields.Item(I).Value
    Next
     
    Do Until rs.EOF
        I = 0
        For I = 0 To rs.Fields.Count - 1
            F.Offset(t, I) = rs(I)
        Next
        t = t + 1
        rs.MoveNext
    Loop
     
    'Worksheets("HEADERS").Range("H8").CopyFromRecordset rs
     
    If db.executeSQL(sql) = False Then
        db.closeConnection
        Exit Sub
    End If
     
    db.closeConnection

    Merci à tous pour vos réponses

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

Discussions similaires

  1. Recuperer des données d'une base ACCESS avec Excel VBA
    Par aziz1015 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/03/2018, 14h34
  2. [ Récuperation des données d'une base access ]
    Par Arkoze dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2007, 19h55
  3. Réponses: 2
    Dernier message: 20/11/2006, 21h42
  4. [Access 2002] Exporter des données vers une base Access 2.0
    Par SamLeChiseuji dans le forum Access
    Réponses: 27
    Dernier message: 01/06/2006, 11h41
  5. [Excel] Récupérer des données d'une base Access
    Par FoxDeltaSierra dans le forum Excel
    Réponses: 8
    Dernier message: 03/09/2005, 10h22

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