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] comment tester si un fichier est déjà ouvert?


Sujet :

Macros et VBA Excel

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut
    oui mais soit il me met tous les fichier déjà ouvert soit (si j'enleve les not apres les if ) il ouvre à chaque fois Mensuel (soit en normal soit en lecture seule)

  2. #22
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par bbil
    est tu as essayé le code que je tai mis (réorganisation des if) ldans la page précédene ?
    Citation Envoyé par Nom
    oui mais soit il me met tous les fichier déjà ouvert soit (si j'enleve les not apres les if ) il ouvre à chaque fois Mensuel (soit en normal soit en lecture seule)
    oui j'ai vu il faut rajouter un ".xls" sur l'appel des fonction de test d'ouverture...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not FichierEstOuvert("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel.xls") Then
    ... j'ai édité et corrigé le code...

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut
    semble marché je vais faire des tests plus appronfondis pour voir


    un truc m'echappe quand même :
    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not FichierEstOuvert("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel1.xls") Then
    on a besoin de mettre le .xls

    et pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       'Si le fichier 1 n'est pas ouvert je l'ouvre...
       Workbooks.Open ("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel1")
    inutile : [/code]

  4. #24
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    non la il m'affiche à chaque fois le message Fichier utilisé par un autre utilisateur ou déjà ouvert pourtant rien n'est ouvert
    Vérifie parce que là tu m'étonnerais beaucoup. Cela voudrait dire que tu as toujours l'erreur 9 et donc que VBA a un pb ce que je ne crois pas.
    Donc vérifie qu'excel n'est pas ouvert une deuxième fois... sur ton propre poste
    Tu dis

    NB - Ce code fonctionne parfaitement chez moi

  5. #25
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    ben la fonction ...FichierEstOuvert essai d'ouvrir en lecture seule le fichier donné en paramétre...

    pour l'ouverture du classeur Excel ... la fonciton Workbooks.Open .. ouvre le fichier en paramétre.. mais comme celui-ci est un fichier excel... celle-ci rajoute automatiquement l'extension .xls... si aucune extension n'est précisée...

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut
    Vérifie parce que là tu m'étonnerais beaucoup. Cela voudrait dire que tu as toujours l'erreur 9 et donc que VBA a un pb ce que je ne crois pas.
    Donc vérifie qu'excel n'est pas ouvert une deuxième fois... sur ton propre poste
    Tu dis

    NB - Ce code fonctionne parfaitement chez moi
    je vais t'etonner alors car j'ai même redémarrer le pc, ouvert le fichier ou j'ai mis la macro que tu ma donner lancer la macro et pareil
    en + j'ai vonlontairement mis un mauvais chemin pour les fichiers et pareil il me dis même pas que le chemin est pas bon

  7. #27
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ta question n'était pas sur le chemin mais sur l'ouverture d'un fichier déjà ouvert. S'il y a une erreur de chemin, le code d'erreur n'est pas 9 mais 1004 et ce n'était pas la question.

    A+

  8. #28
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    salut ouskel'n'or .. est-tu sur que le dernier code que tu as posté et le bon ...

    2 Choses la boucle for ..
    c'est pas plutot 1 to 3...

    au premier lancement tu n'as aucun fichier ouvert... donc Worbooks(NomFich).Activate provoque une erreur ( ? 9) .
    Message : Fichier utilisé...

  9. #29
    Membre habitué Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 134
    Points
    134
    Par défaut
    Bonjour tout le monde

    J'ai une question par rapport à ton code Ouskel'n'or

    Citation Envoyé par ouskel'n'or
    Je pense qu'il y a un truc très simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    On error resume next
    Workbooks(NomDuFichier).activate
    if err <> 0 then Workbooks.Open Filename:=NomDuFichier
    on error goto 0
    A+

    Edit
    à la place de "<> 0" tu peux mettre le N° de l'erreur correspondant à l'activation d'un fichier qui n'est pas ouvert.
    if err = 9 then Workbooks.Open Filename:=NomDuFichier
    En fait pourquoi n'y a t il pas besoin d'un "end if" est ce a cause de la gestion d'erreur qui le rends inutile ??

    PS je savais pas ou mettre ce post dite moi s'il n'est pas a sa place..

  10. #30
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Vu que le posteur initial n'a plus daigné nous dire où en était son problème, il n'y a pas de mal à poser ta question ici.

    Réponse:
    Il ne faut pas de End If si l'action suit le Then sur la même ligne.

  11. #31
    Membre habitué Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 134
    Points
    134
    Par défaut
    Je te remercie AlainTech la réponse était toute simple et peut permettre d'aléger le code, mais peut etre perd on en lisibilité ou plutot c'est une question d'habitude.

    Encore merci et bonne continuation

  12. #32
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bien que, sans doute à cause de l'habitude, je trouve très lisible un "if ... then... LeTraitement" sur une même ligne, tu peux le mettre sur trois lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if err <> 0 then
        Workbooks.Open Filename:=NomDuFichier
    endif
    C'est pas gênant

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par AlainTech
    Vu que le posteur initial n'a plus daigné nous dire où en était son problème, il n'y a pas de mal à poser ta question ici.
    oublié de mettre délestage

    finalement ce traitement m'ai plus utile j'ai changer de "stratégie " enfin on m'a fais changer et donc un seul utilisateur à la fois sera amené a ouvrir mes fichiers ...

  14. #34
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2016
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par bouley Voir le message
    Bonjour à tous

    Donc on veut tester si en fichier est ouvert ?
    Alors voila:

    cette fonction renvoi Vrai si le fichier est ouvert et ......dans le cas contraire !

    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
    Sub Procedure
    If FichierEstOuvert("C:\Test.xls") then
       blabla
    else
       blabla
    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
    Cel ne fonctionne pas avec toutes les extentions mais c'est OK pour les XLS entre autres !

    @+

    Bonjour! Je réponds longtemps après , mais je viens de découvrir le message. En effet, ce code est super ,simple, et marche parfaitement chez moi, il suffit d'adapter pour ouvrir le fichier en question ou un autre.

    Avec mes meilleurs sentiments.

  15. #35
    Invité
    Invité(e)
    Par défaut
    Salut,

    Le code de bouley est dérivé de ce code je pense:
    https://support.microsoft.com/en-us/kb/291295
    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
    Sub TestFileOpened()
     
        ' Test to see if the file is open.
        If IsFileOpen("c:\Book2.xls") Then
            ' Display a message stating the file in use.
            MsgBox "File already in use!"
            '
            ' Add code here to handle case where file is open by another
            ' user.
            '
        Else
            ' Display a message stating the file is not in use.
            MsgBox "File not in use!"
            ' Open the file in Microsoft Excel.
            Workbooks.Open "c:\Book2.xls"
            '
            ' Add code here to handle case where file is NOT open by another
            ' user.
            '
        End If
     
    End Sub
     
    ' This function checks to see if a file is open or not. If the file is
    ' already open, it returns True. If the file is not open, it returns
    ' False. Otherwise, a run-time error occurs because there is
    ' some other problem accessing the file.
     
    Function IsFileOpen(filename As String)
        Dim filenum As Integer, errnum As Integer
     
        On Error Resume Next   ' Turn error checking off.
        filenum = FreeFile()   ' Get a free file number.
        ' Attempt to open the file and lock it.
        Open filename For Input Lock Read As #filenum
        Close filenum          ' Close the file.
        errnum = Err           ' Save the error number that occurred.
        On Error GoTo 0        ' Turn error checking back on.
     
        ' Check to see which error occurred.
        Select Case errnum
     
            ' No error occurred.
            ' File is NOT already open by another user.
            Case 0
             IsFileOpen = False
     
            ' Error number for "Permission Denied."
            ' File is already opened by another user.
            Case 70
                IsFileOpen = True
     
            ' Another error occurred.
            Case Else
                Error errnum
        End Select
     
    End Function

    @+

  16. #36
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour,

    Avez vous essayé ce code, qui vérifie à l'ouverture du fichier s'il est en lecture seule ? à mettre dans THISWORKBOOK

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_Open()
    isreadonly
    End Sub
     
    Sub isreadonly()
        If ThisWorkbook.ReadOnly Then
    MsgBox "Vous ne pouvez ouvrir actuellement ce fichier"
     
    ThisWorkbook.Close False
        End If
    End Sub

Discussions similaires

  1. Comment vérifier qu'un fichier est déjà ouvert ?
    Par n@n¤u dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 04/08/2011, 12h23
  2. Tester si un fichier est déjà ouvert par un programme tiers
    Par E@gle_One dans le forum Entrée/Sortie
    Réponses: 16
    Dernier message: 17/04/2008, 11h33
  3. tester si un fichier est déjà ouvert
    Par fredppp dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 21/05/2007, 13h29
  4. Réponses: 14
    Dernier message: 07/07/2006, 16h27

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