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 :

ADODB connection sur fichier déjà ouvert


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 11
    Par défaut ADODB connection sur fichier déjà ouvert
    Bonjour à tous,

    Depuis un classeur Excel, j'utilise une ADODB Connection pour aller chercher le contenu d'une plage dans un classeur Excel "Source" sur un réseau
    Quand mon classeur Excel source n'est utilisé par personne, jusque là, tout va bien.
    Mais quand il est ouvert par un utilisateur, ma Connection.Open semble "télécharger" le fichier en local et l'ouvre (?), puis ma requête plante...

    J'ai essayé de farcir les commandes avec les options en ReadOnly, mais je sèche.
    Merci pour le coup de main, ci-dessous le code que j'utilise :

    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
    Dim Source As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim ADOCommand As ADODB.Command
    Dim Fichier As String, Cellule As String, Feuille As String
     
    'Adresse de la cellule contenant la donnée à récupérer
    Cellule = "Planning_" & ctUserName
     
     
    Feuille = "Planning 2013$" 
    'Chemin complet du classeur fermé
    Fichier = ThisWorkbook.Path & "\" & ctBaseCentrale
    Set Source = New ADODB.Connection
       With Source
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
                .Mode = adModeRead
            .Open
        End With
     
    Set ADOCommand = New ADODB.Command
    With ADOCommand
    .ActiveConnection = Source
    .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
    End With
     
    Set Rst = New ADODB.Recordset
    Rst.Open ADOCommand, , adOpenKeyset, adLockReadOnly
    Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
    Range("A21").CopyFromRecordset Rst
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
    pour info, j'ai vérifié mon MSDAC, il est > 2.5.

    Merci,
    Sylvain

  2. #2
    Invité
    Invité(e)
    Par défaut
    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
     With Source
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
                .Mode = adModeRead
                On Error Resume Next
            .Open
            If Err <> 0 Then
                MsgBox Err.Description
                Err.Clear
                Exit Sub
            End If
            On Error GoTo 0
     
        End With
    en revanche, je ne sais pas si tu partage ton fichier si il est possible de l'ouvrir en ado si un utilisateur l'ouvre de son côté.
    sous ACCESS c'est possible!
    Dernière modification par Invité ; 11/10/2013 à 13h23.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 11
    Par défaut
    Bon, le code ne plante pas sur le Connection.Open, mais lors du Recordset.Open.

    En fait, c'est assez étrange :
    > si le fichier source est fermé, tout se passe bien.
    > si le fichier source est ouvert sur un autre poste, lors du Connection.Open, apparait la fenêtre "Téléchargement", et le fichier est ouvert (et visible !) en lecture seule... Dans ce cas, le Recordset.open plante en indiquant : "Le moteur de la base de données MS Access n'a pas pu trouver l'objet "Feuil1$etc..." vérifiez qu'il existe etc etc...

    MS préconise la solution (hilarante) suivante :
    Si le fichier est déjà ouvert, faire une copie et ouvrir la copie...

    De mon côté, je vais chercher encore un peu, mais si je ne trouve pas je reviendrai à des méthodes plus traditionnelles...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 11
    Par défaut
    Bon, je jette l'éponge.

    J'ai voulu passer à DAO, mais je ne crois pas que ce soit possible depuis 2007, plus de pilote Microsoft, je pense.

    Et du coup, je suis revenu à la bonne vieille méthode workbook.open avec readonly à true.

    Merci pour le coup de main,
    tihitibo

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

Discussions similaires

  1. ADODB connection sur fichier déjà ouvert
    Par Slooby dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/03/2015, 11h35
  2. Réponses: 2
    Dernier message: 24/12/2010, 10h03
  3. [XL-2007] ADODB : se connecter à un fichier Excel sans l'ouvrir ?
    Par Monkey_D.Luffy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2010, 09h50
  4. Connexion Excel et test sur un fichier déjà ouvert
    Par sebyo dans le forum Bases de données
    Réponses: 5
    Dernier message: 12/05/2009, 15h39
  5. "Permission refusée sur un ADODB.Connection
    Par Seto dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/10/2007, 12h02

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