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

  1. #21
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 198
    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 198
    Billets dans le blog
    2
    Par défaut
    Re,

    Merci à toi d'avoir répondu, ça m'a permis de comprendre pourquoi ça marchait chez moi et pas chez toi....

    Moi je faisait des données externes comme ça :
    Menu Données- Données externes - Créer une requête

    et toi tu as fait
    Menu Données- Données externes - Importer

    Les modes de connexion ont l'air différents (connexion OLE d'un côte, ODBC de l'autre ? jamais bien compris tout ça, mais bon) et avec "Créer une requête" tu n'aurais pas eu ton problème, je pense...

  2. #22
    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
    Citation Envoyé par tototiti2008 Voir le message
    Les modes de connexion ont l'air différents (connexion OLE d'un côte, ODBC de l'autre ? jamais bien compris tout ça, mais bon) et avec "Créer une requête" tu n'aurais pas eu ton problème, je pense...
    Non, pour autant que je sache ODBC est un protocole de communication avec un SGBD capable d'exécuter une requête SQL et OLE (OLE DB, en fait, dans le cas qui nous intéresse) est en gros la même chose mais pour accéder à tout "contenant" de données en général et sans que celui-ci supporte nécessairement les requêtes SQL.

    Pour lahila, il s'agit en fait d'un problème de verrouillage des données.

    Imaginons que tu exécutes des requêtes sur une table donnée, puis tu mets à jour des enregistrements de cette même table en fonction du résultat de tes requêtes.
    Si dans le même temps, quelqu'un d'autre modifie la table sur laquelle tu es en train de travailler alors la mise à jour de tes enregistrements va être fausse puisque les données sous-jacentes ont changé entretemps!
    Pour éviter ce genre de situation, le plus simple est de verrouiller la table sur laquelle tu es en train de travailler pour être sûr que personne n'y touche.

    C'est ce qui se passait ici. En fait elle avait une connexion 'QueryTable' d'ouverte en mode 'Share Deny Write'. Ça implique que tant que cette connexion est ouverte, "personne d'autre" ne peut écrire dans les tables cibles. Et du coup la macro qu'elle essayait de lancer derrière mettait à jour et/ou rajoutait probablement des données et se voyait donc refuser la permission d'écrire dans la table (puisqu'elle était verrouillée par la connexion de la 'QueryTable').

    Il y a des moyens beaucoup plus sophistiqués de régler ce genre de problème. Une manière simple également mais plus efficace est d'utiliser un verrouillage mais de type "optimiste"...mais c'est une autre histoire!

  3. #23
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 198
    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 198
    Billets dans le blog
    2
    Par défaut
    Bonjour Sclarckone,

    Je suis sûr que les données que tu fournis sont correctes, cependant, dans les faits :

    J'ai un fichier Excel et une base Access, le code de lahila qui exécute une macro Access depuis Excel
    Si je fais des données Externes en faisant Importer, et que j'enregistre la macro, le code généré me donne une chaine de connexion comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=C:\bd34.mdb;Mode=Share Deny Write;Extended Properties="";
    Et à cause du Deny Write, le lancement de la macro Access plante

    Si je fais des données externes avec Créer une requête et que j'enregistre la macro, le code généré me donne une chaine de conexion comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ODBC;DSN=MS Access Database;DBQ=C:\bd34.mdb;DefaultDir=C:;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;
    Et cette fois-ci il n'y a pas de problème d'exécution de la macro Access, donc pas de verrouillage des données

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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