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 :

Vba Excel récupérer table access dans dictionary. Possible / efficacité ? [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut Vba Excel récupérer table access dans dictionary. Possible / efficacité ?
    Hello,

    Une "petite" question je souhaiterais, dans la mesure du possible récupérer une table access dans mon fichier excel.
    Jusque là pas de soucis.


    Mon idée, pour laquelle votre aide me serait précieuse :

    Pour m éviter de retraiter le table collecté : filtre , tris, suppression de ligne...
    J avais imaginer pouvoir le faire avant l "écriture" de la table dans excel.

    Pour cela passer mes records dans un dictionnaire et "retravailler" la table directement en mémoire,avant son insertion dans excel.

    Pour, il me semble, améliorer la velocité vu le nombre important d enregistrements


    Pensez- vous que cela pourrait être une bonne idée ?
    D autres solutions plus efficaces à proposer ?

    ( Je n y connais pas grand chose en access)

    D avance merci, pour vos réponses , aides, meilleures pistes

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonsoir
    le problème restera toujours la quantité de donnée qui peut etre plus importante dans acces par raport a la limite d' une feuille ou meme la limite des variables tableau y compris les dico
    donc non
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour à tous

    Plutôt que récupérer une table pourquoi ne pas récupérer le résultat d'une requête qui fera le boulot avec le moteur Access...

  4. #4
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut Re
    Bonjour Patrick, Chris ,

    Merci pour vos réponses,

    J'abandonne donc le dictionnaire,

    Et je vai me concentrer sur la création de requêtes qui feront le boulot avec le moteur Access.
    Je tenterai de lancer celle-ci via mon classeur excel et dans récupérer le résultat.

    Merci pour votre expertise,

    je vai laisser la discution ouverte encore quelques jours histoire de vous faire un retour.

  5. #5
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    RE

    Il suffit d’enregistrer la requête dans Access et dans Excel un lien vers la requête suffit.

  6. #6
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut RE
    Merci

    Pour info , j'ai créé une requête "Parametré" dans ma table Access
    Requête que je lance par un code Vba Excel avec paramêtre, et récupère la "table" créée dans mon classeur.


    A titre informatif

    Code d'appel

    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
     
    Public Sub RunParamQuery()
     
    'Execute a Parameter Query
     
        Dim objRec As Object
        Dim lngField As Long
     
        Dim ParametreFiltre As String: ParametreFiltre = "XX"
        Dim BdName As String: BdName = "Database.mdb"
        Dim BdTable As String: BdTable = "Bd_A_Filtre"
     
     
        strDB = ThisWorkbook.Path & "" & "\" & BdName
        strQueryName = BdTable
        ParametreFiltre = ParametreFiltre
     
        On Error Resume Next
            Set objRec = RunQuery(strDB, strQueryName, ParametreFiltre)
        On Error GoTo 0
     
        If Not objRec Is Nothing Then
     
            With Sheet1
     
              With .Range("A1")
                    For lngField = 1 To objRec.Fields.Count
                       .Cells(1, lngField).Value = objRec.Fields(lngField - 1).Name
                    Next lngField
     
                Call .Offset(1, 0).CopyFromRecordset(objRec)
     
              End With
     
            End With
     
        End If
     
        Set objRec = Nothing
     
    End Sub
    La fonction

    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
     
    Public Function RunQuery(ByVal strDBPath As String, ByVal strQueryName As String, ParamArray parArgs() As Variant) As Object
     
     
        Dim objCmd As Object
        Dim objRec As Object
        Dim varArgs() As Variant
        Dim lngPrm As Long
     
        Set objCmd = CreateObject("ADODB.Command")
     
        If UBound(parArgs) = -1 Then
            varArgs = VBA.Array("")
        Else
            varArgs = parArgs
        End If
     
        With objCmd
            .ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                                "Data Source=" & strDBPath & ";" & _
                                "Jet OLEDB:Engine Type=5;" & _
                                "Persist Security Info=False;"
            .CommandText = strQueryName
            If UBound(parArgs) = -1 Then
                Set objRec = .Execute(Options:=4)
            Else
                varArgs = parArgs
                Set objRec = .Execute(Parameters:=varArgs, Options:=4)
                On Error Resume Next
                    For lngPrm = .Parameters.Count - 1 To 0 Step -1
                        Call .Parameters.Delete(lngPrm)
                    Next lngPrm
                On Error GoTo 0
            End If
        End With
     
        Set RunQuery = objRec
     
        Set objRec = Nothing
     
    End Function

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Plusieurs solutions:
    • Récupérer les données Access dans une table de données Excel (onglet Données...) en te connectant sur la base access, puis mettre à jour la chaine de commande en y incluant tes paramètres;
    • Créer une connexion ADODB et recréer ta requête paramétrée avec une adodb.command et des paramètres.



    Que veux-tu faire des données récupérées?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut re
    Bonjour Pierre,

    Merci pour le retour.
    J ai appliqué en qq sorte votre méthode.( Post précédent)


    La table disont global access , contiendra des données multiclient
    Celle-ci sera alimenté par différents départements de la société

    Chaque départements ne pourra avoir que les données de son client

    La tables récupérés vont me permettre de créé : fichier de facturation,productivite,resultat qualité,.

    Le but de l import filtré dans excel par client, via macro, va me permettre de ne crée qu un seul classeur
    Qui en fonction de sa base de données, ne montrera que les infos d un client X

    Le filtrage et import par paramètres me permettra cette chose

    Évitera, de devoir créé et géré de multiple fichier de résultats et multiples base de données

    Une macro , excel, me permettra à terme de " sortir" les différents fichier de résultats à la chaîne, pour chaque département et envois des fichiers par mail aux différents chef de services

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Oui, en effet. Je n'avais pas lu le code jusqu'au bout...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [XL-2016] Erreur - Récupérer table Access dans Excel
    Par Rémy.A dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/12/2018, 14h13
  2. Réponses: 1
    Dernier message: 17/11/2013, 00h20
  3. Réponses: 7
    Dernier message: 20/08/2012, 08h11
  4. [VBA-A] Récupérer une valeur dans une table Access
    Par Dude2006 dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/04/2006, 23h56
  5. [VBA Excel] Importer des tables Access dans Excel
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/12/2005, 11h44

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