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 :

Vérifier si un classeur est ouvert [XL-2002]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 89
    Points
    89
    Par défaut Vérifier si un classeur est ouvert
    Bonjour le forum,

    Je cherche à savoir si le classeur Excel que j'utilise pour ma macro est déjà ouvert? Si il est déjà ouvert alors je met un MsgBox et je quitte le programme.
    Comme je ne voyais pas comment faire (car il me semble qu'une fonction du style IsOpen n'existe pas), j'ai donc chercher sur le forum et j'ai trouvé le code ci-dessous, qui me semble interessant :

    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
     
    sub test()
    Dim chemin As String
    Dim cheminExcel As String
     
    chemin = "C:\Mesdocuments\"
    cheminExcel = chemin & "numeroTicket.xls"
     
        If FichierEstOuvert(chemin & cheminExcel) = True Then
            vbresult = MsgBox("Un ticket est déjà en cours de distribution, reessayez dans quelques instants !!!", vbCritical)
            GoTo fin
        End If
     
    (...)
     
    fin:
     
    end sub
     
     
    Function FichierEstOuvert(ByRef FichierTeste As String) As Boolean
        Dim Fichier As Long
        On Error GoTo Erreur
        Fichier = FreeFile
        Open FichierTeste For Input Lock Read As #Fichier
        Close #Fichier
        FichierEstOuvert = False
        Exit Function
    Erreur:
        FichierEstOuvert = True
    End Function
    Malheureusement ce code ne fonctionne pas. J'explique!

    Selon ce que je mets dans ma condition IF (True ou False). Avec True il me dit tout le temps que le fichier est déjà ouvert (même qand il ne l'est pas), avec false il me dit tout le temps que le fichier est fermé même lorsque je l'ai déjà ouvert.

    quelqu'un aurait il une idée pour résoudre ce problème?

    Merci d'avance !

  2. #2
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour Ptikir le forum tu peus faire un truc comme cela !!!

    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
    Option Explicit
    Sub Macro1()
    Dim fichier As String, x As Workbook
    fichier = "tonfichier.xls"
    On Error Resume Next
    Set x = Workbooks(fichier)
    If Err = 0 Then
    MsgBox fichier & " ouvert"
    Exit Sub
    Else
    MsgBox fichier & " fermer"
    'ton code
    End If
    On Error GoTo 0
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Salut,

    Je ne sais pas si tu peux etre confronte a ces 2 cas:
    - Tu as deja ouvert toi meme le fichier
    - Un autre utilisateur l'a ouvert

    Dans le doute une solution gerant les 2 possiblites.
    On teste d'abord si tu l'as ouvert si ce n'est pas le cas
    on l'ouvre et on teste si il est en lecture seul.
    Voila une facon de voir la chose

    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
     
    Sub Test()
        Dim wBook As Workbook
        Dim bOuvert As Boolean
     
        bOuvert = False
     
        On Error Resume Next
            Set wBook = Workbooks("TonFichier.xls")
            If Err.Number = 0 Then
                MsgBox "Fichier deja ouvert par vous."
                bOuvert = True
            End If
        On Error GoTo 0
     
        If Not bOuvert Then
            On Error Resume Next
                Application.ScreenUpdating = False
                Set wBook = Workbooks.Open("TonFichier.xls")
                If Err.Number <> 0 Then
                    MsgBox "Erreur lors de l'ouverture du fichier."
                    bOuvert = True
                Else
                    If wBook.ReadOnly Then
                        MsgBox "Fichier deja ouvert par un autre utilisateur."
                        wBook.Close SaveChanges:=False
                        bOuvert = True
                    End If
                End If
                Application.ScreenUpdating = True
            On Error GoTo 0
        End If
     
        If Not bOuvert Then
            'Le traitement
        End If
    End Sub


    ++
    Minick

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Merci à vous deux pour vos réponses.

    J'ai choisi un petit bout de code de Minick qui me suffit.

    Donc voici ce que j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set workbookExcel = oApp.workbooks.Open(Path & cheminExcel)
        If workbookExcel.ReadOnly Then
            vbresult = MsgBox("Un ticket est déjà en cours de distribution, reessayez dans quelques instants !!!", vbCritical)
            GoTo fin
        End If
    C'est exactement ce que je voulais. De plus juste en renseignant cette ligne ca me met le message d'alerte également quandle fichier est déjà ouvert chez moi.

    Au final j'ai opté pour une tout autre méthode que j'avais vu sur un forum.

    C'est decréer un fichier de lock. en fait en début d'éxecution de ma macro je regarde si un fichier de lock existe.
    Si le fichier existe je mets un message d'alerte et je ferme la macro, sinon je créé le fichier de loc et je continu mon traitement. en fin de macro je supprime le fichier. Exemple en code :

    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
     
    dim chemin as string
    dim cheminExcel as string
    dim cheminLock as string
     
    chemin = "C:\MesDocuemnts\"
    cheminExcel = chemin & "toto.xls"
    cheminLock = chemin & "toto.loc"  'on peut mettre l'extension que l'on veut
     
    if dir(cheminLock) = "" then   'si le fichier de lock n'existe pas
         copyFile cheminExcel, cheminLock
    else
         vbresult = MsgBox("Reessayez plus tard", vbcritical)
    end if
     
    (...)
     
    kill (cheminLock)

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

Discussions similaires

  1. vérifier que une form est ouverte
    Par youcef_b_dz dans le forum Delphi
    Réponses: 2
    Dernier message: 23/08/2006, 17h41
  2. Vérifier si calc windows est ouverte ou pas???
    Par electrosat03 dans le forum Contribuez
    Réponses: 4
    Dernier message: 10/03/2006, 19h28
  3. [Excel] Vérifier si un classeur est en lecture seule
    Par Rakham dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/01/2006, 08h44
  4. Vérifier qu'un formulaire est ouvert
    Par com800 dans le forum WinDev
    Réponses: 2
    Dernier message: 07/04/2005, 20h27
  5. Vérifier si une form est ouverte
    Par nivet dans le forum Langage
    Réponses: 6
    Dernier message: 23/11/2004, 09h17

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