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 :

Excel continue de s'exécuter en background après la fin de la macro qui le contrôle. [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut Excel continue de s'exécuter en background après la fin de la macro qui le contrôle.
    Bonjour,

    Je suis débutant en VBA.
    En cherchant, j'ai vu qu'il fallait accéder à tout objet en le déclarant en tant que variable d'abord et ce même pour les collections. Il faut les libérer ensuite et c'est ce que je pense faire, mais excel ne se termine pas.
    Cela est ennuyeux et le tuer en tant que processus est dangereux car s'il y a une autre instance lancée...

    Merci de m'aider à trouver une solution.
    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
     
        Dim oExcel As Object
        Dim oWorkbooks As Object
        Dim oWorkbook As Object
        Dim oSheet As Object
        Set oExcel = New Excel.Application
        oExcel.Visible = True
        Set oWorkbooks = oExcel.Workbooks
        Set oWorkbook = oWorkbooks.Open("C:\Test.xlsm", ReadOnly:=True)
        Dim oSheets As Object
        Set oSheets = oWorkbook.Sheets
        Set oSheet = oSheets(1)
        Dim myRange As Object
        Set myRange = oSheet.Range("A:A")
        Dim oWorksheetFunction As Object
        Set oWorksheetFunction = Excel.WorksheetFunction
        MsgBox oWorksheetFunction.CountIf(myRange, "*")
        oWorkbook.Close
    CleanUp:
        Set oWorksheetFunction = Nothing
        Set myRange = Nothing
        Set oSheet = Nothing
        Set oSheets = Nothing
        Set oWorkbook = Nothing
        Set oWorkbooks = Nothing
        oExcel.Quit
        Set oExcel = Nothing

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je viens de tester ton code après simplification, et pas de problème, Excel se ferme bien. Il y a des objets inutiles dans ton code que j'ai supprimés (en relation précoce, cocher la référence) :
    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
     
    Sub AvecExcel()
     
        Dim oExcel As New Excel.Application
        Dim oWorkbook As Excel.Workbook
        Dim oSheet As Excel.Worksheet
        Dim myRange As Excel.Range
     
        Set oWorkbook = oExcel.Workbooks.Open("C:\Test.xlsm", ReadOnly:=True)
        oExcel.Visible = True
     
        Set oSheet = oWorkbook.Worksheets(1)
        Set myRange = oSheet.Range("A:A")
     
        MsgBox oExcel.WorksheetFunction.CountIf(myRange, "*")
     
        oWorkbook.Close
     
    CleanUp:
        Set myRange = Nothing
        Set oSheet = Nothing
        Set oWorkbook = Nothing
        oExcel.Quit
        Set oExcel = Nothing
     
    End Sub

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    Merci ça fonctionne. Pour les objets inutiles, je cherchais pourquoi le process excel continuait à tourner en background et je suis tombé sur une réponse qui disait que tout devait être déclaré et libéré à la fin donc j'ai voulu tester.

    Probablement que lors de mon test j'ai oublié de mettre un Set object = Nothing sur un objet utilisé par ma macro.

    Autre-chose, que voulez-vous dire par relation précoce ?

    La référence était déjà cochée sinon j'aurais eu 'user-defined type not declared' à la compilation.

    Merci encore.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,

    Une relation précoce est justement de cocher la référence à l'objet et une relation tardive est d'y faire référence pendant le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'relation précoce (la référence à l'objet Excel doit être cochée)
    Dim oExcel As New Excel.Application
     
    'relation tardive (la référence n'est cochée)
    Dim oExcel As Object
    Set oExcel = CreateObject("Excel.Application")
    Hervé.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    Merci pour cette explication.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/05/2014, 16h09
  2. Réponses: 3
    Dernier message: 07/08/2012, 16h10
  3. Runtime.getRuntime().exec exécute le processus après la fin du programme Java
    Par scalande dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 14/02/2012, 17h56
  4. Réponses: 11
    Dernier message: 07/07/2006, 19h24
  5. Excuter quelque chose apres l'arret des scrollbar
    Par m14w dans le forum Composants VCL
    Réponses: 1
    Dernier message: 06/01/2006, 23h52

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