Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

Réponse
 
Outils de la discussion
Vieux 24/05/2006, 14h36   #1 (permalink)
Futur Membre du Club
 
Date d'inscription: mai 2006
Messages: 30
Par défaut [VBA-E] Eliminer un processus

Bonjour,

Mon code permet d'exporter des données d'excel (2003) vers word.
Un doc. word est alors crée.

Si je réalise une seconde fois l'opération, lorsque le doc. word crée est déjà ouvert, le processus WINWORD.exe apparait dans le gestionnaire des tâches. (si le doc word n'est pas ouvert, je ne rencontre pas de problèmes).
Après plusieures tentatives, à l'aide des informations contenues dans le forum, le problème persiste.
Voici le code en question:


Code :
Private Sub CopieDansWord_Click()
 
'###############
'# Liaison avec word  #
'###############
 
Dim appword As New Word.Application
Dim docword As New Word.document
 
On Error GoTo traiter_erreur
 
'Saisie obligatoire 
'......
'......
 
'#################
'# Copier/Coller #
'#################
 
'Ajoute un nouveau document
With appword
    .Visible = False
    Set docword = .Documents.Add
    Application.ScreenUpdating = False
    docword.PageSetup.Orientation = wdOrientLandscape 'Mise en page paysage
End With
 
'Insertion d'un pied de page
'......
'......
 
'Ajoute une ligne de titre et la met en forme
'.......
'.......
            
'Copie le tableau excel "Jours ouvrés" dans le presse-papiers
     Range("B10:H30").copy
             
'Colle le tableau dans Word avec liaison
    .EndKey Unit:=wdLine
    .TypeParagraph
    .TypeParagraph
    .PasteSpecial Link:=True, DataType:=wdpastOLEObject, _
                  Placement:=wdInLine, DisplayAsIcon:=False
    
End With
 
Application.CutCopyMode = False
 
'####################
'# Enregistrer le Doc. Word  #
'####################
 
With docword
'Enregistre le document Word dans le même dossier que le classeur excel
laDate = Format(Sheets("Jours ouvrés").Range("C8"))
    .SaveAs ThisWorkbook.Path & "\Jours ouvrés" & " " & laDate & ".doc", _
            Allowsubstitutions:=True
End With
 
With appword
appword.Application.Quit
MsgBox "Jours ouvrées " & laDate & " est disponible dans le dossier TB B...."
End With
 
'Réinitialise l'objet
Set appword = Nothing
 
traiter_erreur:
    If Err.Number = 5356 Then
        MsgBox ("Impression impossible. Le document est déjà ouvert"), _
                vbExclamation, "Opération annulée"
        Application.DisplayAlerts = False
          End If
    Application.DisplayAlerts = True 
 
End Sub
Merci d'avance

Dernière modification par AlainTech ; 24/05/2006 à 17h03 Motif: Balises [code]
fred bx est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/05/2006, 14h39   #2 (permalink)
Membre émérite
 
Avatar de Asdorve
 
Date d'inscription: mars 2004
Âge: 23
Messages: 986
Envoyer un message via MSN à Asdorve
Par défaut

slt

Code :
'Utilisé pour la lecture et la suppression de processus
Private Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwFlags As Long
    szExeFile As String * 260
End Type
 
'Déclarations d'API
Private Declare Function CreateToolhelp32Snapshot Lib "Kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function TerminateProcess Lib "Kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
 
fonction()
 
Dim Processus As PROCESSENTRY32
    Capture = CreateToolhelp32Snapshot(2, 0)
    'Capture permete de parcourir la liste des processus du système
    Processus.dwSize = Len(Processus)
 
    courant = Process32First(Capture, Processus)
    Do While courant
        If Left$(Processus.szExeFile, IIf(InStr(1, Processus.szExeFile, Chr$(0)) > 0, InStr(1, Processus.szExeFile, Chr$(0)) - 1, 0)) = "Projet1.exe" Then
            'Si "Projet1.exe" est trouvé dans les processus du système, le parcours des processus s'arrete là
            courant = False
        Else
            'Processus suivant
            courant = Process32Next(Capture, Processus)
        End If
    Loop
 
    CloseHandle Capture
 
    'Si "Projet1.exe" a été trouvé, courant=False puisqu'on a manuellement définit cette valeur pour arreter la boucle ; dans ce cas, TypeName(courant)="Boolean"
    'Si "Projet1.exe" n'a pas été trouvé, la boucle est allée jusqu'au dernier processus du système ; dans ce cas, TypeName(courant)="Long" car courant=0
 
    If TypeName(courant) = "Boolean" Then
    Identifiant = OpenProcess(1, 0, Processus.th32ProcessID)
    TerminateProcess Identifiant, 0
    CloseHandle Identifiant
    End If
 
end fonction
t'as vu, je peux faire plus long...
Asdorve est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/05/2006, 14h42   #3 (permalink)
Inactif(ve)
 
Avatar de jmfmarques
 
Date d'inscription: décembre 2005
Localisation: Plus ici.
Messages: 3 838
Par défaut

Fred, je vais probablement te décevoir (compte tenu de ce que je lis dans un sujet ouvert aujourd'hui avec le titre "question perso") !
Mais, si tu regardais dans la FAQ de ce forum, tu trouverais assez facilement comment on peut lister les processus, tuer un processus, etc...de façon encore plus simple que celle exposée ci-dessus, par ce généreux asdorve (salut à lui au passage )
Veux-tu bien, s'il te plait, commencer par là ?
Nous t'en serons tous reconnaissant ! Merci.
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/05/2006, 15h32   #4 (permalink)
Futur Membre du Club
 
Date d'inscription: mai 2006
Messages: 30
Par défaut

Désolé
Je me suis un peu précipité pour poser la question.

J'ai résolu mon problème.

Code :
traiter_erreur:
    If Err.Number = 5356 Then
        MsgBox ("Impression impossible. Le document est déjà ouvert"), vbExclamation, "Opération annulée"
        Application.DisplayAlerts = False
          End If
    Application.DisplayAlerts = True
appword.Quit False
Merci

Dernière modification par AlainTech ; 24/05/2006 à 17h04 Motif: Balises [code]
fred bx est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/05/2006, 17h02   #5 (permalink)
Modératrice
 
Avatar de zazaraignée
 
Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 066
Par défaut

Salut

Bon! Merveilleux! n'oubiles pas de cliquer sur le bouton .

Un autre truc, en passant, pour les listings de code, tu les mets entre balises code. Y'a un zouli p'tit bouton # dans la barre d'outis de l'éditeur de message.

Bonne prog!
__________________
  • Pour les nouveaux : Mode d'emploi et aide aux nouveaux
  • et impérativement les règles du forum. Histoire de garder une ambiance amicale.
  • Noubliez pas les balises de Code pour vos listings : bouton # de l'éditeur. Et n'oubliez pas non plus de bouton
  • Je ne réponds pas aux questions posées par MP.
zazaraignée est déconnecté   Envoyer un message privé Réponse avec citation
NEWS MS-OFFICEFAQs OFFICETUTORIELS OFFICELIVRES OFFICESOURCES VBA

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide