VBA ouvrir fichier

Résolu
Bonjour,

Je cherche le code qui permet d'ouvrir un fichier à partir d'une macro sans générer d'erreur si le fichier est déjà ouvert.soit tester si le fichier est ouvert, soit tester le code erreur de l'ouverture.

Merci de votre aide

5 réponses

  1. Contributeur
    Bonjour,

    Option Explicit
    
    Dim objExcel As Excel.Application
    
    '---------------------------------------------------------------------------------------
    ' Procédure : ClasseurEstOuvert
    ' Auteur    : 2pme, Guy Courville
    ' Date      : vendredi 11 février 2011
    ' Détails   : Le jeu consiste à ouvrir le classeur dans une instance invisible d'Excel
    '             et à tester la propriété ReadOnly de ce classeur. C'est la valeur de cette
    '             propriété qui est retournée par la fonction.
    '
    ' Note 1    : Le paramètre strNomFichierComplet doit porter le chemin complet du classeur
    '             comme son nom l'indique.
    '
    ' Note 2    : Aucun gestionnaire d'erreur n'est actif.
    '
    '---------------------------------------------------------------------------------------
    '
    Function ClasseurEstOuvert(strNomFichierComplet As String) As Boolean
    
      Set objExcel = New Excel.Application
     
      With objExcel
     
        ' L'instance d'Excel qui porte le fichier ne doit pas être visible
        .Visible = False
       
        .Workbooks.Open (strNomFichierComplet)
       
        ' Si le classeur est déjà ouvert cette propriété sera à True
        ClasseurEstOuvert = .Workbooks(1).ReadOnly
     
        .Quit
     
      End With
     
      ' Ne pas oublier de supprimer la référence à Excel
      ' sinon une autre instance fantôme hantera votre système...
      Set objExcel = Nothing
     
    End Function
    1. Modérateur
      Bonjour,
      Si on parle bien de VBA sous excel, essaye ceci : (toto ton nom de fichier à ouvrir)
      Option Explicit 
      
      Sub essai() 
      Dim Ws As Workbook 
      Dim test As Boolean 
      test = False 
      For Each Ws In Application.Workbooks 
          If Ws.Name = "toto" Then 
              Ws.Activate 
              test = True 
              Exit Sub 
          End If 
      Next 
      If test = False Then 
          Workbooks.Open "toto.xls" 
      End If 
      End Sub

      "Laissez-moi deviner... Votre surnom, c'est «Bande Passante»? "
      - Le Tribunal des flagrants délires- P.Desproges -
      1. Allez un p 'tit cadeau!!

        tu copies et colles ce code dans un module
        puis tu l'appelles dans ta sub
        ex:
        sub test
        if IsFileOpen("c:\data\test.xls") then
        ' il est déja ouvert 'vrai
        else
        ' il n'est pas ouvert
        endif
        end sub

        Function IsFileOpen(filename As String)
        Dim fileNum As Integer, ErrNumero As Integer
        
        On Error Resume Next
        fileNum = FreeFile()
        Open filename For Input Lock Read As #filenum
        Close fileNum
        ErrNumero = Err
        On Error GoTo 0
        Select Case ErrNumero
            Case 0
        	IsFileOpen = False
            Case 70
        	IsFileOpen = True
        End Select
        End Function
        1. hello tout le monde, j'ai ouvert un sujet du même type mais pas de réponse je tente donc ma chance ici.

          Voila j'utilise le code proposé par @bidouilleu_R, seulement mon probléme est que mon filename est une url sharepoint sur laquelle je stock mon fichier, cela me renvoi une erreur 52 bad file name, que faire , y a t-il une solution pour résoudre ce probléme ?