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 :

[Excel] - QueryTable dans Excel Piloté par Access


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut [Excel] - QueryTable dans Excel Piloté par Access
    Bonjour

    Dans un fichier excel, j'ai une feuille avec une requête crée à partir de microsoft query qui va se connecter à une vue dans une base oracle.

    J'utilise la fonction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim wks As Excel.Worksheet
        Set wks = BaseDorsal.Worksheets("Extract_Octale")
        wks.Select
        wks.QueryTables(1).Refresh BackgroundQuery:=False
    qui marche dans Excel

    Je veuw maintenant piloter ceci par Access à l'aide d'automation.

    J'ai le message suivant : erreur 7 mémoire insuffisante

    Quelqu'un a-t-il une idée

    Starec

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Par défaut
    Bonjour,

    Pour bien comprendre le problème, c'est bien à l'exécution de la requête et non au démarrage d'ACCESS que cette erreur apparaît ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Par défaut
    Parce que si c'est à l'exécution c'est que le système n'alloue pas assez de mémoire à la transaction. C'est le paramètre MaxLocksPerFile du Registre de Windows qui est trop bas.

    Pour résoudre le problème il faut augmenter le paramètre MaxLocksPerFile du Registre de Windows.

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

    C'est bien au lancement de la requête

    Malheureusement je ne peux changer MaxLocksPerFile, c'est sur un serveur Citrix, avec Excel 2003 version serveur.

    D'autres idées ?

    Starec

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Par défaut
    Citation Envoyé par Starec
    Malheureusement je ne peux changer MaxLocksPerFile, c'est sur un serveur Citrix, avec Excel 2003 version serveur.
    Et de façon temporaire ?

    http://support.microsoft.com/?scid=k...86153&x=8&y=11

    Method 2: Using SetOption to change MaxLocksPerFile Temporarily
    NOTE: The sample code in this article uses Microsoft Data Access Objects. For this code to run properly, you must reference the Microsoft DAO 3.6 Object Library. To do so, click References on the Tools menu in the Visual Basic Editor, and make sure that the Microsoft DAO 3.6 Object Library check box is selected.

    Note Changes made to the MaxLocksPerFile setting by using the SetOption method will only be available through the current session of Data Access Objects (DAO). Queries that are run through the Microsoft Access user interface will still use the settings in the registry.

    The following code sample sets MaxLocksPerFile to 200,000 before executing an update operation inside a transaction:
    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
    Sub LargeUpdate()
       On Error GoTo LargeUpdate_Error
       Dim db As DAO.Database, ws As DAO.Workspace
     
       ' Set MaxLocksPerFile.
       DBEngine.SetOption dbMaxLocksPerFile, 200000
     
       Set db = CurrentDb
       Set ws = Workspaces(0)
     
       ' Perform the update.
       ws.BeginTrans
       db.Execute "UPDATE BigTable SET Field1 = 'Updated Field'", _
             dbFailOnError
     
       ws.CommitTrans
     
       db.Close
       MsgBox "Done!"
       Exit Sub
     
    LargeUpdate_Error:
       MsgBox Err & " " & Error
       ws.Rollback
       MsgBox "Operation Failed - Update Canceled"
       End Sub
    Je pense qu'il doit y avoir un version française de cette page

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    essaye outil options avancé et décoche ouvrir avec enregistrement verrouillé

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re

    Désolé Random, t'as solution ne fonctionne pas.

    Désolé chouks, ta solution fonctionne sur une table Access, hors c'est une feuille Excel que je mets à jour par l'intermédiaire d'Access par automation.

    Starec

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419

  9. #9
    Invité
    Invité(e)
    Par défaut
    Re

    J'ai bien vu le truc, mais je pense que vous n'avez pas tout saisie, les posts parle de traitement sous Access, hors le traitement ce fait sous Excel piloter par Access, c'est une fois le traitement fini que j'importe ma feuille Excel dans une table Access (cette partie marche)

    Starec

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Par défaut
    Donc en gros si j'ai bien compris

    les données devraient suivre le chemin : Oracle->Excel->Access

    Si Excel exécute la requête tout seul comme un grand il n'y a pas de bug.

    Si excel est chapeauté par Access là il y a bug.

    Bizzard !!! Car par automation, une instance d'excel est créée comme à l'ouverture classique d'un classeur.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re

    D'accord avec toi, je fais d'autre traitement avec Excel récupération de données, etc. à partir d'Access, pas de soucis, par contre pour cette mise à jour ?

    En effet par automation je récupére le nombre de ligne par une feuille, et ensuite je fais un TransferSpreadsheet sans problème.

    C'est uniquement cette remise à jour des données

    Starec

  12. #12
    Invité
    Invité(e)
    Par défaut
    Re

    Sinon, mon code fonctionne bien sous Excel, mais peut-être qu'il n'est pas bon et que Excel me gére une erreur, qui sais, quelqu'un a-t-il un autre code similaire.

    De plus pour compliquer les choses, je ne sais pas si cela à un rapport, mais voilà :

    La base Access est en 2000 sur mon poste, sur le serveur runtime 2003 (celui-ci fonctionne avec 2000, je l'ai testé sur d'autres bases, mais pas avec cette fonction). Sous Access j'ai référencé la bibliothèque Excel 9.0 donc 2000, et sur serveur Excel 2003

    Merci

    Starec

Discussions similaires

  1. [XL-2010] Récupérer dans Excel une donnée d'une procédure Access lancée depuis Excel
    Par stargates01 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/07/2013, 10h27
  2. Réponses: 1
    Dernier message: 18/01/2013, 23h19
  3. Peut-on ecrire vba dans excel comme dans access ?
    Par docjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/10/2009, 07h38
  4. Réponses: 1
    Dernier message: 15/11/2007, 13h51
  5. Réponses: 7
    Dernier message: 20/09/2006, 11h04

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