Fermeture excel

Résolu
Thomeux Messages postés 58 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 14 janvier 2010 - 10 nov. 2006 à 11:25
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 - 13 nov. 2006 à 16:35
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

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 nov. 2006 à 16:35
Sinon :
p = Process.GetProcessesByName(NomDuProcessus)

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






 Drikce 06
3
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
10 nov. 2006 à 11:28
Salut
Libere la mémoire avec classeurxls = Nothing

On a un deuxieme mortalinon lol!

 Drikce 06
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
10 nov. 2006 à 11:29
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
0
Thomeux Messages postés 58 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 14 janvier 2010
10 nov. 2006 à 11:32
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.
0

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

Posez votre question
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
10 nov. 2006 à 11:36
    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
0
Thomeux Messages postés 58 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 14 janvier 2010
10 nov. 2006 à 11:45
J'ai déja essayé, et ca ne fonctionne pas
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
10 nov. 2006 à 11:50
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
0
Thomeux Messages postés 58 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 14 janvier 2010
10 nov. 2006 à 11:58
J'ai déja essayé, et ca ne fonctionne pas
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
10 nov. 2006 à 12:01
Avec: ClasseurXLS.ActiveWorkbook.close(True)
en plus ?







 Drikce 06
0
Thomeux Messages postés 58 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 14 janvier 2010
10 nov. 2006 à 12:04
oui!
quand j'appelle plusieur fois la fonction, plusieur processus excel sont lancés (un par appel)
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
10 nov. 2006 à 13:05
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
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
10 nov. 2006 à 13:25
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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 nov. 2006 à 23:39
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>
0
Thomeux Messages postés 58 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 14 janvier 2010
13 nov. 2006 à 10:08
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??
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 nov. 2006 à 10:14
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
0
Thomeux Messages postés 58 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 14 janvier 2010
13 nov. 2006 à 16:25
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??
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 nov. 2006 à 16:29
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
0
Rejoignez-nous