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 :

Fermeture d'excel par VBA ACCESS


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur Industrie
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Par défaut Fermeture d'excel par VBA ACCESS
    Bonjour tout le monde,

    Je vien chercher de l'aide car malgrés mes effor je ne trouve pas la solution à mon probléme.

    J'ai un bou de code qui ouvre une aplication Excel et ouvre et ferme succesivement des workbooks. à la fin de cette boucle (infernale j'aimerai qu'il finisse par fermer Excel (de sorte à ce qu'il n'apparaisse pas dans les processus du gestionnaire des taches).

    Voila mon code:

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Public Function IMPORT_GLOBAL()
     
       '//////// IMPORT DU FICHIER ET SELECTION \\\\\\\\\
     
     
       'Ce code permet de récupérer les données dans chaque fichier excel, cela peut prendre un peu de temps car il doit mettre à jour 12 TCD par fichier
       'Pour séléctionner les fichier fournisseur il se base sur la liste des fournisseur à noter
     
    Dim lgClients As Long, lgIdx As Long
    Dim strSQL As String
    Dim LibFournisseur As String
    Dim CodeFournisseur As String
    Dim Onglet As String
    Dim myPath As String
     
     
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlsheet As Excel.Worksheet
     
    lgClients = DCount("*", "R_Select_Fourn")
    If lgClients = 0 Then Exit Function
        Set xlApp = New Excel.Application
        xlApp.Visible = False
     
    For lgIdx = 1 To lgClients
        DoCmd.SetWarnings False
        ' Vide SelectionFournisseur
        DoCmd.RunSQL "DELETE FROM [Selection_Fourn]"
        ' Met Nième LibFournisseur dans SelectionFournisseur
        strSQL = "INSERT INTO Selection_Fourn([Nom Fournisseur]) " & _
                 "SELECT Max([Nom Fournisseur])" & _
                 "FROM (SELECT TOP " & lgIdx & " [Nom Fournisseur] FROM R_Select_Fourn)"
        DoCmd.RunSQL strSQL
        ' Attribution du code fournisseur inséré dans la table Selection_Fourn à la variable LibFournisseur
        LibFournisseur = CurrentDb.OpenRecordset("Selection_Fourn").Fields(0).Value
        CodeFournisseur = CurrentDb.OpenRecordset("Code_Fournisseur_Séléctionné").Fields(0).Value
        'MsgBox (LibFournisseur)
        DoCmd.SetWarnings True
     
        'Adress du fichier pour l'import
        myPath = "U:\Notations Fournisseurs et Plans d'actions\Logistique\EVALUATION AC 2010\Evaluation Fournisseur  -" & LibFournisseur & "- .xls"
     
     
        Set xlBook = xlApp.Workbooks.Open(myPath)
        Set xlsheet = xlBook.Worksheets("TCD")
     
        xlsheet.PivotTables("TCDjanvier").PivotCache.Refresh
        xlsheet.PivotTables("TCDfévrier").PivotCache.Refresh
        xlsheet.PivotTables("TCDmars").PivotCache.Refresh
        xlsheet.PivotTables("TCDavril").PivotCache.Refresh
        xlsheet.PivotTables("TCDmai").PivotCache.Refresh
        xlsheet.PivotTables("TCDjuin").PivotCache.Refresh
        xlsheet.PivotTables("TCDjuillet").PivotCache.Refresh
        xlsheet.PivotTables("TCDaoût").PivotCache.Refresh
        xlsheet.PivotTables("TCDseptembre").PivotCache.Refresh
        xlsheet.PivotTables("TCDoctobre").PivotCache.Refresh
        xlsheet.PivotTables("TCDnovembre").PivotCache.Refresh
        xlsheet.PivotTables("TCDdécembre").PivotCache.Refresh
     
    DoCmd.TransferSpreadsheet acImport, 8, "IMPORT_GLOBAL", myPath, True, "TCD!A86:G122"
     
    xlBook.Save
    xlBook.Close
    Set xlsheet = Nothing
    Set xlBook = Nothing
     
    Next
     
     
    Exit Function
    Set xlsheet = Nothing
    Set xlBook = Nothing
    DoCmd.OpenQuery "SUP_IMPORT_GLOBAL_0CMD" 'Supprime les lignes de données ou le champ nb commande est à zero
    Excel.Application.Quit
    Set xlApp = Nothing
     
    End Function
    Merci à tous pour votre aide future

    Bien à vous

    Alex

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour,
    tout simplement

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Par défaut
    Attention à utiliser xlApp.Quit avant
    Sinon il l'application Excel ne sera pas quittée!!!!!

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur Industrie
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Par défaut
    Déja essayé mais ne marche pas

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur Industrie
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Par défaut
    Le probléme est que ma boucle qd elle se termine renvoi vers le exit function, donc comment inclure le xlApp dans mon code en l'executant une fois la boucle terminé mais sans le mettre dans les exit function (car de se que j'ai compri si je le met apré le exit function cela ne s'execute pas...)

    Merci

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Par défaut
    Il suffit de faire le xlApp.Quit juste avant le Exit Function, c'est à dire entre le next de la boucle for et Exit Function

  7. #7
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Par défaut
    Pourquoi vouloir absolument mettre un Exit Function? Essaie 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Public Function IMPORT_GLOBAL()
     
       '//////// IMPORT DU FICHIER ET SELECTION \\\\\\\\\
     
     
       'Ce code permet de récupérer les données dans chaque fichier excel, cela peut prendre un peu de temps car il doit mettre à jour 12 TCD par fichier
       'Pour séléctionner les fichier fournisseur il se base sur la liste des fournisseur à noter
     
    Dim lgClients As Long, lgIdx As Long
    Dim strSQL As String
    Dim LibFournisseur As String
    Dim CodeFournisseur As String
    Dim Onglet As String
    Dim myPath As String
     
     
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlsheet As Excel.Worksheet
     
    lgClients = DCount("*", "R_Select_Fourn")
    If lgClients <> 0 Then 
        Set xlApp = New Excel.Application
        xlApp.Visible = False
     
    For lgIdx = 1 To lgClients
        DoCmd.SetWarnings False
        ' Vide SelectionFournisseur
        DoCmd.RunSQL "DELETE FROM [Selection_Fourn]"
        ' Met Nième LibFournisseur dans SelectionFournisseur
        strSQL = "INSERT INTO Selection_Fourn([Nom Fournisseur]) " & _
                 "SELECT Max([Nom Fournisseur])" & _
                 "FROM (SELECT TOP " & lgIdx & " [Nom Fournisseur] FROM R_Select_Fourn)"
        DoCmd.RunSQL strSQL
        ' Attribution du code fournisseur inséré dans la table Selection_Fourn à la variable LibFournisseur
        LibFournisseur = CurrentDb.OpenRecordset("Selection_Fourn").Fields(0).Value
        CodeFournisseur = CurrentDb.OpenRecordset("Code_Fournisseur_Séléctionné").Fields(0).Value
        'MsgBox (LibFournisseur)
        DoCmd.SetWarnings True
     
        'Adress du fichier pour l'import
        myPath = "U:\Notations Fournisseurs et Plans d'actions\Logistique\EVALUATION AC 2010\Evaluation Fournisseur  -" & LibFournisseur & "- .xls"
     
     
        Set xlBook = xlApp.Workbooks.Open(myPath)
        Set xlsheet = xlBook.Worksheets("TCD")
     
        xlsheet.PivotTables("TCDjanvier").PivotCache.Refresh
        xlsheet.PivotTables("TCDfévrier").PivotCache.Refresh
        xlsheet.PivotTables("TCDmars").PivotCache.Refresh
        xlsheet.PivotTables("TCDavril").PivotCache.Refresh
        xlsheet.PivotTables("TCDmai").PivotCache.Refresh
        xlsheet.PivotTables("TCDjuin").PivotCache.Refresh
        xlsheet.PivotTables("TCDjuillet").PivotCache.Refresh
        xlsheet.PivotTables("TCDaoût").PivotCache.Refresh
        xlsheet.PivotTables("TCDseptembre").PivotCache.Refresh
        xlsheet.PivotTables("TCDoctobre").PivotCache.Refresh
        xlsheet.PivotTables("TCDnovembre").PivotCache.Refresh
        xlsheet.PivotTables("TCDdécembre").PivotCache.Refresh
     
    DoCmd.TransferSpreadsheet acImport, 8, "IMPORT_GLOBAL", myPath, True, "TCD!A86:G122"
     
    xlBook.Save
    xlBook.Close False
    Set xlsheet = Nothing
    Set xlBook = Nothing
     
    Next
     
    xlApp.Quit
    Set xlApp = Nothing
     
    DoCmd.OpenQuery "SUP_IMPORT_GLOBAL_0CMD" 'Supprime les lignes de données ou le champ nb commande est à zero
     
    End If
     
    End Function

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2008
    Messages : 94
    Par défaut
    Salut

    Essaye de mettre cette ligne pour kill l'application excel que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute NomdunFormulaire.hwnd, "close", "TonCheminAccèsFichierExcel C:\Documents and Settings\toto.xls", "", vbNullString, 1

  9. #9
    Invité de passage
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 1
    Par défaut
    Salut,

    encore plus simple,
    tu remplaces ta ligne de commande :
    Set xlBook = xlApp.Workbooks.Open(myPath)
    par
    Set xlBook = xlApp.Workbooks.Open(myPath,Readonly:=True)

    et plus besoin de fermer ton processus EXCEL.

Discussions similaires

  1. [AC-2003] Remise en forme d'un fichier Excel Par VBA (Access)
    Par Deustalos dans le forum VBA Access
    Réponses: 6
    Dernier message: 09/11/2009, 09h45
  2. Fermeture fichier excel en vba
    Par avyrex dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/11/2006, 21h30
  3. Mise en page Excel via VBA Access
    Par popo68 dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/11/2006, 17h03
  4. créer un fichier excell avec VBA(access)
    Par JCH dans le forum Access
    Réponses: 1
    Dernier message: 19/09/2006, 19h07
  5. ouverture auto d'un fichier excel par macro access
    Par pascal913 dans le forum Access
    Réponses: 5
    Dernier message: 26/07/2006, 16h50

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