Excel VBA : test fichier nom variable ouvert

Résolu/Fermé
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - 22 nov. 2011 à 19:36
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - 23 nov. 2011 à 18:24
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
A voir également:

5 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
23 nov. 2011 à 02:01
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
23 nov. 2011 à 02:53
Mais même avec la bonne syntaxe ce système ne fonctionne pas.
Explique ce que tu veux exactement.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 23/11/2011 à 03:25
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 23/11/2011 à 09:32
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 213
Modifié par eriiic le 23/11/2011 à 10:08
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 213
23 nov. 2011 à 10:26
edit :
à relire c'est sans doute plus parce qu'il ne connait pas le nom exact du fichier...
Donc je retire :-)

eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
23 nov. 2011 à 11:07
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
0
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
23 nov. 2011 à 10:34
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 213
23 nov. 2011 à 11:29
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
23 nov. 2011 à 18:24
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