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/Access: lecture seule après macro [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Septembre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Par défaut VBA Excel/Access: lecture seule après macro
    Bonjour, voila je suis debutante en VBA, j'ai trouvé un code sur internet qui permet de lancer une macro access depuis un fichier excel. Tout fonctionne la premiere fois, c'est genial. Mais en relançant une fois la macro, il y a un hic... ça ne marche plus:

    Message Erreur d'execution '3027'
    mise à jour impossible. La base de données ou l'objet est en lecture seule.
    Donc j'ai été voir la base access en question, et tant que je ne ferme pas mon fichier excel, il reste en lecture seule. Il faudrait qu'après la macro, le fichier access se ferme completement, pour que je puisse relancer d'autres macro dans cette base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub ExécuterMacroAccess()
     Dim MonAccess As New Access.Application
     MonAccess.OpenCurrentDatabase "Q:\Documents\lahila\base de donnees.mdb" 
    MonAccess.DoCmd.RunMacro "Executer les macros"
     MonAccess.Quit acQuitSaveNone
     Set MonAccess = Nothing
    End Sub
    Si vous avez la solution je prends . Merci d'avance

  2. #2
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 173
    Billets dans le blog
    2
    Par défaut
    Bonjour lahila,

    Ton code fonctionne chez moi, à plusieurs reprises aussi...

    ajoute peut-être un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonAccess.Visible = True
    au début du code, Access devrait apparaître et ça te permettra peut-être de vérifier si ta macro s'est exécutée correctement et s'il ferme bien la base et Access à la fin

    Au pire, peut-être essayer d'ajouter la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonAccess.CurrentDb.Close
    Avant de quitter Access

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Par défaut
    Merci pour votre reponse. C'est bizarre que ca bloque chez moi alors, au niveau d'executer la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonAccess.DoCmd.RunMacro "Executer les macros"
    . J'ai mis le visible = true, la fenetre access n'apparait qu'une seconde et se referme immediatement. Maintenant le deuxieme code, je dois le mettre ou exactement? si je le mets à la fin, il me met un message d'erreur bloc with ou objet, et si je le mets en avant dernier, j'ai une erreur serveur client. Que dois je faire?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Le problème d'Access c'est que ça n'a pas vocation à être multi-utilisateur. Du coup lorsque tu travailles sur une bdd elle est verrouillée par Access pour empêcher que quelqu'un d'autre puisse la modifier en même temps.

    Je plussoie donc la solution proposée par tototiti2008, à savoir fermer la bdd courante. Par contre je le ferai plutôt comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CloseCurrentDatabase
    Car la méthode:

    s'applique à un objet DAO qui n'a pas été explicitement instancié dans notre cas (et qui n'existe donc pas forcément). D'ailleurs à ce sujet voici ce que dit l'aide VBA:

    Ne confondez pas la méthode OpenCurrentDatabase avec la méthode Open des objets ADO (Objets de données ActiveX) ou la méthode OpenDatabase des objets DAO (Objets d'accès aux données). La méthode OpenCurrentDatabase ouvre une base de données dans la fenêtre Microsoft Access. La méthode Open des objets ADO renvoie une variable objet Connection, et la méthode OpenDatabase des objets DAO renvoie une variable objet Database ; elles représentent toutes les deux une base de données particulière, mais n'ouvrent pas en fait la base de données dans la fenêtre Microsoft Access.
    Le mieux est encore d'essayer les deux pour voir lequel(s) fonctionne(nt) correctement.

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 173
    Billets dans le blog
    2
    Par défaut
    Bonjour Sclarckone,
    Re,

    Merci de ta précision, ça clarifie pourquoi la base ne se fermait pas dans ma fenêtre...

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Par défaut
    Je ne connais que très peu le vba, j'ai essayé vos deux codes, juste avant end sub
    Pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CloseCurrentDatabase
    , en regardant les lignes du code une par une, il ya une erreur 438 proprieté non gérée par l'objet. La macro d'access s'execute à chaque fois et application.close.. fonctionne mais juste apres il ya le message d'erreur.

    Pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonAccess.CurrentDb.Close
    , la c'est la meme chose sauf qu'il ya un code d'erreur 91 variable objet ou variable de bloc with non définie.

    Je ne sais pas trop quoi faire.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Par rapport au code que tu as proposé au début remplace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     MonAccess.Quit acQuitSaveNone
     Set MonAccess = Nothing
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonAccess.CloseCurrentDatabase
    MonAccess.Quit acQuitSaveNone

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

Discussions similaires

  1. Ouvrir un fichier excel en lecture seule via VBA
    Par mbellemax dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/12/2017, 13h35
  2. [VBA-E]ouvrir feuille excel en lecture seule
    Par ogenki dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 10/02/2006, 13h36
  3. Réponses: 1
    Dernier message: 26/01/2006, 18h16
  4. Réponses: 7
    Dernier message: 19/07/2005, 08h31
  5. Réponses: 3
    Dernier message: 30/06/2004, 11h09

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