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 :

Lecture d'un fichier fermé mais qui s'ouvre quand même [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut Lecture d'un fichier fermé mais qui s'ouvre quand même
    Bonjour,

    Je souhaites faire une lecture d'un fichier excel tout en le gardant fermé.
    J'ai donc utilisé des bouts de code trouvé sur le forum :

    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
    Fichier = "cheminfichier\monfichier.xlsm"
        Feuille = "Mafeuille$"
        Cellule = "A1:AZ25000"
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 12.0 Macro;HDR=NO;IMEX=1;"";"
        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, adLockOptimistic
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
        FeuilleR.Cells(1, 1).CopyFromRecordset Rst
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    Quand le fichier est en local tout fonctionne correctement, par contre quand j'ouvre le même fichier mais en réseau il s'ouvre dans Excel...
    Savez vous d'où peut venir ce "bug"?

    D'avance merci,
    Da vinci Code....


    Code??? qui a dit Code?

  2. #2
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Désolé, pour avoir cherché qq temps, je trouve la réponse juste après avoir posté.
    Un simple oubli de l'extension .xlsm dans le titre du fichier à lire.
    Da vinci Code....


    Code??? qui a dit Code?

  3. #3
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Bon je reviens avec mon baton de pélerin....

    J'ai un nouveau problème qui entraine l'ouverture du fichier : quand le fichier cible est déjà ouvert par un autre utilisateur.

    j'ai expérimenté et même en local, si le fichier xlsm est en ouverture lors de l'execution de la macro il ouvre le fichier.
    Si par contre le fichier n'est pas utilisé il fait bien un copié collé sans ouverture du fichier.

    Quelqu'un aurait il une solution? (autre que de copier coller le fichier de préférence...)

    D'avance merci,
    Da vinci Code....


    Code??? qui a dit Code?

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    et en spécifiant la lecture seule ça ne fonctionne pas ?

    ajoute
    juste avant le paramètre HDR

  5. #5
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Merci bcp

    Ca semble marcher!

    Rapide efficace ^^ "éminent" est mérité
    Da vinci Code....


    Code??? qui a dit Code?

  6. #6
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    De retour...

    J'ai cru que ça fonctionnait mais c'était juste que le fichier n'était pas utilisé aux moments des tests.

    Du coup je me retrouve toujours avec le même soucis :

    Quand le fichier est utilisé par un utilisateur, lors de la connection ADO, le fichier souvre sous Excel.
    J'ai essayé plusieurs piste :

    puis
    et également en lieu et place du ReadOnly :
    Rien à faire, à chaque fois j'ai une ouverture sur Excel.
    Quelqu'un aurait il une autre piste? (j'en viens à me demander s'il ne sera pas plus simple de faire une copie locale des fichiers....)
    Da vinci Code....


    Code??? qui a dit Code?

  7. #7
    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
    Fichier = "cheminfichier\monfichier.xlsm"    Feuille = "Mafeuille$"
        Cellule = "A1:AZ25000"
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 12.0 Macro;HDR=NO;IMEX=1;"";"
        Set Rst=source.execute("SELECT * FROM [" & Feuille & Cellule & "]")
        FeuilleR.Cells(1, 1).CopyFromRecordset Rst
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing

  8. #8
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Salut,

    Je n'ai pas compris ton interventin dysorthographie...

    Du coup j'ai du passer par une recopie temporaire du fichier en local :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function CopieFichier(ChemF As String) As String
    Dim ObjectFile As Object
        On Error GoTo fin
        Set ObjectFile = CreateObject("Scripting.FileSystemObject")
        ObjectFile.CopyFile ChemF, "D:\"
        Set ObjectFile = Nothing
        Decoup = Split(ChemF, "\")
        CopieFichier = "D:\" & Decoup(UBound(Decoup))
        GoTo Fin2
    fin:
        CopieFichier = ChemF
    Fin2:
    End Function
    et de détruire ce fichier en fin de procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Fichier = CopieFichier(Fichier)
     
    ...
     
    If InStr(Fichier, "D:") <> 0 Then Kill Fichier
    Da vinci Code....


    Code??? qui a dit Code?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je n'ai pas compris ton interventin dysorthographie...
    et?

  10. #10
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    A part recopier le code que j'ai transcris un peu plus haut sans y modifier quoi que ce soit quel est l'interet de ton intervention sur ce poste? Ou j'ai loupé quelque chose
    Da vinci Code....


    Code??? qui a dit Code?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Many31 Voir le message
    A part recopier le code que j'ai transcris un peu plus haut sans y modifier quoi que ce soit quel est l'interet de ton intervention sur ce poste? Ou j'ai loupé quelque chose
    si encore tu me disais j'ais testé et c'est pareil je ne dirai rien mais tu ne donne aucune information!

    tu ouvre un recordset en adLockOptimistic (Lecture / écriture)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
    on dira que je me suis trompé de poste!
    Dernière modification par Invité ; 02/03/2017 à 15h44.

  12. #12
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Ah yes j'avais pas vu le "Source.execute" mais malheureusement comme expliqué c'est au moment de la connection ado
    cf. précédent poste :
    lors de la connection ADO
    donc dès la ligne Source.Open...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 12.0 Macro;HDR=NO;IMEX=1;"";"
    C'est pour ça que j'ai pas fait attention à la suite... mes excuses j'ai pas été très clair sur le début de la ligne problématique

    Je cherchais plus un paramètre à activer / spécifier dans l'ouverture de la connection... mais après lecture de plusieurs sujet rien sur ce point.
    Donc je passe par la recopie temporaire qui est une solution légèrement moins sexy mais tout aussi efficace.
    Da vinci Code....


    Code??? qui a dit Code?

  13. #13
    Invité
    Invité(e)
    Par défaut
    et ta connexion tu la fait bien comme ça? ";Extended Properties=""Excel 12.0 Macro;HDR=NO;IMEX=1;Mode=Read;";" sens espaces?

  14. #14
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Heureusement qu'il est là !

    C'est bien sûr True et pas False, attention donc à mon intervention du post #4

  15. #15
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    à quelque chose prêt, j'ai mis le ReadOnly avant le HDR mais c'etait bien sans espace. (j'ai essayé dabord le =false avant de comprendre que je recopiais sans réfléchir ^^ donc le =True puis le Mode=adModeRead, tel que conseillé dans les sujets abordant en détail les connexions ADO de manière transverse - à savoir pas forcément excel puisque le readonly est semble t il consacré à excel) j'ai l'impression que si le fichier est ouvert en écriture par un utilisateur, la connexion ADO est "bloquée" :/ personne n'aborde ce point où alors pas dans un langage que j'ai réussi à comprendre xD

    Et je viens de tester le ReadOnly=True après le IMEX, même résultat il me lance l'ouverture du fichier
    Da vinci Code....


    Code??? qui a dit Code?

  16. #16
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Testé aussi le "Mode=Read" toujours le même problème. En forcant l'arrêt de l'ouverture du fichier (à la louche en appuyant sur Escape) j'ai ce message d'erreur :
    Erreur d'éxecution '-2147467259 (80004005)
    Le moteur de base de donneés Microsoft Access, ne peut pas ouvrir ou écrire (je lui ai pas demandé mais bon...) sur le fichier << >>. Il est déjà ouvert en mode exclusif par un autre utilisateur, ou vous devez avoir l'autorisation de visualiser et d'écrire sur ses (c'est bien un ses) données.

    (j'ai pas essayé de déprioriser la connection mais je pense pas que cela vienne de ça)
    Vous prenez pas la tête, merci déjà de vous être penché sur le sujet, la recopie temporaire m'a permis de contourner le problème.
    Da vinci Code....


    Code??? qui a dit Code?

  17. #17
    Invité
    Invité(e)
    Par défaut
    excel n'est pas partageur, as tu essayer de passer ton fichier Excel en mode partagé justement?

    je fais régulièrement des connexion sur Excel en lecture et/ou écriture!

    le problème don tu parle est récurent mais il semblerait que je fasse les chose correctement car je n'es jamais rencontré ce problème! il m'es d'autant plus compliqué d'y trouver un réponse , sauf par talonnement, vue que je n'es pas analysé ce qui en est la cause!

  18. #18
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Re-Salut,

    Je ne suis pas le propriétaire du classeur cible de la connexion et trop restrictif de le mettre en partage.

    Pour la petite histoire c'est un module que j'ai créé en 2015... Jamais eu de soucis jusqu'à présent et cette année en faisant quelques évolutions j'ai commencé à avoir ce type de problème. (après je ne peux pas garantir que le cas de figure ne se soit jamais présenté jusque là.... mais je suis perplexe vu le temps passé à le tester. Donc j'ai bien l'impression que depuis mon passage en Excel2010 je rencontre de nouveaux petits soucis de ce genre. Est ce lié à Microsoft.ACE au lieu de Microsoft.JET?). Vu le manque d'info sur le web à ce sujet je suppose que ce cas de figure est extrêmement rare... du coup ce serait dommage de passer trop de temps à essayer de comprendre les facéties d'excel alors qu'une solution de contournement existe.

    @+
    Da vinci Code....


    Code??? qui a dit Code?

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

Discussions similaires

  1. [XL-2013] Tentative de lecture dans un fichier ferme
    Par ugrumov_zita dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/11/2013, 15h24
  2. Réponses: 2
    Dernier message: 01/03/2010, 12h50
  3. Réponses: 3
    Dernier message: 14/05/2008, 13h41
  4. Réponses: 2
    Dernier message: 11/12/2006, 13h15
  5. [Servlet - MySQL] Ca marche mais message d'erreur quand même
    Par ShinJava dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/11/2004, 15h15

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