Fermeture excel [Résolu]

Thomeux 58 Messages postés mercredi 15 mars 2006Date d'inscription 14 janvier 2010 Dernière intervention - 10 nov. 2006 à 11:25 - Dernière réponse : drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention
- 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 

17 réponses

Répondre au sujet
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 13 nov. 2006 à 16:35
+3
Utile
Sinon :
p = Process.GetProcessesByName(NomDuProcessus)

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






 Drikce 06
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 10 nov. 2006 à 11:28
0
Utile
Salut
Libere la mémoire avec classeurxls = Nothing

On a un deuxieme mortalinon lol!

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







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