Fermeture excel

Résolu
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
14 janvier 2010
-
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
-
Bonjour,
J'ai une appli sous visual basic express 2005 qui utilise excel.
Lorsque je ferme excel, le processus excel demeure toujours dans le gestionnaire de tache de windows. Comment fermer définitivement excel en sortant de ma fonction.
Merci d'avance


Voici mon code


Function search_values(ByVal tol As String, ByVal dia As Double, ByVal fichier As String) As ma_variable
Dim tol_cherche As String
Dim dia_cherche As Double
Dim i, j As Integer
Dim ClasseurXLS As Microsoft.Office.Interop.Excel.Application
tol_cherche = 0
dia_cherche = 0
i = 2
j = 1
ClasseurXLS = New Microsoft.Office.Interop.Excel.Application
ClasseurXLS.Workbooks.Open(Application.StartupPath & "\Tolerances.xls")
ClasseurXLS.Workbooks(1).Worksheets(fichier).Activate()
Do While Not tol_cherche = tol
i = i + 1
tol_cherche = ClasseurXLS.Cells(i, 1).Value
Loop
Do While Not dia_cherche > dia
j = j + 1
dia_cherche = ClasseurXLS.Cells(2, j).Value
Loop
search_values.sup = ClasseurXLS.Cells(i, j).value
search_values.inf = ClasseurXLS.Cells(i + 1, j).value
ClasseurXLS.Application.Quit()
End Function

17 réponses

Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Sinon :
p = Process.GetProcessesByName(NomDuProcessus)

if length(p) > 0 then Msgbox(NomDuProcessus  & " est déjà en cours d'utilisation)"






 Drikce 06
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Salut
Libere la mémoire avec classeurxls = Nothing

On a un deuxieme mortalinon lol!

 Drikce 06
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Et narmalement ClasseurXLS.Quit() suffit tu n'as pas besoin de apllication étant donné que tu déclare que c'est une application excel!

 Drikce 06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
14 janvier 2010

j'ai essayé classeurxls=nothing, mais ca ne ferme l'appli qu'en sortant du programme et pas de la fonction or si j'appelle plusieur fois la fonction, il m'ouvre plusieur processus excel.
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
    Function search_values(ByVal tol As String, ByVal dia As Double, ByVal fichier As String) As ma_variable
        Dim tol_cherche As String
        Dim dia_cherche As Double
        Dim i, j As Integer
        Dim ClasseurXLS As Microsoft.Office.Interop.Excel.Application
        tol_cherche = 0
        dia_cherche = 0
        i = 2
        j = 1
        ClasseurXLS = New Microsoft.Office.Interop.Excel.Application
        ClasseurXLS.Workbooks.Open(Application.StartupPath & "\Tolerances.xls")
        ClasseurXLS.Workbooks(1).Worksheets(fichier).Activate()
        Do While Not tol_cherche = tol
            i = i + 1
            tol_cherche = ClasseurXLS.Cells(i, 1).Value
        Loop
        Do While Not dia_cherche > dia
            j = j + 1
            dia_cherche = ClasseurXLS.Cells(2, j).Value
        Loop
        search_values.sup = ClasseurXLS.Cells(i, j).value
        search_values.inf = ClasseurXLS.Cells(i + 1, j).value
         ClasseurXLS.Quit()
        ClasseurXLS =Nothing
    End Function

Normalement avec ça tu n'as plus de problème

 Drikce 06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
14 janvier 2010

J'ai déja essayé, et ca ne fonctionne pas
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Function search_values(ByVal tol As String, ByVal dia As Double, ByVal fichier As String) As ma_variable
        Dim tol_cherche As String
        Dim dia_cherche As Double
        Dim i, j As Integer
        Dim ClasseurXLS As Microsoft.Office.Interop.Excel.Application
        tol_cherche = 0
        dia_cherche = 0
        i = 2
        j = 1
        ClasseurXLS = New Microsoft.Office.Interop.Excel.Application
        ClasseurXLS.Workbooks.Open(Application.StartupPath & "\Tolerances.xls")
        ClasseurXLS.Workbooks(1).Worksheets(fichier).Activate()
        Do While Not tol_cherche = tol
            i = i + 1
            tol_cherche = ClasseurXLS.Cells(i, 1).Value
        Loop
        Do While Not dia_cherche > dia
            j = j + 1
            dia_cherche = ClasseurXLS.Cells(2, j).Value
        Loop
        search_values.sup = ClasseurXLS.Cells(i, j).value
        search_values.inf = ClasseurXLS.Cells(i + 1, j).value
        ClasseurXLS.ActiveWorkbook.close(True)
         ClasseurXLS.Quit()
        ClasseurXLS =Nothing
    End Function

 Drikce 06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
14 janvier 2010

J'ai déja essayé, et ca ne fonctionne pas
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Avec: ClasseurXLS.ActiveWorkbook.close(True)
en plus ?







 Drikce 06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
14 janvier 2010

oui!
quand j'appelle plusieur fois la fonction, plusieur processus excel sont lancés (un par appel)
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
C'est pas normal si tu la referme l'appli dans la fonction! Dans se cas ouvre l'appli avant d'entrer dans la fonction et tu la referme apres!

 Drikce 06
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Si tu mets ce code à la fin de ta fonction cela supprimant ton tes processus excel, le seul inconvénient c'est que si tu as une application excel qui tourne en meme temps que ton prog elle sera fermé également! Mais au moins cette méthode fonctionne c'est sur! 

Dim
p()

As
Process


Dim
r

As
Processp = Process.GetProcessesByName(


"Excel"
)

'on fournit le nom du process en parametre






For



Each
r

In
p

'puis on les kill tous

r.CloseMainWindow()


r.Kill()







Next




 Drikce 06
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

voleur d'avatar !!  lol  
T'aurais pu prendre Karadoc, ça aurait été trop bon.

Sinon, en dernière ligne de ta function, met ceci :
CloseApplicationByCaption("le caption de ton document excel")

puis colle cette procédure dans le même module que ta function :

Public Sub CloseApplicationByCaption(ByVal caption As String)
   For Each p As Process In Process.GetProcesses()
      If (p.MainWindowTitle.Equals(caption)) Then
         p.Close()
      End If
   Next
End Sub

~<small>Mortalino</small>~

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
14 janvier 2010

Il doit y avoir un probleme quelque part car tout ce que vous m'avez dit ne fonctionne pas.
après je me trompe peut etre dans l'appel. Le nom du process dans mon cas c'est Excel ou ClasseurXls??
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
T'es bien en VB au moins? lol! Non je plaisante! La méthode que je t'ai donné précédement fonctionne bien! Je l'ai testé!
Dans le gestionnaire des taches excel > EXCEL; alors essaie avec les majuscules!

Dimp()
AsProcess

Dimr
AsProcess
p = Process.GetProcessesByName(

"EXCEL")
'on fournit le nom du process en parametre

For
Eachr
Inp
'puis on les kill tous r.CloseMainWindow()

r.Kill()

Next

 Drikce 06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
14 janvier 2010

Ca y est enfin ca marche.
Merci pour votre aide
sinon je me disais que pour eviter d'ouvrir plusieur excel différents, il faudrait pouvoir tester si un processus excel est dejà en cours avant d'en créer un autre!!
Vous savez comment faire ca??
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Parcours les sources, j'en ai déjà vu la dessus!
Pense réponse accepté sur les réponses qui t'ont aidé!

 Drikce 06