IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction FichierEstOuvert et Classeur non visible


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Fonction FichierEstOuvert et Classeur non visible
    Bonjour le Forum

    (La résolution de cette discussion servira à répondre en partie à celle que j'avais ouverte "Classeur en lecture seule avec condition" en échange avec Mondev, pour laquelle je cherche une solution, mais le problème reste indépendant. Ai-je bien fait ?)

    Sur ce même Forum, j'ai trouvé une fonction proposée par "Bouley" en Février 2006, et qui renvoie l'information quant à l'ouverture d'un classeur par moi-même, ou un autre de mes collègues de travail.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function FichierEstOuvert(ByRef FichierTeste As Variant) As Boolean
        Dim FICHIER As Long
        On Error GoTo Erreur
        FICHIER = FreeFile
        Open FichierTeste For Input Lock Read As #FICHIER
        Close #FICHIER
        FichierEstOuvert = False
        Exit Function
    Erreur:
        FichierEstOuvert = True
    End Function
    Voici mon code intégré dans un classeur "Annexe.xls":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_Open()
    Dim NomCl As String
    NomCl = "TATA.xls"
     
    If FichierEstOuvert(NomCl) = True Then
        MsgBox "Ouvert !"
        Workbooks(NomCl).Close (False)
    Else
         MsgBox "Non Ouvert !"
    End If
    End Sub
    Immédiatement après l'ouverture d'une session Excel, j'ouvre ce classeur :

    Msgbox ==> "Ouvert !"

    Puis

    Erreur d'exécution'9'
    L'indice n'appartient pas à la sélection.
    sur la lgne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(NomCl).Close (False)
    !!!!!????

    Jusque là, cette fonction ne m'a posé aucun problème.

    Je dois dire que dans une même session antérieure Excel, j'avais ouvert les 2 classeurs. D'autre part, il n'y a aucune liaison entre "TATA" et "Annexe".

    Problème annexe :

    Plus généralement, il arrive qu'un collègue utilise un classeur Excel puis le referme.
    Si je cherche à l'ouvrir, j'ai un message "Ce classeur est déjà utilisé par ..."
    Si le collègue reboote son classeur, alors je peux l'ouvrir sans problème ??!!

    A quoi est dûe cette anomalie ?
    Existe-t-il une instruction VBA pour lever ce genre de problème ?

    Merci à tous.

    Marcel

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    ce que je crois comprendre du problème est que lorsque tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FichierEstOuvert(NomCl)
    tu demandes si quelqu'un a déjà ouvert le fichier et a la main dessus, quelque soit la machine depuis laquelle ce fichier est ouvert.

    alors que lorsque tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(NomCl).Close (False)
    tu postules que ce classeur est ouvert sur ta machine

    Donc il y a soucis
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Cas particulier
    Merci pour ta réponse.

    Ce que je voulais expliquer, c'est l'utilisation de la fonction.

    Dans ce cas particulier, je suis le seul à utiliser ces fichiers d'essai. La fonction FichierEstOuvert fonctionne dans les 2 cas (moi ou un autre).

    J'ai déplacé les 2 fichiers dons mon répertoire personnel "My Documents". Là, personne ne peut y accéder.

    Pourtant, le problème persiste.

    Cordialement.

    Marcel.

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Collection Workbooks au lieu de Fonction FichierEstOuvert
    Bonjour à tous,

    Merci pour cette réponse.
    J'ai utilisé la fonction FichierEstOuvert décrite ci-dessus. En effet, il faut indiquer un chemin et non un nom de fichier seul. Ainsi, la fonction a bien joué son rôle.

    Je reconnais ne pas avoir fouillé la fonction. Je viens de le faire. Mais à quoi vois-tu qu'un chemin est attendu et non un nom de fichier ? J'ai utilisé l'aide en ligne, peut-être mal, mais je n'ai pas obtenu de réponse.

    Comme je ne m'occupe que de ma seule utilisation, et comme tu me l'as conseillé, la méthode test par nom dans la collection Workbooks est mieux adaptée.

    Reste ma dernière question.
    Dans un cas plus général, il arrive que l'un de mes collègues utilise un fichier puis le referme par macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveWorkbook.Save
    Application.Quit
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Close (True)
    .
    Quand je l'ouvre, malgré cela, Excel m'alerte que le fichier est en cours d'utilisation ??!!
    Si le collègue reboote son PC, alors je peux l'ouvrir normalement.
    Mystère !

    En tout cas, Merci à tous les intervenents pour cette aide précieuse.
    Cordialement.
    Marcel

Discussions similaires

  1. ouverture classeur non visible par l utilisateur
    Par nath-0-0 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/05/2010, 14h55
  2. [XL-2000] ouvrir un classeur de manière non visible
    Par JOHN14 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/09/2009, 09h40
  3. Réponses: 4
    Dernier message: 07/12/2002, 15h24
  4. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39
  5. Form principale non visible au demarrage!!!!
    Par toufou dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/07/2002, 21h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo