[Catégorie modifiée VB6 --> Net] Processus conime.exe (Console IME) ne se ferme

Résolu
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011 - 17 juin 2010 à 19:03
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 - 18 juin 2010 à 14:34
Bonjour à tous!

J'espère que quelqu'un pourra m'aider sur ce problème:

Je fais tourner VB 2008 (avec visual studio) en travaillant sur des fichiers de sorties et d'entrées Excel.
Je kill le processus excel a chaqque fin de bouclage du programme.
Il peut m'arriver de faire tourner ce programme plusieurs dizaines de fois par jour pour le faire évoluer.

Seulement je pense que le processus conim.exe qui doit faire partie de visual studio ne se ferme pas.

Il mange seulement 56k en mémoire mais j'en ai plein en même temps suite à mes nombreuses simulations.

Je me demande donc si cela peut nuire à ma vitesse d'execution et si il est dangeureux de le fermer à la bourrin (terminer processus). si quelqu'un sait comment le fermer proprement ça sera encore mieux.

Merci pour vos réponses!

Et bonne chance à la France ce soir!!


Alex

10 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
18 juin 2010 à 13:21
Dans "Premierelignevide" tu ne ferme rien c'est normale ?



Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
18 juin 2010 à 13:55
Re,

Je suis désolé mais j'essaye de comprendre ton code et c'est un vrais cafouillis, variables inutilisés de partout, fichiers ouverts et fermés un peu n'importe comment, j'ai bien du mal à en comprendre le fonctionnement, cependent j'ai réussi à pondre ceci :

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '
        Dim appExcel As New Excel.Application
        '
        Dim i As Integer, j As Integer
        '
        Dim Resultat As String = "C:\Users\Alexandre\Desktop\Micro vb\resultats.xls"
        Dim donneesExcel As String = "C:\Users\Alexandre\Desktop\Micro vb\donnees.xls"
        Dim mortaliteExcel As String = "C:\Users\Alexandre\Desktop\Micro vb\Tauxmortalité.xls"
        '
        Dim donneesWB As Excel.Workbook = appExcel.Workbooks.Open(donneesExcel)
        Dim mortaliteWB As Excel.Workbook = appExcel.Workbooks.Open(mortaliteExcel)
        '
        Dim d As Integer = CInt(TextBox3.Text)
        '
        For i = 1 To d
            '
            Dim Premierelignevide As Integer = donneesWB.Worksheets("Feuil1").Columns(1).find("").row
            '
            For j = 2 To Premierelignevide - 1
                '
                Dim age As Integer = donneesWB.ActiveSheet.Cells(j, 3).Value
                Dim sexe As String = CStr(donneesWB.ActiveSheet.Cells(j, 2).Value)
                Dim agereel As Double = donneesWB.ActiveSheet.Cells(j, 2).Value

                If sexe = "F" Then
                    Randomize()
                    If Rnd() < mortaliteWB.ActiveSheet.Cells(age + 3, 5).Value + 0.25 Then
                        donneesWB.ActiveSheet.Cells(j, 2).Value = agereel + 1
                        donneesWB.ActiveSheet.Rows(j + 1).delete()
                    Else
                        donneesWB.ActiveSheet.Cells(j, 2).Value = agereel + 1
                    End If
                Else
                    Randomize()
                    If Rnd() < mortaliteWB.ActiveSheet.Cells(age + 3, 4).Value + 0.25 Then
                        donneesWB.ActiveSheet.Cells(j, 2).Value = agereel + 1
                        donneesWB.ActiveSheet.Rows(j + 1).delete()
                    Else
                        donneesWB.ActiveSheet.Cells(j, 2).Value = agereel + 1
                    End If
                End If
            Next j
            '
        Next i
        '
        donneesWB.SaveAs(Resultat)
        donneesWB.Close()
        mortaliteWB.Close()
        '       
        appExcel.Quit()
        '
    End Sub


Mais je ne suis pas vraiment sur que c'est ce que tu veux faire... si tu rencontre des soucis, précise le but de ton code et le contenu de tes fichiers excel (colonnes, lignes).

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
17 juin 2010 à 22:34
Salut,

Je fais tourner VB 2008 (avec visual studio) en travaillant sur des fichiers de sorties et d'entrées Excel.


C'est pas très claire, c'est à dire ? Tu midifie des fichier ? Tu les ouvres, les modifies les enregistre et ferme ?

