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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Bonjour bouley, bonjour ouskel'n'or



    ou tu inverses ton code entre le if et le else et le else et le end if !!!

    la fonction FichierEstOuvert est vrai si le fichier est ouvert et non l'inverse.
    @+
    justement je désire tester un fichier pour savoir si il est ouvert et si oui on ouvre un autre donc je pense que ce que j'ai fais est correct

    Je m'explique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    If Not FichierEstOuvert("C:\Mes documents\Mensuel") Then 'test si le fichier "Mensuel" est déjà ouvert 
       Workbooks.Open ("C:\Mes documents\Mensuel2") 'si oui on ouvre le fichier Mensuel2
    Else 'sinion on ne fais rien donc l'utilisateur aura le fichier "Mensuel" 
        Exit Sub
    End If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    On error resume next 
    Workbooks(NomDuFichier).activate 
    if err <> 0 then Workbooks.Open Filename:=NomDuFichier 
    on error goto 0
    une petite explication me serai utile

  2. #2
    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
    Par défaut
    Hello, tu en as mis un temps...
    On error resume next permet de passer à l'instruction suivante en cas d'erreur.
    Là, j'essaie d'activer un classeur. Ok ?
    S'il n'est pas ouvert, j'ai une erreur - ligne suivante (activate)
    Si j'ai une erreur, je l'ouvre - Ligne suivante
    Et pour finir j'arrête la gestion d'erreur - dernière ligne
    (de façon à ce qu'une erreur non intentionnelle soit reconnue et te permette de débugger ton programme )

  3. #3
    Expert éminent


    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
    Par défaut
    pour ce qui est de l'organisation de tes if ....

    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
     
    Sub Procedure()
    If Not FichierEstOuvert("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel.xls") Then
       'Si le fichier 1 n'est pas ouvert je l'ouvre...
       Workbooks.Open ("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel")
    Else
     If Not FichierEstOuvert("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel2.xls") Then
        'Si le fichier 2 n'est pas ouvert je l'ouvre...
        Workbooks.Open ("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel2")
      Else
       If Not FichierEstOuvert("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel3.xls") Then
         'Si le fichier 3 n'est pas ouvert je l'ouvre...
          Workbooks.Open ("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel3")
       Else
        MsgBox ("tout les fichiers sont ouverts")
       End If
      End If
     End If
     
    End Sub



    [edit] Rajout des .xls manquant sur les test FichierOuvert

  4. #4
    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
    Par défaut
    Ou bien tu fais ça :

    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
    Sub OuvrirFichierFermé()
    Dim NomFich(3)
        NomFich(1) = "C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel"
        NomFich(2) = "C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel2"
        NomFich(3) = "C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel3"
        For i = 1 To 3
            CesameOuvreToi (NomFich(i))
        Next
    End Sub
     
    Sub CesameOuvreToi(NomFich)
    On Error Resume Next
        Workbooks(NomFich).Activate
        If Err <> 0 Then Workbooks.Open Filename:=NomFich
    On Error GoTo 0
    End Sub
    Maintenant, tu vas avoir la dure sélection d'un choix

    A+

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Hello, tu en as mis un temps...
    et oui le vendredi je suis en fromation et le week end je préfere le repos


    Bref
    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
    Sub OuvrirFichierFermé() 
    Dim NomFich(3) 
        NomFich(1) = "C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel" 
        NomFich(2) = "C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel2" 
        NomFich(3) = "C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel3" 
        For i = 1 To 3 
            CesameOuvreToi (NomFich(i)) 
        Next 
    End Sub 
     
    Sub CesameOuvreToi(NomFich) 
    On Error Resume Next 
        Workbooks(NomFich).Activate 
        If Err <> 0 Then Workbooks.Open Filename:=NomFich 
    On Error GoTo 0 
    End Sub
    ce code me parait plus compréhensif donc je vais me diriger par la
    mais ca ouvre les 3 fichiers si aucun est ouvert (or je souhaite que ca n'ouvre qu'un seul pas encore ouvert) et si ils sont ouverts ca les ouvre en lecture seule (or je souhaite que ca me dise tout les fichier sont ouvert réessayer plus tard )

  6. #6
    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
    Par défaut
    J'ai regardé "tout" ton problème
    Si je comprends bien ce que tu veux faire, c'est tester si le fichier que tu cherches à ouvrir est déjà utilisé par quelqu'un d'autre
    Si tu l'as déjà ouvert toi-même, c'est le même code d'erreur
    Mais tu peux afficher un message. Je remets le 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
    19
    Sub OuvrirFichierFermé()
    Dim NomFich(3)
        NomFich(1) = "C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel"
        NomFich(2) = "C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel2"
        NomFich(3) = "C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel3"
        For i = 1 To 1
            CesameOuvreToi (NomFich(i))
        Next
    End Sub
     
    Sub CesameOuvreToi(NomFich)
    Application.DisplayAlerts = False
    On Error Resume Next
        Workbooks(NomFich).Activate
        If Err = 9 Then MsgBox "Fichier utilisé par un autre utilisateur ou déjà ouvert"
        If Err = 0 Then Workbooks.Open Filename:=NomFich
    On Error GoTo 0
    Application.DisplayAlerts = True
    End Sub
    Tu n'es pas obligé de mettre la ligne
    If Err = 9 Then MsgBox "Fichier utilisé par un autre utilisateur ou déjà ouvert"
    mais ce serait mieux pour l'utilisateur

    Tu dis

    Edit
    Si tu veux être averti quand le fichier sera disponible, tu retires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.DisplayAlerts = False

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    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

  8. #8
    Expert éminent


    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
    Par défaut
    est tu as essayé le code que je tai mis (réorganisation des if) ldans la page précédene ?

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    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)

  10. #10
    Expert éminent


    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
    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...

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    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]

  12. #12
    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
    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

  13. #13
    Expert éminent


    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
    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...

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    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

  15. #15
    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
    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+

  16. #16
    Expert éminent


    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
    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é...

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