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

Access Discussion :

(Pb d'instance Excel fantome) pilotage Excel mise en forme sous forme de tableau [AC-2007]


Sujet :

Access

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut (Pb d'instance Excel fantome) pilotage Excel mise en forme sous forme de tableau
    Bonjour,

    J'ai utilisé un bout de code pour mettre sous forme de tableau une plage de données dans une feuille excel que j'ouvre depuis Access 2007. ça fonctionne correctement lorsque je ne l'utilise qu'une seule fois mais si je relance la fonction je me retrouve avec un ou deux message d'erreur comme celui là:

    erreur 462 : le serveur distant n'existe pas ou n'est pas disponible.


    A priori j'ai trouvé dans un autre fil de discussion la raison c'est que j'appelle mal mon instance Excel et/ou que je dois mettre des xl. devant mes objets. j'ai essayé mais ça n'a pas marché. je n'arrive pas à corriger mon code (Je précise que je début en VBA j'ai donc du mal à cerner exactement le problème dans mon code). j'ai donc essayé des solutions pas très propres comme de killer le processus Excel mais même ça, ça ne fonctionne pas.

    Voila je m'en remet donc à vous pour m'éclairer, car il vaut mieux demander l'avis de personnes d'expériences pour éviter de se retrouver plus tard avec des instances fantômes dans tout les sens, et des messages d'erreur à tout va.


    Ci dessous mon code VBA qui pilote Excel depuis Access:


    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 DémoPilotageExcel(strNomReq2 As String)
        Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim i As Long
        Dim vtemp As Variant
        Exten = ".XLSX"
        Chemin = "c:\domusclub\rapport\"
     
        ' Initialiser les variables
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open(Chemin & strNomReq2 & Exten)
     
        ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$P$4000"), , xlYes).Name = "Tableau1"
        Range("$A$1:$P$4000").Select
        ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleDark10"
     
        ' Code de fermeture
        xlBook.Save
        xlApp.Quit
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
        Shell ("taskkill /F /IM Excel.exe")
     
        'MsgBox "Fin de la procédure. :)"
     
    End Function
    Je ne sais pas si c'est important mais je lance cette fonction depuis une autre fonction que voici :


    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
    Public Function OuvreReq(strNomRequete As String)
       Exten = ".XLSX"
       Chemin = "c:\domusclub\rapport\"
       NomFich = Dir(Chemin & strNomRequete & Exten)
       If NomFich <> "" Then ModKillFile2 (Chemin & strNomRequete & Exten)
     
       If DCount("*", strNomRequete) > 0 Then
       'MsgBox "La requête '" & strNomRequete & "' renvoie plusieurs enregistrements"
       DoCmd.TransferSpreadsheet acExport, , strNomRequete, Chemin & strNomRequete
     
       DémoPilotageExcel (strNomRequete)
     
       'DoCmd.OpenQuery strNomRequete, acNormal
       If strNomRequete = "controle prix 1" Then FnSafeSendEmailInter
       If strNomRequete = "controle prix 2" Then FnSafeSendEmailEuro
       If strNomRequete = "controle prix 3" Then FnSafeSendEmailGit
    Else
       'MsgBox "La requête '" & strNomRequete & "' ne renvoie aucun enregistrement"
    End If
    End Function

    Voila, j'espère que vous pourrez m'aider

  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 592
    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 592
    Points : 34 247
    Points
    34 247
    Par défaut
    Salut,

    après ton xlbook.save il faut fermer le classeur aussi
    sinon effectivement, pour éviter les erreurs de "pointage" vers les fichiers et feuilles Excel, le bloc de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$P$4000"), , xlYes).Name = "Tableau1"
        Range("$A$1:$P$4000").Select
        ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleDark10"
    peut être adapté en ajoutant les objets xlapp et/ou xlbook.
    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
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    yes ça marche !

    j'avais omis un xlapp dans mon code. je les avais mis tous en début de ligne alors qu'il fallait en mettre un aussi sur le range("$A$1:$P$4000") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        xlApp.ActiveSheet.ListObjects.Add(xlSrcRange, xlApp.Range("$A$1:$P$4000"), , xlYes).Name = "Tableau1"
        xlApp.Range("$A$1:$P$4000").Select
        xlApp.ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleDark10"

    merci beaucoup

  4. #4
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Désolé si je déterre un sujet ancien mais finalement je ne suis pas sur d'avoir résolu mon problème.
    j'ai récupéré le code source ci-dessus que j'ai adapté afin qu'il puisse exporté et mettre en forme n'importe quel requete:

    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
    Public Function PilotageExcelGenerique(strNomCheminComplet As String, strNbLigne As Integer, strNbColonne As Integer)
     
        Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim i As Long
        Dim vtemp As Variant
     
        ' Initialiser les variables
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open(strNomCheminComplet)
        xlApp.ActiveSheet.ListObjects.Add(xlSrcRange, xlApp.Range(Cells(1, 1), Cells(strNbLigne + 1, strNbColonne)), , xlYes).Name = "Tableau1"
        xlApp.Range(Cells(1, 1), Cells(strNbLigne + 1, strNbColonne)).Select
        xlApp.ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleDark10"
     
        xlBook.Save
        xlBook.Close
        xlApp.QUIT
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
     
    End Function
    j'imagine que le code est mal fait ou qu'il en manque un bout car si je le lance une fois ça marche, mais le processus excel reste dans la liste du gestionnaire de tache, et la seconde fois que je lance la fonction j'ai un message d'erreur bloquant qui disparaît si je kill le processus avant le lancement.

    Quelqu'un pourrait me dire ce que j'ai oublié dans ce code ?

  5. #5
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    Bon désolé j'aurais du réfléchir un peu avant de poster. J'ai rajouter des XlApp. avant la fonction Cells et je n'ai plus le message d'erreur ni le processus dans le gestionnaire de tache.

    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
    Public Function PilotageExcelGenerique(strNomCheminComplet As String, strNbLigne As Integer, strNbColonne As Integer)
     
        Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim i As Long
        Dim vtemp As Variant
     
        ' Initialiser les variables
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open(strNomCheminComplet)
        xlApp.ActiveSheet.ListObjects.Add(xlSrcRange, xlApp.Range(xlApp.Cells(1, 1), xlApp.Cells(strNbLigne + 1, strNbColonne)), , xlYes).Name = "Tableau1"
        xlApp.Range(xlApp.Cells(1, 1), xlApp.Cells(strNbLigne + 1, strNbColonne)).Select
        xlApp.ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleDark10"
     
        xlBook.Save
        xlBook.Close
        xlApp.QUIT
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
     
    End Function

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

Discussions similaires

  1. [MySQL] problème de mise en page sous forme de tableau HTML
    Par body72 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/03/2008, 20h29
  2. [EXCEL/C#] Piloter Excel XP compatible Excel 2003 ?
    Par legillou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/08/2006, 08h01
  3. [C#] Pilotage Excell - Attribuer un nom à une zone...
    Par diaboloche dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/01/2006, 20h42
  4. [C#] Pilotage Excell
    Par diaboloche dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/01/2006, 18h15
  5. Pilotage excel (couleur cellule)
    Par TheGoldViking dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/04/2005, 10h59

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