Excel VBA : test fichier nom variable ouvert [Résolu/Fermé]

Signaler
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
-
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
-
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

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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+
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
Mais même avec la bonne syntaxe ce système ne fonctionne pas.
Explique ce que tu veux exactement.
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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.
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
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
Messages postés
23423
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 août 2020
6 291
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
Messages postés
23423
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 août 2020
6 291
edit :
à relire c'est sans doute plus parce qu'il ne connait pas le nom exact du fichier...
Donc je retire :-)

eric
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
Salut,
Tenant compte des remarques d'Eriiic, peut être voir du côté de GetObject... C'est une piste.
https://www.microsoft.com/en-us/download/details.aspx?id=55984
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
19
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
Messages postés
23423
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 août 2020
6 291
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
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
19
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 :) )