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

  1. #1
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    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
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Ta réponse se situe ICI

    ++

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

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    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
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    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 averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    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
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    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
    ++

  7. #7
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Je suis bien d'accord avec toi... et c'est ma façon de travailler au niveau de notre gros logiciel...
    Ici je fais juste un petit truc en externe qui vas tourner une fois toute les lunes.

    Quand il sera bien rodé et qu'il roulera, je regarderai pour améliorer cet aspect des choses car j'aimerais savoir finalement comment le faire.

    Je suis 100% autodidacte sans aucune formation dans la programmation... je suis sûr que si un pro voyais mes algos il dirait que c'est programmé avec les pieds

  8. #8
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Au regards des membres actifs sur cette communauté nous sommes majoritairement auto didactes (et j'en fait partie)

  9. #9
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par thovan Voir le message
    Je suis 100% autodidacte sans aucune formation dans la programmation... je suis sûr que si un pro voyais mes algos il dirait que c'est programmé avec les pieds
    Ce n'est pas un gage de non qualité. De même qu'avoir une formation pro n'est pas un gage de qualité

    Par expérience, ce qui compte le plus, ce n'est pas la formation, mais la manière dont la personne réagit et s'adapte. J'ai déjà vu des master info (bac +5 donc) être de véritables quiches et des personnes sans formation informatique très douées.

    Je préfère largement un autodidacte curieux, sachant se remettre en question et ouvert, acceptant les critiques (constructives quand même hein !) car il ira bien plus loin qu'un pro n'ayant pas ces capacités. Un autodidacte est souvent motivé et aime ce qu'il fait. Et mine de rien, ça change pas mal de choses aussi !
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  10. #10
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Je fais régulièrement des exports de mes données vers Excel (et non des manipulations de fichiers Excel, le contexte est donc différent).
    En fin de mise à jour, je libère mon classeur Excel (et non mon application Excel) en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wbExcel.SaveDocument(Chemin)
    wbExcel.Dispose()
    En espérant que cela t'aidera.

  11. #11
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Hello,

    Jamais essayé avec Dispose....
    J'avoue que ma solution barbare fonctionne plutôt bien !

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