Excel VBA : test fichier nom variable ouvert

Résolu
Eaheru Messages postés 205 Statut Membre -  
Eaheru Messages postés 205 Statut Membre -
Bonjour,

J'essaie vainement de trouver si un fichier est ouvert et s"il est ouvert de le sauvegarder avant de lancer une macro.

j'ai donc trouvé a cet effet sur un autre forum :

Function FichOuvert(F As String) As Boolean
'Auteur: Didier_mdf  sur forum www.Excel-downloads.com (merci)
Dim Wk As Workbook
On Error Resume Next
Set Wk = Workbooks(F)
On Error GoTo 0
FichOuvert = Not Wk Is Nothing
End Function

mais ça ne semble pas fonctionner dans mon cas car le nom de mon fichier est variable d'un mois sur l'autre (utilisation_octobre.xlsx, utilisation_novembre.xlsx, etc.)
j'ai donc tenté d'appeler cette fonction en utilisant :

FichOuvert ("utilisation_*.xlsx") 

sachant qu'un seul fichier de ce type est ouvert à la fois. Mais le fichier n'est pas détecté ouvert (alors qu'il l'est :) )
Auriez vous la syntaxe correcte svp ?

Merci d'avance pour votre aide

5 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    1°) il faut renseigner le chemin complet du fichier, par exemple...
    C:\monRepertoire1\monRepertoire2\utilisation_novembre.xlsx

    Function FichOuvert(Optional Mois As Integer = 0) As Boolean
    Dim TB
    Dim F As String
    Dim Wk As Workbook
        TB = Array("Janvier", "Fevrier", "Mars") 'Etc..
        If Mois = 0 Then
        'Le fichier du mois actuel
            F = "C:\monRepertoire1\utilisation_" & TB(Month(Now)) & ".xlsx"
        Else
            'Le fichier du mois sélectionner
            F = "C:\monRepertoire1\utilisation_" & TB(Mois) & ".xlsx"
        End If
    
        On Error Resume Next
        Set Wk = Workbooks(F)
        On Error GoTo 0
        FichOuvert = Not Wk Is Nothing
    End Function

    Nous somme en novembre, si tu veux avoir le mois de novembre tu met
    MaVar = FichOuvert()
    Mais si tu veux avoir par exemple février tu met
    MaVar = FichOuvert(2)
    Bien sur tu dois continuer l'énumération des mois et mettre le ou les répertoire(s) pour avoir le chemin complet.
    A+
    0
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Mais même avec la bonne syntaxe ce système ne fonctionne pas.
      Explique ce que tu veux exactement.
      0
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bon, là ça fonctionne
    Function FichOuvert(Optional Mois As Integer = 0) As Boolean   
    Dim fich As Integer   
    Dim F As String   
    dim TB   
        TB = Array(" ", "Janvier", "Fevrier", "Mars") 'Etc..   
        If Mois = 0 Then   
        'Le fichier du mois actuel   
            F = "C:\monRepertoire1\utilisation_" & TB(Month(Now)) & ".xlsx"   
        Else   
            'Le fichier du mois sélectionner   
            F = "C:\monRepertoire1\utilisation_" & TB(Mois) & ".xlsx"   
        End If   
        On Error Resume Next   
        fich = FreeFile   
        Open F For Input Lock Read As #fich   
        Close #fich   
        If Err <> 0 Then FichOuvert = True   
    End Function

    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Pourquoi pas avec une fonction qui boucle sur tous les classeurs ouverts dans l'application...

    Function ClasseurOuvert(ExtraitNom As String) As Boolean  
    Dim Wb As Workbook  
    
    ClasseurOuvert = False  
    For Each Wb In Application.Workbooks  
        If Wb.Name Like ExtraitNom & "*" Then  
            ClasseurOuvert = True 
            Exit For 
        End If  
    Next Wb  
    End Function

    Et l'appel dans la procédure :
    Sub test()  
    ClasseurOuvert "utilisation_"  
    End Sub


    Edit : mes excuses : Bonjour à tous les deux et bonne journée!...
    Cordialement,
    Franck P
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour tout le monde,

      Je pense que cette solution ne marche que si le fichier est ouvert dans la même session d'excel.
      C'est peut-être pour ça que la solution de MDF ne marche pas non plus dans son cas.

      eric
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      edit :
      à relire c'est sans doute plus parce qu'il ne connait pas le nom exact du fichier...
      Donc je retire :-)

      eric
      0
  4. Eaheru Messages postés 205 Statut Membre 20
     
    Merci a vous pour toutes ces réponses. Je vais regarder comment je peux utiliser tout cela pour résoudre mon problème.

    Le cas d'utilisation est en fait, un fichier contenant une extraction de données d'une base de données, que j'envoie, formé dans des tableaux issues d'une macro, a d'autres utilisateur qui vont analyser ces tableaux.
    Parfois certaines erreurs nécessite de basculer des information d'un tableau a un autre en basculant des lignes sur des onglets et la, les utilisateurs dispose d'un macro qui permet de mettre a jour les tableaux.
    Le problème étant que certains font tout le travail et ne sauvegarde pas avant de lancer la mise a jour, hors ma macro ouvre le fichier du disque (qu'il doivent sélectionner) et du coup écrase toutes leurs modifications.

    Pour éviter ça, il suffirait d'enregistrer le fichier s'il est déjà ouvert, d'ou ma question :)
    les paramètres supplémentaires sont :
    - le nom du fichier varie d'un mois sur l'autre
    - les utilisateurs utilisent chacun leur répertoire local pour stocker le fichier donc je ne connais pas le chemin

    J'espère avoir été clair dans mes explications
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Re,

      Il va falloir être un peu plus précis car si tu ne connais ni le nom du fichier, ni son chemin ça fait beaucoup à contrôler...
      Est-ce que ton fichier est obligatoirement celui du mois en cours ? Ou éventuellement en plus celui du mois précédent et/ou suivant ?
      Est-que c'est obligatoirement dans la même session excel ?
      Quand on sera en janvier 2012 il écrasera celui de janvier 2011 ? ou bien il y a des sous-répertoires ?

      Tu pourrais inclure l'ouverture du fichier dans ta macro. Comme ça tu auras le nom, le chemin, tu seras sûr d'être dans la même session et tu pourras contrôler facilement s'il est déjà ouvert.
      Et tant pis pour ceux qui ouvrent hors macro, ils recommencent...

      eric
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Eaheru Messages postés 205 Statut Membre 20
     
    Effectivement.. je vais être plus précis : le fichier a toujours le même nom hormis le nom du mois en fin de chaîne de caractères, il s'agit toujours du mois précédent.
    Pour la session Excel ... je ne connais pas le principe de session. Mais voici ce qui peut arriver. La personne ouvre le fichier, effectue des modifications à l'intérieur puis ouvre le fichier contenant la macro de mise à jour. Suivant cette description, je dirais que ce n'est pas dans la même session (?).
    La notion d'année n'est pas prise en compte.

    j'ai bien inclus l'ouverture du fichier dans la macro (juste pour la mise à jour auto après modif), c'est ce qui leur fait perdre leurs modifications lors des mise a jour.
    sinon, effectivement je pourrais aussi leur faire ouvrir ce fichier pour effectuer les modifications....
    Merci en tout cas pour toutes vos pistes (que je vais essayer :) )
    0