IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] Eliminer un processus


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    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

  2. #2
    Membre éprouvé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Par défaut
    slt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    '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...

  3. #3
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    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.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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

  5. #5
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    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!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Fermeture de Processus Word via Macro VBA Excel
    Par ted the Ors dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2009, 19h46
  2. VBA Excel _ processus bloque attachement PJ
    Par Yann29 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/01/2008, 08h29
  3. [VBA-E] Affichage de progression de processus
    Par spileo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/09/2007, 00h52
  4. [VBA][00]Processus restant en memoire !
    Par yepAccess dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/04/2007, 19h54
  5. [VBA-A]pb ouvrir processus excel
    Par JulienCEA dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/02/2006, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo