Fermeture excel [Résolu]

Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Dernière intervention
14 janvier 2010
- - Dernière réponse : drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
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
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
3
Merci
Sinon :
p = Process.GetProcessesByName(NomDuProcessus)

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






 Drikce 06

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
Salut
Libere la mémoire avec classeurxls = Nothing

On a un deuxieme mortalinon lol!

 Drikce 06
Commenter la réponse de drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
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
Commenter la réponse de drikce06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Dernière intervention
14 janvier 2010
0
Merci
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.
Commenter la réponse de Thomeux
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
    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
Commenter la réponse de drikce06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Dernière intervention
14 janvier 2010
0
Merci
J'ai déja essayé, et ca ne fonctionne pas
Commenter la réponse de Thomeux
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
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
Commenter la réponse de drikce06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Dernière intervention
14 janvier 2010
0
Merci
J'ai déja essayé, et ca ne fonctionne pas
Commenter la réponse de Thomeux
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
Avec: ClasseurXLS.ActiveWorkbook.close(True)
en plus ?







 Drikce 06
Commenter la réponse de drikce06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Dernière intervention
14 janvier 2010
0
Merci
oui!
quand j'appelle plusieur fois la fonction, plusieur processus excel sont lancés (un par appel)
Commenter la réponse de Thomeux
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
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
Commenter la réponse de drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
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
Commenter la réponse de drikce06
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
17
0
Merci
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>
Commenter la réponse de mortalino
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Dernière intervention
14 janvier 2010
0
Merci
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??
Commenter la réponse de Thomeux
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
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
Commenter la réponse de drikce06
Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Dernière intervention
14 janvier 2010
0
Merci
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??
Commenter la réponse de Thomeux
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
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
Commenter la réponse de drikce06

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.