S'ils l'ont fermé, IsOfficeRunning(app_word, True, Doc) renvoie False ...
et a priori le fichier est libre d'être effacé.
Envoyé par p'tite Sandrine
S'ils l'ont fermé, IsOfficeRunning(app_word, True, Doc) renvoie False ...
et a priori le fichier est libre d'être effacé.
Envoyé par p'tite Sandrine
Résumons,
donc Word s'ouvre, ils complètent le courrier, ils l'enregistrent (éventuellement) et ils l'impriment
Après, toi tu veux vérifier que Word est ouvert pour le fermer et le supprimer si il existe encore c'est ca ?
Ce que je ne comprend pas c'est qu'il tente toujours d'executer ce qu'il y a après le Then même si en toute logique la valeur renvoyée devrait être false.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 If Not IsNull(chemDoss) Then Doc = chemDoss.Value If IsFileOpen(Doc) = True Then Word.Application.Quit End If Kill Doc End If
moi je ferais la condition comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (chemDoss <> "") then
en réalité il enregistre certaine données tel que l'objet du courrier dans la base, ...
il clic sur créer le courrier.
- créer un nouveau courrier et y insère les données dans des signets.
- ouvre la boite de dialogue EnregistrerSous qui enregistre le document a l'emplacement spécifié et rejette le chemin complet vers [chemDoss]
- le bouton valider devient actif.
Si il le désire il complête le courrier.
Mais ils ont toujours le choix d'annuler le courrier.
Donc si chemDoss contient une valeur c'est qu'il a créer un courrier donc il doit le supprimer.
Ce qui marche avec ton code Sauf si il a fermer Word.
J'espère que ca t'aidera a éclaircir ce que j'essaye de faire. (bref une base pour les indécis qui créer et puis qui change d'avis)
S'il il a fermé Word, le fichier est tout de même sauvegardé donc normalement la suppression devrait pas posé de problème...
Maintenant, il faut vérifier que word est ouvert avant de supprimer.
essaye ca
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 If Not IsNull(chemDoss) Then If IsFileOpen(chemDoss.Value) = True Then Word.Application.Quit End If if (Dir (chemDoss, vbHidden) <> "") Then Kill chemDoss end if End If
pardon escuse moi.
je crois que j'ai sauté une info importante.
Ici le bug porte sur le fait que même si word est fermé il tente quand même de le fermé.
Mais ne le trouve pas "evidemment"...
Donc ce que je ne comprend pas c'est pourquoi il effectue le code après le Then puisqu'en toute logique si word est éteind la valeur de IsFileOpen devrait renvoyer False.
je pense que c'est à cause de l'oubli des parenthèses dans ta condition... Tentes ca :
PS : tu as bien copié la procédure entière isFileOpen à la suite de ton code ou dans un module ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 If Not IsNull(chemDoss) Then If (IsFileOpen(chemDoss.Value)) Then Word.Application.Quit End If if (Dir (chemDoss, vbHidden) <> "") Then Kill chemDoss end if End If
ca n'es pas les parenthèse.
Oui j'ai mis toute la fonction dans un module.
vu que ca a planté plusieurs fois, ta déjà vérifié dans le gestionnaire des taches de windows qu'il n'y avait pas plusieurs processus Word de lancé ???
J'ai peut etre bien trouver une partie de l'erreur.
dans n'importe quel cas la fonction IsFileOpen me renvois toujours Vrai.
du coup ca passe a éteindre word qui si il est éteind bug.
mais comment corriger ca ?
non un seul word. le doc en cours actuellement pour le test msgbox
Ok, voici un nouveau patch de la fonction pour qu'elle ne renvoie True que si le fichier est ouvert :
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102 Option Compare Database Option Explicit 'Fonction de Raymond Seneque - OfficeSystem.Access 'http://officesystem.access.free.fr/apiisofficerunning.htm 'La fonction IsOfficeRunning permet de connaître si une application Microsoft Office 'spécifique est actuellement chargée et éventuellement de l'activer si elle est chargée. 'Si L 'application est chargée la valeur retournée sera True sinon la valeur retournée 'sera False. 'Exemple d'appel de la fonction 'If IsOfficeRunning(App_Excel, True) Then 'MsgBox "Excel est chargé" 'Else 'MsgBox "Excel n'est pas chargé" 'End If Enum ApplicationName App_access App_Excel App_Word App_PowerPoint2000 App_PowerPoint2002 App_PowerPoint2003 App_FrontPage App_InfoPath App_Outlook App_publisher App_visio End Enum Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal strClass As String, _ ByVal lpWindow As String) As Long Private Declare Function SendMessage Lib "user32" Alias _ "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal _ wParam As Long, lParam As Long) As Long Private Declare Function SetForegroundWindow Lib "user32" _ (ByVal hWnd As Long) As Long Private Declare Function ShowWindow Lib "user32" _ (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long Private Declare Function IsIconic Lib "user32" ( _ ByVal hWnd As Long) As Long Function IsOfficeRunning( _ Optional ByVal ApplicationName As ApplicationName = App_access, _ Optional ActivateApp As Boolean = False, _ Optional docName As String = "") As Boolean Dim oWordApp As Object Dim i As Long IsOfficeRunning = False On Error GoTo IsOfficeRunning_Exit Dim hWnd As Long Dim ClassName As String Dim Minimized As Long IsOfficeRunning = False Select Case ApplicationName Case App_Excel: ClassName = "XLMain" Case App_Word: ClassName = "OpusApp" Case App_access: ClassName = "OMain" Case App_PowerPoint2000: ClassName = "PP9FrameClass" Case App_PowerPoint2002: ClassName = "PP10FrameClass" Case App_PowerPoint2003: ClassName = "PP11FrameClass" Case App_FrontPage: ClassName = "FrontpageExplorerWindow40" Case App_InfoPath: ClassName = "framework::CFrame" Case App_Outlook: ClassName = "RCtrl_RenWnd32" Case App_publisher: ClassName = "mswinpub" Case App_visio: ClassName = "VisioA" Case Else: GoTo IsOfficeRunning_Exit End Select hWnd = FindWindow(ClassName, vbNullString) If hWnd <> 0 Then SendMessage hWnd, 1042, 0, 0 Minimized = IsIconic(hWnd) If Minimized <> 0 Then ShowWindow hWnd, 1 End If If ActivateApp Then SetForegroundWindow (hWnd) End If IsOfficeRunning = True End If ' patch lecture des documents word ' par cafeine le 22/02/07 If ApplicationName = App_Word And IsOfficeRunning Then IsOfficeRunning = False Set oWordApp = GetObject(, "Word.Application") For i = 1 To oWordApp.Documents.Count If oWordApp.Documents(i).FullName = docName Then IsOfficeRunning = True oWordApp.Documents(i).Close False End If Next i Set oWordApp = Nothing End If IsOfficeRunning_Exit: End Function
Alors ca fonctionne que si j'enregistre sous le nom d'un document qui existe déjà.
sinon il m'affiche le document en premier plan mais ne le ferme pas.
bon journée finie je recommence a me prendre la tête la dessus dès demain matin.
Bonjour a tous,
Hé bien voilà on y est presque j'ai trouver pourquoi ca fonctionne pas toujours.
En réalité, c'est au moment de la sauvegarde de mon document que ca coince.
Si je créer un tout nouveau document il ne me retourne pas l'extension .doc dans chemDoss et de ce fait il arrive ni a fermer le document ni a me le killer.
Par contre si j'écrase un document précedant, ou attache un document existant (avec le bouton que je me suis réservé pour introduire les courriers écris depuis le debut de l'année) il retourne l'extension.
Mais je sais pas si c'est dût à une configuration du pc ou à la commande.
si c'est la commande, a mon avis avec un Dir si existe pas encore et une concaténation de .doc ca devrait marcher.
Mais si c'est la configuration comme ca risque de changer sur chaque pc comment demander a access d'identifier si ChemDoss se termine bien par .doc?
Merci a tous.
j'y suis arrivé.
tout fonctionne a la perfection me semble t'il.
C'était effectivement juste un problème de retour de .doc.
Je vous souhaite a tous un bon week end.
A bientot
La ch'tite Sandrine.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager