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 :

Interroger une base Access


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Par défaut Interroger une base Access
    Bonjour


    Juste une question technique et aussi de syntaxe.

    Je dois interroger une fichier Access pour utiliser des données. Normalement je fais une extraction du dossier et le met en format.xls pour bosser dessu à partir d'un autre fichier .xls.


    Hors là la table Access que je souhaite interroger fais 1.659.000 lignes

    Donc biensur je ne peux pas faire tenir sa sur une feuille Excel

    Je veux savoir si il est possible d'interroger une table Access pour en retirer des informations ??

    Thanks

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour


    Tu peux faire ta requète directement depuis Excel sans avoir besoin de tout importer :

    http://excel.developpez.com/faq/?page=Access

    http://cafeine.developpez.com/access/tutoriel/excel/


    Si besoin, tu peux indiquer le nombre de lignes maxi par feuille de calcul (ici 65536) et créer plusieurs feuilles pour tout importer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'boucle sur le résultat de la requete
    While Not Rs.EOF
        'Ajout Feuille
        Worksheets.Add
        'Ecriture des données dans la feuille
        '65536 spécifie le nombre de lignes par feuille
        ActiveSheet.Range("A1").CopyFromRecordset Rs, 65536
    Wend
    bonne soirée
    michel

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Par défaut
    Ok merci je vais jeter un oeil sur les deus liens. Pour l'exportation vers Excel j'ai essayé (avant de lire ton message), et partir de ma table Access de 1.659.000 lignes j'ai exporté vers Excel mais j'avais obtenu que 16k lignes sur une seule feuille de calcul


    Je vais essayé ton code. Parcontre je dois le copier ce code sur Access ??

    je manque de pratique de VBA sur Access mais je me débrouille correctement sur Excel, mais par exemple j'ai ouvert ma requete en mode création, et lorsque je suis dessus j'ai ouvert Visual Basic Editor, mais je n'ai pas pu ouvrir de feuille pour le code ?? Pareil lorsque j'étais sur ma table !

    Quelle est donc la procédure pour afficher le code ??

    Sinon ce que tu m'a donné à l'air de correspondre faut juste que je puisse l'appliquer en réel

    En attendant je me jète sur tes liens !

    thanks

    J'ai regardé les liens, ils proposent diffénretes solutions pour mon problème. j'ai testé microsoft query et le copier mais je rencontre le problème de la taille des fichiers.

    J'ai alors essayé de mettre le code que tu as fourni.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_AfterXmlImport(ByVal Map As XmlMap, ByVal IsRefresh As Boolean, ByVal Result As XlXmlImportResult)
    While Not Rs.EOF
        'Ajout Feuille
        Worksheets.Add
        'Ecriture des données dans la feuille
        '65536 spécifie le nombre de lignes par feuille
        ActiveSheet.Range("A1").CopyFromRecordset Rs, 65536
    Wend
    End Sub
    Cependant j'ai du faire une erreur car elle ne marche pas.

    Juste une précission sinon.

    Je me suis focalisé pour le moment sur l'import de ma base d'access vers excel. Mais sinno dans un code VBA, est il possible d'interroger ma table Access ??

    J'ai besoin de faire une fonction find dans une colonne de ma table Access, et de récupérer des infos. je sais le faire dans un fichier Excel pas de soucis, mais si je peux le faire sur la table Access meme alors très bien.

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

    Pour interroger une base Access, une solution (et l'idéal) est de passer par DAO, dont voici l'article: http://warin.developpez.com/access/dao/

    En faite il n'y a pas de Find pour Access, il faut que tu interroges ta table à la l'aide d'une requête SQL, et ton critère de recherche sera dans la clause Where de celle-ci.

    Je t'invite à consulter la FAQ Access (lien dans ma signature) et aller faire un tour du coté du forum Access, où tu auras de nombreuses réponses à tes questions.

    Philippe

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Par défaut
    Merci !

    Je commence la lecture de l'article DAO qui à l'air très riche.

    SilkyRoad est ce que néanmoins tu pourrais juste me dire comment je dois utiliser le code que tu m'as donné.

    A très court terme (avant que je finisse de lire l'article) ça va me servir !



    Merci je laisse ouvert j'aurai sans doute des remarques ou autre...

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    rebonjour

    SilkyRoad est ce que néanmoins tu pourrais juste me dire comment je dois utiliser le code que tu m'as donné.
    tu places la procédure dans un module standard du classeur Excel et tu actives la référence "Microsoft ActiveX Data Objects x.x Library"
    Dans l'éditeur de macros,
    Menu Otils
    Références
    Sélectionne la ligne "Microsoft ActiveX Data Objects x.x Library"
    Clique sur le bouton OK pour valider.



    bon après midi
    michel

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Par défaut
    J'ai du faire mal un truc !

    J'ai donc copier dans un module (module 1) le code ça donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub enregistrement()
     
    'boucle sur le résultat de la requete
    While Not Rs.EOF
        'Ajout Feuille
        Worksheets.Add
        'Ecriture des données dans la feuille
        '65536 spécifie le nombre de lignes par feuille
        ActiveSheet.Range("A1").CopyFromRecordset Rs, 65536
    Wend
     
    End Sub

    Parcontre pour "Microsoft ActiveX Data Objects x.x Library" je le trouve bien dans les référence, mais il y a deja la version 2.2 d'active.

    J'ai essayé avec ma ça ne marche pas, je l'ai desactivé, puis activé 2.8, mais ça ne marche pas non plus !

    J'ai sauté une étape ???

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir


    tu as oublié un morceau ... ;o)

    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
    Dim Cn As ADODB.Connection
    Dim Rs As ADODB.Recordset
    Dim Fichier As String
     
    'chemin et nom de la base
    Fichier = "C:\dossier\dataBase.mdb"
     
    'Connection
    Set Cn = New ADODB.Connection
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
        Fichier & ";"
     
    Set Rs = New ADODB.Recordset
    'Requete
    With Rs
        .ActiveConnection = Cn
        .Open "SELECT * FROM NomTable" _
            , , adOpenStatic, adLockOptimistic, adCmdText
    End With
     
    'boucle sur le résultat de la requete
    While Not Rs.EOF
        'Ajout Feuille
        Worksheets.Add
        'Ecriture des données dans la feuille
        '65536 spécifie le nombre de lignes par feuille
        ActiveSheet.Range("A1").CopyFromRecordset Rs, 65536
    Wend

    bonne soirée
    michel

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Par défaut
    tu as oublié un morceau ...
    Le morceau en question manquait deja dans la v1 de ta réponse

    Bon ça marche

    Parcontre j'ai un autre problème et tu là tu as le droit de me taper si tu veux

    Ma table fait 1.600.000 lignes ! Et j'ai pu en copier un peu plus de 1.000.000 !

    Je vais voir sur le forum Access si il est possible de couper une table en deux comme ça je fais la meme manip mais je change le nom de ma table pour l'appliquer à la seconde.

    Sinon est ce que à ce niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set Rs = New ADODB.Recordset
    'Requete
    With Rs
        .ActiveConnection = Cn
        .Open "SELECT * FROM NomTable" _
            , , adOpenStatic, adLockOptimistic, adCmdText
    End With
    Je peux mettre quelques part que je veux traité les lignes de 1.000.000 à 1.600.000 par exemple ?? Comme je garde la meme table access et je lance la marco à partir d'un second fichier Excel !!

    L'idée serait par exemple:

    NomTable.range("a1.000.000:a1.600.000") par exemple !!

  10. #10
    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
    Bonjour.

    Serais-tu en Excel 2007? Si oui, 1048576 lignes maximum...

    Pour récupérer les 1000000 premiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Open "SELECT TOP 1000000 * FROM NomTable"
    Mais je pense que ce serait probablement plus "rentable" de travailler en filtrant tes enregistrements... As-tu vraiment besoin d'avoir tes 1600000 enregistrements pour tes analyses?
    "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...
    ---------------

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Par défaut
    Mais je pense que ce serait probablement plus "rentable" de travailler en filtrant tes enregistrements... As-tu vraiment besoin d'avoir tes 1600000 enregistrements pour tes analyses?
    Ouai justement c'est ça la grosse m....


    Je vais essayé (demain au bureau) ta ligne de code. J'imagine que pour les dernières lignes (ce qui m'interesse), c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .open SELECT END 600000 * FROM MaTable
    ??

    Thanks je laisse open jusqu'à demain !

Discussions similaires

  1. Interroger une base access
    Par enzo68290 dans le forum VB.NET
    Réponses: 4
    Dernier message: 06/06/2011, 15h07
  2. INterrogation d'une base ACCESS depuis Postgre
    Par jsteffe dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/11/2007, 15h25
  3. Interroger une base access via le web
    Par pascale86 dans le forum Access
    Réponses: 1
    Dernier message: 15/03/2007, 15h33
  4. [VBA Excel]Interroger une base access depuis Excel
    Par Stephane_123 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/02/2007, 10h43
  5. [VB] interroger une base Access contenant des libellés Russe
    Par roby dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/03/2006, 15h03

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