Je kill le processus excel a chaqque fin de bouclage du programme.


C'est à mon avis de la que viens le problème. Quelle code utilises-tu pour manipuler excel ? Et pourquoi as-tu besoin de killer au lieu de fermer simplement ?


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011
17 juin 2010 à 22:46
Tout d'abord merci de te pencher sur mon petit souci!

En fait j'ai un fichier de données sous Excel, je l'enregistre sous un autre nom (par exemple resultats1.xls).

Puis ce resultats1.xls je le modifie, l'enregistre sous un autre nom et donc je conserve resultats1.xls et j'obtiens un resultats2.xls.

Je fais comme cela jusqu'à quelques dizaines de fois.

J'obtiens donc resultats1, resultats2,...resultats30.

Je kill Excel car je n'ai jamais réussi à fermer le processus même en fermant les fichiers (le processus restait actif).

J'espère que mon explication est compréhensible.

Pour manipuler au début Excel j'utilise (extrait):

Monfichier = "C:\Users\Alexandre\Desktop\Micro vb\resultats.xls"
appExcel = CreateObject("Excel.application")
donneesExcel = appExcel.Workbooks.open("C:\Users\Alexandre\Desktop\Micro vb\donnees.xls")
mortaliteExcel = appExcel.Workbooks.Open("C:\Users\Alexandre\Desktop\Micro vb\Tauxmortalité.xls")
mortalitesheetExcel = mortaliteExcel.ActiveSheet
ws1Excel = donneesExcel.ActiveSheet

Merci par avance!

Alex
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
18 juin 2010 à 00:20
En .Net il est préférable d'utiliser l'Interop Office

Ajoute la référece Microsoft.Office.Interop.Excel dans les références de ton projet puis importe l'espace de noms dans ton formulaire comme ceci :

Imports Microsoft.Office.Interop


Pour pouvoir utiliser l'exemple de code suivant :

'Création d'une instance d'application
Dim ExcelApp As New Excel.Application

'Chemin des classeurs excel
Dim xlsSource As String = "C:\Users\Alexandre\Desktop\Micro vb\resultats.xls"

Dim xlsCible As String = "C:\Users\Alexandre\Desktop\Micro vb\resultats2.xls"""

'Ouverture du classeur dans l'application
 Dim MyWorkbook = ExcelApp.Workbooks.Open(xlsSource)

'Ici tu peux modifier ton classeur
'Comme tu utilise l'Interop, ton objet MyWorkbook bénéficie de l'intellisense
'et tu peux donc voir toutes les méthodes et propriétés de celui-ci

'Enregistre le classeur sous un autre fichier
MyWorkbook.SaveAs(xlsCible)

'Ferme "proprement" le classeur
MyWorkbook.Close()

'Ferme "proprement" le processus de l'application
ExcelApp.Quit()


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011
18 juin 2010 à 11:40
Merci Mayzz!

J'ai modifié tout mon code pour me calquer sur ton exemple et cela fonctionne, excépté la fermeture du processus Excel (je n'applique pas mon kill("excel"))

Je pense que c'est dû à mon code qui est foireux mais je ne vois pas comment passer!

Si cela ne dérange pas je le met au cas ou quelqu'un pourrait m'éclairer:

Imports Microsoft.Office.Interop
Imports System.MissingMemberException



