[VBA] Test avec message box si fichier externe non ouvert

Résolu
dyllan Messages postés 5577 Statut Contributeur sécurité -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Là ... je bloque et débutant en VBA je n'ai pas trouvé de réponse facilement compréhensible !

Je souhaite ajouter dans une macro fonctionnelle un test intermédiaire pour vérifier qu'un fichier est bien ouvert. Si non ouvert, arrêt de la macro et affichage d'une message box à l'utilisateur : Merci d'ouvrir le fichier X

Windows(Windows_Extract_Mensuel_SGBD).Activate     
      If Not Ok Then                                                                                                      
        Message = "Le fichier Extract_mensuel_indicateurs_AQZS05.xls n'est pas ouvert ! & Chr(13) & "Merci de l'ouvrir."
MsgBox Message, vbExclamation + vbCritical, "Erreur de fichier !"                                                                
      Else     
        If Ok Then     
            Sheets(Sheet_Extract_SGBD).Range("B5").Select     
        End If     
      End If 


Je pourrais ensuite insérer ce bout de code là où je souhaite faire ce test intermédiaire lorsque ma macro a besoin d'un fichier externe.

D'avance merci pour toutes réponses !



J'ai envoyé un ange pour te protéger mais ... il est revenu me dire qu'il ne pouvait veiller sur un autre

4 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut Dyllan, Bonne année à toi.

    Pour tester si un fichier excel est ouvert, tu peux boucler sur tous les classeurs ouverts, et si tu ne trouves pas le nom de ton classeur (et oui chez Excel on ne dit pas "fichier" mais "classeur"...) dans les classeurs ouverts ben c'est qu'il est fermé...

    En code VBA :
    Dim Classeur As Workbook 
    Dim Ouvert As Boolean 
    
    Ouvert = False 
    For Each Classeur In Workbooks 
        If Classeur.Name = "Extract_mensuel_indicateurs_AQZS05.xls" Then 
            Ouvert = True 
            Exit For 
        End If 
    Next Classeur 
    'si ouvert est toujours false après la boucle c'est que ton classeur est fermé alors on sort de la procédure 
    If Ouvert = False Then Exit Sub
    'ou avec message à l'utilisateur :
    'If Ouvert = False Then 
        'Msgbox "fichier fermé"
        'Exit Sub
    'End If
    

    Je n'ai pas testé ce code si plusieurs instances d'excel sont ouvertes...
    Cordialement,
    Franck P
    2
  2. dyllan Messages postés 5577 Statut Contributeur sécurité 918
     
    Bon j'ai testé autre chose. Pas d'erreur mais par contre si le fichier n'est pas ouvert ... pas de message box pour avertir ... :(

    ' On commence par SGBD et on vérifie que notre ficher extract brut est ouvert pour l'entitée SGBD  
        Dim Wk As Workbook  
        x = "Extract_mensuel_indicateurs_AQZS05"  
          
        Windows(Windows_Extract_Mensuel_SGBD).Activate  
            
            On Error Resume Next  
            Set Wk = Workbooks(x & ".xls")  
            If Err <> 0 Then  
            Message = "Le fichier Extract_mensuel_indicateurs_AQZS05.xls n'est pas ouvert !" & Chr(13) _  
            & "  " & Chr(13) & "                                        Merci de l'ouvrir."                                             
            MsgBox Message, vbExclamation + vbCritical, "Erreur de fichier !"  
            Else  
                Sheets(Sheet_Extract_SGBD).Range("B5").Select  
            End If 


    J'ai envoyé un ange pour te protéger mais ... il est revenu me dire qu'il ne pouvait veiller sur un autre
    0
  3. dyllan Messages postés 5577 Statut Contributeur sécurité 918
     
    Salut pijaku, pareillement, bonne année de ton côté ;)

    Merci pour ce bout de code, je ne pense pas avoir le temps de tester ce soir. Je suis encore au boulot et me prend la tête sur autre chose ... bref.

    Je te fais un retour demain sur ce topic.

    Cordialement
    0
  4. dyllan Messages postés 5577 Statut Contributeur sécurité 918
     
    Bonjour pijaku,

    Pour te répondre après avoir testé ce code : Excellent :) J'ai pu rapidement l'intégrer et, le tester.

    Effectivement on parle de classeur sous Excel, c'est en partie cette mauvaise différenciation qui a du me bloquer.

    A garder en mémoire, ça peut en aider quelques uns.

    Merci encore ;)
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Mais de rien.
      A+
      0