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-EXCEL- TEST si fichier ouvert


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut VBA-EXCEL- TEST si fichier ouvert
    salut a tous les gars.

    jais un pb trés simple(encore une fois).
    je veux tester si un fichier est ouvert ou pas.

    mon code ouvre directement ce fichier à la base mais parfois lorsqu'il est deja ouvert, me pose une errer du type qu'il ya un fichier deja ouvert a ce nom.
    donc jai commencé à réfléchir à un test qui fait:
    si fichier nommé "aaaa.xls" est ouvert on continue
    sinon on ouvre ce meme fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Dim WB As Workbook
        For Each WB In Workbooks
        If WB.name = "aaaa.xls" Then
        Exit For
        Else
        Workbooks.Open Filename:=A & N, UpdateLinks:=0, ReadOnly:=True
         Exit For
        End If
    Next WB
    A et N sont des variables string que j'ai prédéfini au préalable pour indiquer le chemin du fichier et le nom aaaa du fichier xls.

    mais ca pas lair de marcher.
    il me l'ouvre a chaque fois en ecrasant l'ouvert....
    jy suis pas loin alors merci de votre aide. bonne soirée

  2. #2
    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 038
    Points
    20 038
    Par défaut
    c'est le moment d'apprendre à ce servir de Debug.print..., cette instruction permet d'ecrire un message dans fenêtre exécution ( CTRL G..)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     For Each WB In Workbooks
       Debug.print "Test Classeur :[" & WB.Name & "]"
        If WB.name = "aaaa.xls" Then
    ainsi tu pourra voir si le classeur aaaa apparaît dans la liste des classeurs ouvert..

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    je ne veux pas faire aparaitre un msgbox.
    je veux que ce soit dans le procédure.ctou

  4. #4
    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
    Dis, tu veux bien écouter ce qu'on te dit?

    bbil n'a, nulle part, fait mention d'un MsgBox.

    Et quand bien même, le but c'est que tu voies si ton nom de fichier est correct.
    Quand tout fonctionne bien, tu supprimes tout ce qui sert au débuggage.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Une autre méthode pour voir si un classeur est déjà ouvert, est de tester une propriété relative au classeur. Par exemple le nom de ce classeur. Il faut intercepter l'erreur dans le cas où le classeur n'est pas ouvert. Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function ClasseurOuvert(NomClasseur As String) As Boolean
        On Error Resume Next
     
        ClasseurOuvert = Application.Workbooks(NomClasseur).Name <> vbNullString
    End Function
    La fonction ClasseurOuvert renvoie True si le classeur est ouvert, False dans le cas contraire.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    et comment utiliser cette fonction dans un code?
    et cette fonction peut elle tester un fichier qui est dans un autre classeur?
    (on se suit a ce que je vois...)

  7. #7
    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
    Bon... (Grande respiration)

    Je m'énerve ou je me calme?

    Si je m'énerve, je ferme cette discussion.

    Par contre, même si je me calme, je ne m'empêcherai pas de dire que...

    Le forum ne remplace pas les cours et tutos!
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    et pourtant je ne trouve pas tout ce que jessai marche que pour des fichier dans un meme classeur
    désolé. j

  9. #9
    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
    Un classeur est un fichier!!!
    Il est plus que temps que tu essaies d'avoir un peu plus de rigueur quand tu t'exprimes!

    Dis-nous ce que tu cherches à faire précisément en essayant d'utiliser les termes corrects.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    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
    Il est impossible de programmer sans avoir de rigueur!
    Workbook n'est pas worbook, Sheets n'est pas Sheet, etc.

    Autrement dit, si on n'est pas capable d'utiliser les bons termes pour exprimer ce que l'on veut, on n'y arrivera pas et il faut s'orienter vers une autre activité!
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    ok.
    jai une macro placé dans un fichier excel.cette macro teste si un fichier particulier est ouvert ou pas si test montre que le fichier est férmé...ca continue.sinon elle l'ouvre.

    mais si notre fichier excel est ouvert dans une autre application excel que celle qui abrite notre fichier contenant notre macro, le test ne voit notre fichier meme si il est ouvert...

  12. #12
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Dans ce cas, tu peux utiliser la méthode GetObject pour tester son existence. Mais, il faut connaitre le chemin complet du fichier et pas seulement son nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function ClasseurOuvert(CheminClasseur As String) As Boolean
        On Error Resume Next
     
        ClasseurOuvert = GetObject(CheminClasseur).Name <> vbNullString
    End Function
    Comment l'utiliser? Ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub Main()
        Dim B As Workbook
     
        Set B = GetObject("E:\Mon fichier.xls")
     
        MsgBox B.Name
    End Sub
    Ps : le teste d'existence n'est plus nécessaire, tu peux le gérer directement dans la fonction Main en utilisant la gestion des exception (On Error...).

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    ton idée est trés efficace. mais ya un hic.

    mon test ne doit conserner que mon ordinateur pas ceux connéctés au lecteurs reseaux qui abritent mon fichier.
    en effet. si un autre utilisateur a ouvert en lecture seule le fichier excel en question le test ressort positif. et ce qui est encore plus bizare c'est jai accées a visual vasic editor de ce fichier(dangereux! non?)
    bref...moi ce que je veux c'est que le test s'applique qu'a mon ordinateur...

    jai essayé toutes les idées...rien.
    l'idée de bbil est trés bonne aussi .mais comme je l'ai dit, lr test ne fonctionne pas si mon fichier excel est ouvert sur une autre application excel que celle qui abrite mon fichier contenant mon fichier excel de la macro.
    merci.
    je continue a chercher...

  14. #14
    Membre habitué Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 198
    Points
    198
    Par défaut
    Je viens de te coder ça dis moi ça répond à tes attentes...

    En plus comme je suis gentil j'ai envisagé deux cas.
    Le premier cas est le plus réducteur, il suppose que tu connaisses le chemin complet de ton fichier :

    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
    Sub Tester_StatutFichier1()
     
        Application.ScreenUpdating = False
     
        Dim stCheminFichier As String, stFichier As String
        Dim boFichierExiste As Boolean
        Dim wbClasseurActif As Workbook
     
        Set wbClasseurActif = ActiveWorkbook
     
        stCheminFichier = "C:\Documents and Settings\New\Bureau\compte.xls"
        stFichier = Right(stCheminFichier, Len(stCheminFichier) - InStrRev(stCheminFichier, "\"))
     
        If OuvertureFichier(stFichier) = True Then
            MsgBox "Votre fichier est déjà ouvert !", vbExclamation
            Exit Sub
        Else
            If ExistenceFichier1(stCheminFichier) = True Then boFichierExiste = True
        End If
     
        If boFichierExiste = True Then
            Workbooks.Open Filename:=stCheminFichier
            MsgBox "Votre fichier existe et vient d'être ouvert", vbInformation
        ElseIf boFichierExiste = False Then
            MsgBox "Le fichier que vous demandez n'existe pas!", vbCritical
        End If
     
        wbClasseurActif.Activate
     
        Application.ScreenUpdating = True
     
    End Sub
    Function ExistenceFichier1(CheminFichier As String) As Boolean
     
        If Dir(CheminFichier) <> "" Then ExistenceFichier1 = True
     
    End Function
    Function OuvertureFichier(NomFichier As String) As Boolean
     
        Dim WB As Workbook
     
        For Each WB In Workbooks
            If WB.Name = NomFichier Then
                OuvertureFichier = True
            End If
        Next
     
    End Function
    Les deux fonctions testent l'existence et l'ouverture du fichier en question et la procédure renvoie le résultat

    Le deuxième cas est bien plus général puisqu'il suppose de connaître seulement le nom du fichier que tu cherches et une idée vague de l'endroit où il est (un répertoire quoi ), ce qui te permets par exemple de chercher dans C:\ !
    Bien entendu tu l'auras compris cette deuxième méthode sera d'autant plus gourmande en temps que ton répertoire d'étude est vaste.

    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
    Sub Tester_StatutFichier2()
     
        Application.ScreenUpdating = False
     
        Dim stCheminFichier As String, stFichier As String, stRepertoireRecherche As String
        Dim boFichierExiste As Boolean
        Dim wbClasseurActif As Workbook
     
        Set wbClasseurActif = ActiveWorkbook
     
        stFichier = "compte.xls"
        stRepertoireRecherche = "C:\"
     
        If OuvertureFichier(stFichier) = True Then
            MsgBox "Votre fichier est déjà ouvert !", vbExclamation
            Exit Sub
        Else
            If ExistenceFichier2(stFichier, stRepertoireRecherche, stCheminFichier) = True Then boFichierExiste = True
        End If
     
        If boFichierExiste = True Then
            Workbooks.Open Filename:=stCheminFichier
            MsgBox "Votre fichier existe et vient d'être ouvert", vbInformation
        ElseIf boFichierExiste = False Then
            MsgBox "Le fichier que vous demandez n'existe pas!", vbCritical
        End If
     
        wbClasseurActif.Activate
     
        Application.ScreenUpdating = True
     
    End Sub
    Function ExistenceFichier2(NomFichier As String, Repertoire As String, rCheminComplet As String) As Boolean
     
        Dim fsRechercheFichier As Office.FileSearch
     
        Set fsRechercheFichier = Application.FileSearch
        With fsRechercheFichier
            .NewSearch
            .LookIn = Repertoire
            .SearchSubFolders = True
            .Filename = NomFichier
            .Execute
        End With
        If fsRechercheFichier.FoundFiles.Count = 1 Then
            ExistenceFichier2 = True
            rCheminComplet = fsRechercheFichier.FoundFiles(1)
        End If
     
    End Function
    La fonction de vérification d'ouverture est la même que pour le premier cas.
    Voilà dis moi ce que tu en penses

  15. #15
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If boFichierExiste = True Then
    Peut, avantageusement, être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If boFichierExiste Then
    Pas besoin de mettre "= True" pour tester un booléen, If le fait déjà.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  16. #16
    Membre habitué Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 198
    Points
    198
    Par défaut
    Tout à fait d'accord c'était juste pour bien tt mettre afin que notre confrère ne loupe pas d'infos

  17. #17
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    La fonction OuvertureFichier ne fonctionne pas dans le cas de VBBBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function OuvertureFichier(NomFichier As String) As Boolean
     
        Dim WB As Workbook
     
        For Each WB In Workbooks
            If WB.Name = NomFichier Then
                OuvertureFichier = True
            End If
        Next
     
    End Function
    Workbooks est un membre de l'objet Application. Or dans le cas de VBBBA, il y a plusieurs instances d'Excel de lancée donc plusieurs instances d'Application...

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    merci pour vos reponses ....
    mais mon pb persiste toujours.
    si le fichier que je teste est ouvert sur une autre application excel sur mon ordi, le test ne le voit toujours pas et ouvre le fichier excel en question....
    je me demande si ya pas de solution pour cette problematique en fait....

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    mon test du fichier ne doit se faire que sur mon ordi et sur toutes les application excel d'ouvertes(dans le cas ou il y'en a plusieurs d'ouvertes...)


    le test ne doit pas prerndre en compte l'ouverture de ce fichier par d'autres utilisateurs de connéctés au réseau.....

  20. #20
    Membre habitué Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 198
    Points
    198
    Par défaut
    Juste un truc que je pige pas bien (j'espère que vous allez éclairer ma lanterne).
    Qu'est ce que vous entendez par pluisieurs instances d'Excel??
    Si on ouvre deux fichiers excel, il sont tout les temps dans la même instance non?

Discussions similaires

  1. VBA Excel: Nombre de fichiers Excel ouverts
    Par mamid1706 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/01/2008, 15h26
  2. [VBA-excel] import de fichier txt sans délimiteur de texte
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/01/2008, 05h49
  3. [VBA-E] gestion des fichiers ouverts ...
    Par SpaceFrog dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 20/01/2006, 17h10
  4. [VBA-Excel] test de server
    Par fixmi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/01/2006, 17h12
  5. VBA Excel - Nom de fichier
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/01/2006, 16h19

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