Public Class Form1
    'Cette fonction permet de killer le processus Excel car processus reste ouvert même avec .close()'
    Sub killprocessus(ByVal Nomprocessus As String)
        Dim p() As Process
        Dim r As Process
        p = Process.GetProcessesByName(Nomprocessus)
        For Each r In p
            r.CloseMainWindow()
            r.Kill()
        Next
    End Sub
    Public Function Premierelignevide(ByVal Colonne As Integer) As Integer
        'Compte le nombre de fois que doit boucler le programme (sur le nombre de personne pour éviter les messages d'erreurs d'attribution de valeur nulle (notemment pour l'âge'
        Dim appExcel As New Excel.Application
        Dim i As Integer
        Dim projExcel As String = "C:\Users\Alexandre\Desktop\Micro vb\resultats" & i & ".xls"
        Dim Myworkbook = appExcel.Workbooks.Open(projExcel)
        Premierelignevide = appExcel.ActiveWorkbook.Worksheets("Feuil1").Columns(Colonne).find("").row

    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim appExcel As New Excel.Application
        Dim donneesExcel As String
        Dim Monfichier, MonfichierExcel As Object
        Dim mortaliteExcel As Object
        Dim d As Integer
        Dim i, j As Integer
        Dim age As Integer
        Dim sexe As String
        Dim agereel As Double


        Monfichier = "C:\Users\Alexandre\Desktop\Micro vb\resultats.xls"

        donneesExcel = "C:\Users\Alexandre\Desktop\Micro vb\donnees.xls"
        mortaliteExcel = "C:\Users\Alexandre\Desktop\Micro vb\Tauxmortalité.xls"
        Dim myworkbook = appExcel.Workbooks.Open(donneesExcel)

        d = TextBox3.Text

        myworkbook.saveas("C:\Users\Alexandre\Desktop\Micro vb\resultats" & 0 & ".xls")
        myworkbook.close()
        MonfichierExcel = appExcel.Workbooks.Open("C:\Users\Alexandre\Desktop\Micro vb\resultats" & i & ".xls")
        mortaliteExcel = appExcel.Workbooks.Open("C:\Users\Alexandre\Desktop\Micro vb\Tauxmortalité")
        For i = 1 To d
            
            'La propriété Cells(n°ligne,n°colonne) permet de sélectionner une seule cellule

            For j = 2 To Premierelignevide(1) - 1

                sexe = MonfichierExcel.activesheet.Cells(j, 3).Value
                age = Int(MonfichierExcel.activesheet.Cells(j, 2).Value)
                agereel = MonfichierExcel.activesheet.Cells(j, 2).Value

                If sexe = "F" Then
                    Randomize()
                    If Rnd() < mortaliteExcel.Activesheet.Cells(age + 3, 5).Value + 0.25 Then
                        MonfichierExcel.activesheet.Cells(j, 2).Value = agereel + 1
                        MonfichierExcel.activesheet.Rows(j + 1).delete()
                    Else : MonfichierExcel.activesheet.Cells(j, 2).Value = agereel + 1

                    End If
                Else
                    Randomize()
                    If Rnd() < mortaliteExcel.Activesheet.Cells(age + 3, 4).Value + 0.25 Then
                        MonfichierExcel.activesheet.Cells(j, 2).Value = agereel + 1
                        MonfichierExcel.activesheet.Rows(j + 1).delete()
                    Else : MonfichierExcel.activesheet.Cells(j, 2).Value = agereel + 1

                    End If

                End If
            Next j
            MonfichierExcel.saveas("C:\Users\Alexandre\Desktop\Micro vb\resultats" & i & ".xls")

        Next i

        mortaliteExcel.close()
        MonfichierExcel.close()
        appExcel.Quit()


    End Sub



Alex
0
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011
18 juin 2010 à 13:25
J'ai essayé de fermer en fin de premierelignevide mais à la fin du programme cela m'ouvre Excel et le fait bugger et il doit fermer...

Alex
0
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011
18 juin 2010 à 13:34
En fait je ferme (et maintenant correctement à la fin de premierelignevide, et il ne me reste qu'un processus Excel ouvert à la fin du programme quelque soit le nombre d'itérations (avant nbre processus Excel ouverts=nombre d'itérations)

Merci à toi Mayzz, cela résoud en grande partie le problème; il ne me reste plusn qu'à trouver le fichier toujours en exploitation.

Peut on le situer via le processus?

Merci encore


Alex
0
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011
18 juin 2010 à 14:28
Encore une fois la réponse est de qualité sur vbFrance!

Même si ton programme ne faisait pas ce que je voulais je l'ai adapté: supprimer les variables inutiles et effacer les deux sub qui ne servait à rien (kill et premierelignevide)!

Mon code ne prend plus que quelques lignes!

De plus lorsque je quitte form1, tous les processus Excel se ferme et pas de conime.exe!


Un grand merci à toi Mayzz!

Pour infos, cela fait une semaine que je code en VB donc il est vrai que c'est un peu brouillon (je n'ai jamais codé de ma vie, enfin un chouilla histoire de faire bonne figure en cours ><, et encore!) mais je m'améliore de plus en plus gràce à vous!


Encore Merci



Alex
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
18 juin 2010 à 14:34
C'est bien pour cela que l'on répond et que l'on critique pour faire avancer les gens, c'est vrai que c'est important la propreté du code, pour toi et pour ceux qui viendrons par la suite modifier ton application (éventuellement).

Bon apprentissage alors ! @+

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Rejoignez-nous