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

VB.NET Discussion :

Fermer instance excel


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut Fermer instance excel
    Bonjour,

    Question con mais je ne trouve aucune solution sur internet...
    J'ai un code qui :
    ouvre un fichier excel
    retire les lignes et colonnes qui ne m'intéressent pas
    sauvegarde dans un nouveau fichier
    déplace le fichier original dans un autre dossier.

    Tout ça marque parfaitement.
    Le problème c'est que l'instance excel du fichier créé reste malgré tout ouverte et je ne parviens pas à trouver une ligne de code pour la fermer.
    J'ai essayé entre autre :
    appexcel.close()
    appexcel.quit()

    Voici le code exact, si quelqu'un peut m'aider.... merci d'avance !
    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
                For i As Integer = 0 To nbfichier - 1
                    Dim nomfichier As String
                    nomfichier = ListBox1.Items(i).ToString
                    Label2.Text = nomfichier
                    Dim appExcel As Object 'Application Excel
                    Dim wbExcel As Object 'Classeur Excel
                    Dim wsExcel As Object 'Feuille Excel
     
                    'Ouverture de l'application
                    appExcel = CreateObject("Excel.Application")
                    'Ouverture d'un fichier Excel
                    wbExcel = appExcel.Workbooks.Open("\\mbn-file-001\Public\VerifScan\Fichier à importer\" + nomfichier)
                    'wsExcel correspond à la première feuille du fichier
                    wsExcel = wbExcel.Worksheets(1)
     
                    appExcel.Sheets(1).Columns("A:A").select
                    appExcel.Sheets(1).Columns("A:A").activate
                    appExcel.Sheets(1).Columns("A:A").delete
                    appExcel.Sheets(1).Columns("D:D").select
                    appExcel.Sheets(1).Columns("D:D").activate
                    appExcel.Sheets(1).Columns("D:D").delete
                    appExcel.sheets(1).rows("1:9").select
                    appExcel.sheets(1).rows("1:9").activate
                    appExcel.sheets(1).rows("1:9").delete
     
                    ListBox1.Items.Add("-----------------------------------------------------------")
                    ListBox1.Items.Add("Fichier " + nomfichier + " nettoyé")
                    Dim pos As Integer = nomfichier.LastIndexOf(".")
                    wsExcel.SaveAs("\\mbn-file-001\Public\VerifScan\Fichier à importer\" + nomfichier.Substring(0, pos) + "_nettoyé.xls")
                    ListBox1.Items.Add("-----------------------------------------------------------")
                    ListBox1.Items.Add("Fichier " + nomfichier + " sauvegardé")
                    'IO.File.Move("\\mbn-file-001\Public\VerifScan\Fichier à importer\" + nomfichier, "\\mbn-file-001\Public\VerifScan\Fichiers traités\" + nomfichier)
                    wsExcel = Nothing
                    wbExcel = Nothing
                    appExcel = Nothing
                Next

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Ta réponse se situe ICI

    ++

  3. #3
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut
    Bonjour,

    Merci pour la réponse.
    J'ai adapté mon code mais le problème reste toujours là ...

    Je vais poursuivre la suite de mon programme, si ce problème n'en pose pas d'autre je laisserai tomber
    En attendant, si quelqu'un à une autre piste je suis preneur !

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Et en ajoutant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Marshal.ReleaseComObject(wsExcel)
    Marshal.ReleaseComObject(wbExcel)
    Marshal.ReleaseComObject(appExcel)
    Il faut avant tout vérifier que chaque objet n est pas Null avant de releaser. Dans l idéal il faudrait mettre ton code dans un bloc Try... Catch... Finally.

    A+

  5. #5
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut
    J'ai trouvé ceci dans un tuto sur youtube :
    La fonction est un peu brutale dans le sens ou elle ferme tous les excel ouverts.... mais dans un sens, ça ne devrait pas poser de problème dans mon cas !
    L'exécutable tournera sur un serveur de fichier par des utilisateurs qui n'ont qu'une licence office web... donc, jamais d'excel ouvert physiquement sur leur PC client.
    Si j'ai des misère, j'essaierai ta solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Sub killProcess(ByVal processname As String)
            Dim svc As Object
            Dim sQuery As String
            Dim oproc
            svc = GetObject("winmgmts:root\cimv2")
            sQuery = " select * from win32_process where name='" & processname & "'"
            For Each oproc In svc.execquery(sQuery)
                oproc.terminate()
            Next
            svc = Nothing
        End Sub

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Je ne crois pas qu'arrêter brutalement un processus soit la meilleure solution, si tu souhaites poursuivre dans le développement il faut s affranchir de cette banale expression : Ça fonctionne donc ça me va....
    Je veux dire par là qu' il faut aller plus loin dans le raisonnement et se poser cette question : pourquoi ça ne fonctionne pas ainsi. Tu en sortiras grandit à tout les coups et je parle de la connaissance qui découlera de tes recherches et expériences.

    Ne le voit pas comme un reproche c est un simple conseil

    De plus la fonction kill process peut se résumer ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub KillProcess(ProcName as string)
    ' where Excel's ProcName is : EXCEL
       For Each ObjPro As Process In Process.GetProcessesByName(ProcName)
           ObjPro.Kill
       Next
    End Sub
    En bref, il faut creuser du côté de la libération des ressources des composants COM.

    Cdlt
    ++

Discussions similaires

  1. [VBA-E]Fermer completement Excel
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 19/05/2006, 10h24
  2. [VB6] Fermer proprement excel
    Par jean-pierre96 dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 09/05/2006, 16h17
  3. [VBA-E]Fermer classeur EXCEL parmi plusieurs
    Par flyfrog dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/04/2006, 11h54
  4. [vb6] Soucis avec une instance excel
    Par Little-Freud dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 24/04/2006, 16h08
  5. [VBA-E]Relancer une instance excel : shellexecute ?
    Par boosty dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 14/02/2006, 09h49

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