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

VBA Access Discussion :

TransferSpreadsheet et fichier ouvert


Sujet :

VBA Access

  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Par défaut TransferSpreadsheet et fichier ouvert
    Bonjour,

    Je me permets de poster ici car je travaille sur le développement d'une base de données Access pour un client. Je suis en local et j'essaye de coller un fichier excel dans une table Access crée pour l'occasion. Pour celà, j'avais penser à utiliser TransferSpreadsheet, le code est ci dessous

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim chemin_fichier As String, T_import as string
    chemin_fichier = "C:/mon_chemin/mon_fichier.xlsx"
    T_import = "zzTimport"
    Nettoyage_Table (T_import) ' nettoyage_Table est une petite sub que j'ai écrite qui vérifie la présence de la table en argument dans la base et qui la supprime si présente.
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, T_import, chemin_fichier, False, "maFeuille!"
    Ce code fonctionne si et seulement si le fichier en question est fermé sur mon ordinateur. Si le fichier est ouvert en parallèle, le code ne renvoie pas d'erreur, mais la ligne 6 ne fonctionne pas et je suis obliger de tuer Access avec Ctrl Alt Suppr pour reprendre la main.
    J'ai essayé différente variantes pour faire un close du fichier, mais sans succès... J'ai l'impression que quelquechose m'échappe.

    Merci par avance pour toute suggestion.

  2. #2
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 935
    Par défaut
    bonjour
    Ce code fonctionne si et seulement si le fichier en question est fermé sur mon ordinateur. Si le fichier est ouvert en parallèle, le code ne renvoie pas d'erreur, mais la ligne 6 ne fonctionne pas et je suis obliger de tuer Access avec Ctrl Alt Suppr pour reprendre la main.
    Si l'importation fonctionne fichier fermé, pourquoi vouloir le faire fichier ouvert ?
    D'autant plus que tu peux l'ouvrir après importation si tu le souhaites vraiment.

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Par défaut
    Bonjour Grandbois,
    Moi je sais me servir d'access et de VBA, mais le client pas forcément : je me dois de prendre en compte la possibilité qu'un jour le client tente de réaliser des importations avec le fichier ouvert... Je pourrais préciser dans le manuel utilisateur que il faut s'en servir fichier fermé, mais ce n'est pas très pro...

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 144
    Par défaut
    Bonjour

    Je pense que ce soit le fait qu'Excel n'admet qu'une connexion extérieure à la fois (sachant que ce n'est pas le cas lorsque c'est des formules liés).

    C'est une hypothèse.

  5. #5
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Par défaut
    Bonjour Phiphi41;
    Merci pour ta réponse, mais j'ai un peu de mal à voir ce que je peux en faire ^^ Peux tu développer ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 144
    Par défaut
    Bonjour

    Je ne suis pas aussi bon que certains membres du forum, mais je pense qu'il faudrait faire un test avant pour savoir si le fichier Excel est ouvert en utilisant GetObject comme dans ce fil : https://www.developpez.net/forums/d9...r-deja-ouvert/

  7. #7
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 935
    Par défaut
    Citation Envoyé par Rince83
    Je pourrais préciser dans le manuel utilisateur que il faut s'en servir fichier fermé, mais ce n'est pas très pro...
    en quoi ce n'est pas très pro: si c'est un pré-requis, le client peut le comprendre, non ?

  8. #8
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    en quoi ce n'est pas très pro: si c'est un pré-requis, le client peut le comprendre, non ?
    Disons simplement que le fait de passer sous Access constitue un step technologique pour mon client :
    - moralement, je me dois de tout faire pour lui simplifier la tache.
    - techniquement, le fait de lui livrer un outil propre, simple avec aussi peu de contraintes que possibles va dans le sens de pérenniser l'utilisation de l'outil chez mon client et le besoin de support chez nous.

    Citation Envoyé par Phiphi41 Voir le message
    je pense qu'il faudrait faire un test avant pour savoir si le fichier Excel est ouvert en utilisant GetObject comme dans ce fil : https://www.developpez.net/forums/d9...r-deja-ouvert/
    Merci pour le lien, phiphi, j'en ai pris connaissance et j'ai repéré la fonction Excel_Ouvert de pcvesoul (modifiée et notamment pour accepter un argument) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim chemin_fichier As String, T_import as string
    chemin_fichier = "C:/mon_chemin/mon_fichier.xlsx"
    T_import = "zzTimport"
    Nettoyage_Table (T_import) ' nettoyage_Table est une petite sub que j'ai écrite qui vérifie la présence de la table en argument dans la base et qui la supprime si présente.
    Call Excel_Ouvert(chemin_fichier )
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, T_import, chemin_fichier, False, "maFeuille!"

    et ça marche ! Le transferSpreadhseet fonctionne !
    Merci phiphi et pcvesoul
    Ca marche parce que Excel_Ouvert prévoit un wb.close. Techniquement, je pourrais mettre cette conversation comme résolue.
    Mais pour ma compréhension.... je trouve bizarre que le fichier excel reste ouvert.... Le wb.close est juste sous VBA ?

  9. #9
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Par défaut
    Pour info, je viens de me rendre compte que si j'importais fichier ouvert avec une mise en forme conditionnelle sur le même fichier, ça ne marchait plus : le transferspreadsheet n'arrive plus à réaliser l'importation...

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 407
    Par défaut
    Bonjour.

    Tu pourrais ouvrir Excel depuis Access.
    Ouvrir le fichier en lecture seul.
    Et copier les données depuis Excel.

    Ça devrait marcher mais le problème est que tu n'auras que la version actuellement sauvegardée pas forcément la toute dernière version.
    Il est probable que si ton fichier et ouvert c'est parce que ton client fait des modifications.

    Je pense qu'il faudrait que tu vérifies si le fichier est ouvert et que tu demandes au client de le fermer.

    Ici du code que j'utilises pour valider l'utilisation.

    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
    Public Function VerifierUtilisationFichier(prmCheminNomFichier as string) As Boolean
        'Vérifie si le fichier est actuellement utilisé
     
        On Error GoTo Err_VerifierUtilisationFichier
     
        Dim result As boolean
     
        Dim numFic As Long: numFic = FreeFile()
        Open prmCheminNomFichier  For Append Access Write Lock Read As #numFic  'Essaye d'ouvrir le fichier en usage exclusif
        Close #numFic
     
        result=false
     
    Exit_VerifierUtilisationFichier:
        Set VerifierUtilisationFichier = result
        Exit Function
     
    Err_VerifierUtilisationFichier:
        Select Case Err.Number
            Case 70 'fichier utilisé
                result=True
            Case Else
                Call MsgBox("Erreur : " & Err.number & " - " Err.Description)
        End Select
     
        Resume Exit_VerifierUtilisationFichier
     
    End Function
    Il y a encore un petit risque que quelqu'un ouvre le fichier avant que tu fasses l'import mais il est faible.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. [VBA][Office 2003] Fichier ouvert depuis IE ou Word?
    Par nbaudraz dans le forum VBA Word
    Réponses: 2
    Dernier message: 12/10/2005, 14h27
  2. tester si fichier ouvert
    Par nbelg27 dans le forum Access
    Réponses: 6
    Dernier message: 08/09/2005, 10h19
  3. Réponses: 5
    Dernier message: 13/05/2005, 12h26
  4. Nombre maximum de fichiers ouverts par processus
    Par galinoo dans le forum Windows
    Réponses: 3
    Dernier message: 27/10/2004, 17h47
  5. Nombre de fichiers ouverts simultanément
    Par matrixfan dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/05/2002, 17h47

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