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

Access Discussion :

Commande Kill sous Access 2000


Sujet :

Access

  1. #21
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    S'ils l'ont fermé, IsOfficeRunning(app_word, True, Doc) renvoie False ...
    et a priori le fichier est libre d'être effacé.
    Citation Envoyé par p'tite Sandrine
    domi,

    actuellement je suis chez le "client" donc sous access 2000.

    cafeine,
    Malheureusement pas encore tout a fait.
    Il me reste des bug si les utilisateurs on fermer Word.

  2. #22
    Membre actif Avatar de Gary_Stoupy
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 244
    Points : 232
    Points
    232
    Par défaut
    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 ?

  3. #23
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut
    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

  4. #24
    Membre actif Avatar de Gary_Stoupy
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 244
    Points : 232
    Points
    232
    Par défaut
    moi je ferais la condition comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (chemDoss <> "") then

  5. #25
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut
    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)

  6. #26
    Membre actif Avatar de Gary_Stoupy
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 244
    Points : 232
    Points
    232
    Par défaut
    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.

    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
    essaye ca

  7. #27
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut
    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.

  8. #28
    Membre actif Avatar de Gary_Stoupy
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 244
    Points : 232
    Points
    232
    Par défaut
    je pense que c'est à cause de l'oubli des parenthèses dans ta condition... Tentes 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)) Then
            Word.Application.Quit
            End If
        if (Dir (chemDoss, vbHidden) <> "") Then
            Kill chemDoss
        end if
    End If
    PS : tu as bien copié la procédure entière isFileOpen à la suite de ton code ou dans un module ???

  9. #29
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut
    ca n'es pas les parenthèse.

    Oui j'ai mis toute la fonction dans un module.

  10. #30
    Membre actif Avatar de Gary_Stoupy
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 244
    Points : 232
    Points
    232
    Par défaut
    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é ???

  11. #31
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut
    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

  12. #32
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    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

  13. #33
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut
    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?

  14. #34
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Calculs sous Access 2000
    Par didoo6 dans le forum Access
    Réponses: 1
    Dernier message: 24/04/2006, 14h53
  2. Clauses ALTER COLUMN multiples sous Access 2000
    Par richardkiii dans le forum Access
    Réponses: 10
    Dernier message: 30/03/2006, 09h01
  3. Declaration tableau sous Access 2000
    Par Tsatogua dans le forum Access
    Réponses: 13
    Dernier message: 24/02/2006, 16h03
  4. Utilisation de formulaire sous access 2000
    Par 24 faubourg dans le forum IHM
    Réponses: 3
    Dernier message: 29/11/2005, 11h54
  5. Réponses: 1
    Dernier message: 23/11/2005, 11h06

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