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 :

Processus Excel persistant


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Processus Excel persistant
    Bonjour à tous,

    Après maintes recherches sur le web et ce forum, j'ai vu pas mal de sujets qui traitent de mon problème, mais les réponses proposées ne le résolvent pas

    Je fais un import d'un fichier Excel sur Access (fichier Excel décomposé en 3 onglets dont seul le 1er m'intéresse) en créant une nouvelle table. A noter que le transfert ne se fait que pour un seul enregistrement.

    Le transfert fonctionne à merveille, mais lorsque je veux le recommencer, je me rend compte qu'un processus Excel reste présent malgré la fermeture de mon appli et m'empêche de refaire le transfert...

    Je vous mets mon code, j'espère que vous pourrez me dire ce qui cloche...

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Private Sub Commande461_Click()
     
    Dim fichierexcel As Excel.Application
    Dim classeur As Excel.Workbook
    Dim feuille As Excel.Worksheet
    Dim qd As QueryDef
     
    'Vérification si Excel est déjà ouvert
     
    Dim excel_ouvert As Boolean
     
    Set fichierexcel = Nothing
    excel_ouvert = False
     
    On Error Resume Next
    Set fichierexcel = GetObject("excel.application")
    On Error GoTo 0
     
    If fichierexcel Is Nothing Then
        Set fichierexcel = CreateObject("Excel.Application")
        excel_ouvert = True
    End If
     
    'Création table temporaire pour stocker les données reprises dans excel
    [...]
     
     
    'Ouverture du fichier Excel
    Set classeur = fichierexcel.Workbooks.Open("D:\...\fichier.xls")
    fichierexcel.Visible = True
     
    'Exécution d'une macro excel qui met en forme mes données
    fichierexcel.Run ("Export_new")
     
    'Transfert des données
    DoCmd.TransferSpreadsheet acImport, , "temp", ("D:\...\fichier.xls"), True, "Export_access_new!A1:BL2"
     
    classeur.Close (False)
    Excel.Application.Quit
    Set feuille = Nothing
    Set classeur = Nothing
    Set fichierexcel = Nothing
     
     
    End Sub
    J'ai même essayé d'ajouter un code au début pour voir si l'appli Excel est déjà ouverte, mais ça n'a pas l'air de fonctionner...

    Merci d'avance pour l'aide que vous pourrez m'apporter

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    bonjour,
    je pense que le simple
    devrait faire l'affaire.....
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci de ta réponse, mais malheureusement ce n'est pas aussi simple, j'ai déjà essayé...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    ok,
    et au lieu de voir si l'application est déjà ouverte, pourquoi ne traites-tu pas le code comme ceci :
    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
    Private Sub Commande461_Click()
     
    Dim fichierexcel As New Excel.Application
    Dim classeur As Excel.Workbook
    Dim feuille As Excel.Worksheet
    Dim qd As QueryDef
     
    'Vérification si Excel est déjà ouvert
     
     
     
    'Création table temporaire pour stocker les données reprises dans excel
    [...]
     
     
    'Ouverture du fichier Excel
    Set classeur = fichierexcel.Workbooks.Open("D:\...\fichier.xls")
    fichierexcel.Visible = True
     
    'Exécution d'une macro excel qui met en forme mes données
    fichierexcel.Run ("Export_new")
     
    'Transfert des données
    DoCmd.TransferSpreadsheet acImport, , "temp", ("D:\...\fichier.xls"), True, "Export_access_new!A1:BL2"
     
    classeur.Close (False)
    fichierexcel.Quit
    Set feuille = Nothing
    Set classeur = Nothing
    Set fichierexcel = Nothing
     
     
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Bonjour.
    Cela vien peut-être de la macro qui est excécuté sur le fichier Excel.

    Ou alors le problème ne vient pas du fait que le fichier Excel est ouvert mais plutôt du fait qu'il existe un liaison entre la base de données et le fichier.

    Peut-être que la methode "TransferSpreadsheet" garde une liaison ouverte ou quelque chose du genre.

    Enfin je dit ça mais je sais pas...je maitrise pas trop ce domaine.


    En éspérant t'avoir inspiré pour une idée de résolution.
    Rien n'est rien!!! ... Tout est quelque chose!!!

    Petits liens utiles :
    -Chaine de connexion : http://www.connectionstrings.com/
    -ADO et ADO.net : Tuto ADO et ADO.net

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ca ne marche pas non plus jpcheck

    Sinon, ça provient bien de la méthode, le problème a l'air d'être récurrent sur le net. Mais je n'ai pas trouvé de solutions

    Le fichier Excel se ferme bien, mais le processus est toujours présent. Et quand je relance la macro, il me dit que le fichier est introuvable

  7. #7
    Membre régulier
    Femme Profil pro
    Consultante informatique décisionnelle et bases de données
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultante informatique décisionnelle et bases de données

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 101
    Points
    101
    Par défaut j'ai eu le même souci
    et j'ai réussi à le résoudre en testant en vba si le processus est toujours en mémoire

    Fonction ajoutée dans un module
    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
     
    Public Function KillProcess(ByVal ProcessName As String) As Boolean
    On Error GoTo err
        Dim svc As Object
        Dim sQuery As String
        Dim oproc
        Set svc = GetObject("winmgmts:root\cimv2")
        sQuery = "select * from win32_process where name='" & ProcessName & "'"
        For Each oproc In svc.execquery(sQuery)
            oproc.Terminate
        Next
        Set svc = Nothing
    err:
    Set svc = Nothing
    'MsgBox err.Description & " " & err.Number & " " & err.Source
    End Function
    appel de la fonction pour tuer tous les processus Excel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    KillProcess "Excel.Exe"
    Cela m'a résolu beaucoup de petits soucis
    Anne

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    essaie en mettant la méthode TransfertSpreadSheet après avoir fermé les objets Excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set feuille = Nothing
    classeur.Close (False)
    Set classeur = Nothing
    If excel_ouvert Then fichierexcel.Quit
    Set fichierexcel = Nothing
     
    'Transfert des données
    DoCmd.TransferSpreadsheet acImport, , "temp", ("D:\...\fichier.xls"), True, "Export_access_new!A1:BL2"
    Ainsi TransfertSpreadSheet ne peut plus interférer avec l'objet fichierexcel.

    A+

  9. #9
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par LedZeppII Voir le message
    Bonsoir,

    essaie en mettant la méthode TransfertSpreadSheet après avoir fermé les objets Excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set feuille = Nothing
    classeur.Close (False)
    Set classeur = Nothing
    If excel_ouvert Then fichierexcel.Quit
    Set fichierexcel = Nothing
     
    'Transfert des données
    DoCmd.TransferSpreadsheet acImport, , "temp", ("D:\...\fichier.xls"), True, "Export_access_new!A1:BL2"
    Ainsi TransfertSpreadSheet ne peut plus interférer avec l'objet fichierexcel.

    A+
    Merci, j'avais fini par trouver ça hier soir et ça marche

    Anne, je garde ton code sous le coude, merci beaucoup

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

Discussions similaires

  1. [XL-2007] Processus Excel persistant
    Par Beren69 dans le forum Excel
    Réponses: 1
    Dernier message: 10/03/2014, 17h02
  2. [VB.NET]Processus Excel persistant
    Par Yolak dans le forum Windows Forms
    Réponses: 8
    Dernier message: 16/10/2010, 13h00
  3. VBSCRIPT : Processus EXCEL persistant
    Par datastep dans le forum VBScript
    Réponses: 6
    Dernier message: 27/08/2010, 13h39
  4. Réponses: 2
    Dernier message: 14/01/2008, 14h17
  5. processus excel
    Par CharleLéo dans le forum Langage
    Réponses: 4
    Dernier message: 25/10/2005, 11h49

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