Probleme avec For !

hamster man Messages postés 103 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 21 juin 2007 - 21 juin 2007 à 14:22
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 22 juin 2007 à 08:28
Bonjour à tous,

voila mon souci:

je fais un programme ki detecte si excel est ouvert, le but de cette manoeuvre est de ne pas copier un fichier excel si excel est ouvert.

je voudrais copier le fichier que lorsque dans la liste des processus, il n'y a pas "EXCEL.EXE" de detecter..

voici mon code (une partie du moins) :

Private Sub Processus_timer()
Dim xObj
Dim Processus
Set xObj = GetObject("winmgmts:").InstancesOf("Win32_Process")


For Each Processus In xObj
    If Processus.Name = "EXCEL.EXE" Then Exit For
Next Processus
   
Processus.Enabled = False
End Sub

quelqu'un aurait un moyen car je ne sais pas trop comment m'en sortir....je pense qu'il faudrait une boucle dans une autre mais j'en suis pas sur!

merci d'avance

10 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
21 juin 2007 à 14:38
ton code utilise WMI

tu pourrais faire ceci :

Private Function IsExcelLaunched() As Boolean
Dim Processus As Object
   For Each Processus In GetObject("winmgmts:").InstancesOf("Win32_Process")
       If StrComp(Processus.Name, "EXCEL.EXE", vbTextCompare) = 0 Then
           IsExcelLaunched = True
           Exit Function
       End If
   Next Processus
End Function , ----
By Renfield

Maintenant, y'a une particularité...
Excel est un serveur ActiveX inscrit dans la ROT (Running Objects Table).... tu peux donc faire :

Private Function IsExcelLaunched() As Boolean
   On Error Resume Next
   Interaction.GetObject , "Excel.Application"   IsExcelLaunched (Err 0)
   On Error GoTo 0
End Function , ----
By Renfield

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
hamster man Messages postés 103 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 21 juin 2007
21 juin 2007 à 14:45
Merci beaucoup vraiment mais je ne vois pas comment je pourrais inserer la condition du copierFichier dans le code que tu m'as donné?

Private Function IsExcelLaunched() As Boolean
   On Error Resume Next
   Interaction.GetObject , "Excel.Application"   IsExcelLaunched (Err 0)
   On Error GoTo 0
End Function

?

Desole mais je suis pas tres bon en vb
merci
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
21 juin 2007 à 14:50
laisse ce code dans ta Form,
et fais dans ton code...

If IsExcelLaunched Then
      MsgBox  "Femes Excel te dis-je !  je dois copier des fichiers !!!"
Else
      FileCopy ........;
End If

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
hamster man Messages postés 103 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 21 juin 2007
21 juin 2007 à 14:58
je vais essayer merci
je te tiens au courant
0

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

Posez votre question
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
21 juin 2007 à 15:08
Pour fair jouejou avec les process tu as d'autre options, comme cette classe que j'ai utilisé ds mon gestionnaire de process(cf mes srce sur le site)

Imports System.Runtime.InteropServices
Imports System.Text

Public Class Windows

    '<DllImport("user32")> _
    Public Shared Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, ByRef lpdwProcessId As Long) As Long
    End Function

    '<DllImport("user32", CharSet:=CharSet.Ansi)> _
    Public Shared Function GetClassName(ByVal hWnd As IntPtr, ByVal text As String, ByVal cch As Integer) As Integer
    End Function

    '<DllImport("user32", CharSet:=CharSet.Ansi)> _
    Public Shared Function GetWindowText(ByVal hWnd As IntPtr, ByVal text As String, ByVal cch As Integer) As Integer
    End Function

    Delegate Function EnumWindowsProc(ByVal hWnd As IntPtr, ByVal lParam As Integer) As Boolean
    Delegate Function EnumChildWindowsProc(ByVal Hwnd As IntPtr, ByVal lParam As Integer) As Boolean

    '<DllImport("user32")> _
    Public Shared Function EnumWindows(ByVal lpEnumFunc As EnumWindowsProc, ByVal lParam As Long) As Long
    End Function

    '<DllImport("user32")> _
    Public Shared Function EnumChildWindows(ByVal hWndParent As IntPtr, ByVal lpEnumFunc As EnumChildWindowsProc, ByVal lParam As Long) As Long
    End Function

End Class
0
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
21 juin 2007 à 15:10
Mais bon si tu est sur du .Net, autant utilisé le Framework :

    Dim Proc As System.Diagnostics.Process
    Dim ProcThread As System.Diagnostics.ProcessThread
    Dim mdl As System.Diagnostics.ProcessModule
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
21 juin 2007 à 15:15
personne n'a parlé de .Net ici ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
21 juin 2007 à 16:03
C'est vrai Renfield, ni d'ailleur de VB6 ou VBa c'est pourquoi je pense avoir utilisé le conditionnel "SI" .......^^
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
21 juin 2007 à 16:12
au pire, l'info est là, maintenant.

pour le langage, tu as le theme :

Vous êtes ici :
Thèmes / Visual Basic 6 /

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
22 juin 2007 à 08:28
beh ça mérite "acceptation" de la réponse ^^

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0