none
Vba automation savoir un classeur Excel est ouvert. RRS feed

  • Question

  • Bonjour,

    Je voudrais en VBA automation, Hors Excel (dans Acces en l'occurence) savoir si un classeur dont le nom est connu est ouvert et d'en prendre le contrôle (Set ...).  Actuellement j'ouvre le fichier comme suit

      Set xlApp = CreateObject("Excel.Application")
      Set xlBook = xlApp.Workbooks.Open(sFichier)
    

    Mais cela pose problème s'il est déjà ouvert.

    Merci, Blaise

    mardi 6 juillet 2010 09:49

Réponses

  • bonjour Blaise,

    voici une solution de Frederic Sigonneau
    http://frederic.sigonneau.free.fr/code/Fichiers/DetruireTousFichiersDossier.txt
     Function IsFileOpen(filename As String)
    'auteur inconnu, mpep
    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, file is being queried.
        Case Else
          Error errnum
      End Select

    End Function

    isabelle
     Le 2010-07-06 05:49, blaise032 a écrit :

    Bonjour,
    Je voudrais en VBA automation, Hors Excel (/dans Acces en l'occurence/) savoir si un classeur dont le nom est connu est ouvert et d'en prendre le contrôle (Set ...). Actuellement j'ouvre le fichier comme suit

       Set xlApp = CreateObject("Excel.Application")
       Set xlBook = xlApp.Workbooks.Open(sFichier)
    

    Mais cela pose problème s'il est déjà ouvert.

    Merci, Blaise

    • Marqué comme réponse blaise032 mercredi 7 juillet 2010 08:15
    mardi 6 juillet 2010 12:48

Toutes les réponses

  • bonjour Blaise,

    voici une solution de Frederic Sigonneau
    http://frederic.sigonneau.free.fr/code/Fichiers/DetruireTousFichiersDossier.txt
     Function IsFileOpen(filename As String)
    'auteur inconnu, mpep
    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, file is being queried.
        Case Else
          Error errnum
      End Select

    End Function

    isabelle
     Le 2010-07-06 05:49, blaise032 a écrit :

    Bonjour,
    Je voudrais en VBA automation, Hors Excel (/dans Acces en l'occurence/) savoir si un classeur dont le nom est connu est ouvert et d'en prendre le contrôle (Set ...). Actuellement j'ouvre le fichier comme suit

       Set xlApp = CreateObject("Excel.Application")
       Set xlBook = xlApp.Workbooks.Open(sFichier)
    

    Mais cela pose problème s'il est déjà ouvert.

    Merci, Blaise

    • Marqué comme réponse blaise032 mercredi 7 juillet 2010 08:15
    mardi 6 juillet 2010 12:48
  • j'oubliais si le fichier est ouvert, voici comment y faire référence,

    Set AppExcel = GetObject(, "Excel.Application")
    Set Fichier = AppExcel.Workbooks("Monfichier.xls")
    MsgBox Fichier.Sheets("Feuil1").Range("A1")

    isabelle

    Le 2010-07-06 08:48, isabelleV a écrit :

    bonjour Blaise,

    voici une solution de Frederic Sigonneau
    http://frederic.sigonneau.free.fr/code/Fichiers/DetruireTousFichiersDossier.txt
      Function IsFileOpen(filename As String)
    'auteur inconnu, mpep
    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, file is being queried.
         Case Else
           Error errnum
       End Select

    End Function

    isabelle
      Le 2010-07-06 05:49, blaise032 a écrit :

    Bonjour, Je voudrais en VBA automation, Hors Excel (/dans Acces en l'occurence/) savoir si un classeur dont le nom est connu est ouvert et d'en prendre le contrôle (Set ...). Actuellement j'ouvre le fichier comme suit

        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open(sFichier)
    

    Mais cela pose problème s'il est déjà ouvert.

    Merci, Blaise

    mardi 6 juillet 2010 13:18
  • Merci Isabelle,

    C'est cette fonction qui ... fonctionne ;-)

    Blaise

    mercredi 7 juillet 2010 08:16