Se connecter avec
S'enregistrer | Connectez-vous

[vba] variable suivant que le classeur est ouvert ou pas

Dernière réponse : dans Programmation

Bonjour! j'ai besoin d'aide car je souhaite attribuer à une variable une valeur différente suivant que le classeur était ouvert ou pas. La variable "chemin" contient le chemin coomplet du classeur.
Voici mon code pour l'activation du classeur s'il est ouvert, ou son ouverture s'il ne l'est pas:

  1. On Error Resume Next
  2. Workbooks(chemin).Activate 'activer classeur ouvert
  3. If Err <> 0 Then 'si classeur pas ouvert
  4. Workbooks.Open Filename:= _
  5. chemin 'ouvrir le classeur
  6. End If



Ce que j'aimerai faire c'est attribuer à une variable "deja_ouvert" la valeur "Vrai" si le classeur était déjà ouvert et qu'il a été juste activé, et la valeur "Faux" s'il n'était pas ouvert auparavant et qu'il a fallu l'ouvrir.

J'ai essayé en mettant le code ci-dessous mais ma variable a toujours la valeur "Faux" même si le classeur était déjà ouvert:

  1. On Error Resume Next
  2. Workbooks(chemin).Activate 'activer classeur ouvert
  3. If Err <> 0 Then 'si classeur pas ouvert
  4. deja_ouvert="Faux" 'variable="Faux"
  5. Workbooks.Open Filename:= _
  6. chemin 'ouvrir le classeur
  7. Else 'sinon
  8. deja_ouvert="Vrai" 'variable="Vrai"
  9. End If


Lassé par la pub ? Créez un compte

le code n'est pas de moi mais je l'utilise dans ma macro et fonctionne très bien:
  1. Function IsFileOpen(filename As String)
  2. Dim filenum As Integer, Errnum As Integer
  3. On Error Resume Next
  4. filenum = FreeFile()
  5. Open filename For Input Lock Read As #filenum
  6. Close filenum
  7. Errnum = Err
  8. On Error GoTo 0
  9. Select Case Errnum
  10. Case 0
  11. IsFileOpen = False
  12. Case 70
  13. IsFileOpen = True
  14. End Select
  15. End Function
Expert Programmation

Un bref parcours de la collection Workbooks aurait pu suffire :sarcastic: 
  1. Dim wb As Workbook
  2. Dim IsWorkbookOpen As Boolean
  3.  
  4. IsWorkbookOpen = False
  5. For Each wb In Workbooks
  6. If wb.Name = "nom du classeur" Then
  7. IsWorkbookOpen = True
  8. Exit For
  9. End If
  10. Next
Lassé par la pub ? Créez un compte