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 :

VBA Workbook_Open, ReadOnly, et "rouverture" [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur calcul CM
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur calcul CM
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Par défaut VBA Workbook_Open, ReadOnly, et "rouverture"
    Bonjour,

    Je souhaite laisser la possibilité à l'utilisateur d'ouvrir un fichier Excel en mode "lecture seule".

    Le problème que je rencontre, c'est qu'à l'ouverture de mon fichier j'appelle une sub (située dans un module): Call Init.

    Pour une ouverture classique du fichier, la sub Init () se lance. Mais quand on accepte de "rouvrir" le fichier en lecture seule, la sub ne se lance plus!

    Ci dessous mon code dans le Wokbook_Open:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Public Sub Workbook_Open()
     
    Dim fichier As String
    Dim fichierlong As String
     
     
    fichierlong = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
    fichier = ActiveWorkbook.Name
     
        If Workbooks(fichier).ReadOnly = True Then
            Call Init
        Else
            If MsgBox("Si le répertoire est ouvert pour consultation, merci de cliquer sur oui pour l'ouvrir en lecture seule!", vbYesNo + vbExclamation + vbDefaultButton1, "Ouverture en lecture seule") = vbYes Then
                Workbooks.Open Filename:=fichierlong, ReadOnly:=True
            Else
                Call Init
            End If
        End If
     
    End Sub
    Je vous mets en pièce jointe un petit fichier Excel pour exemple.

    Merci par avance pour vos réponses. J'ai beau chercher sur les Forum, je ne trouve pas d'aide sur ce problème particulier!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Hello, Il y a un truc qui m'échappe dans la logique.

    Pourquoi demander de prendre telle option si le fichier est en lecture/écriture puisque la macro détermine au préalable si il est en lecture seule ?

  3. #3
    Membre du Club
    Femme Profil pro
    Ingénieur calcul CM
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur calcul CM
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Par défaut
    On a le choix de se mettre en lecture seule par le If MsgBx("...") vbYes

    Si on dit oui au message, on passe en lecture seule, sinon, on reste en lecture/écriture. Je suis obligée car il faut pouvoir modifier le fichier. Mais comme il est sur mon réseau et qu'il va être souvent consulté, et ce, par plusieurs personnes en même temps, je propose l'ouverture en lecture seule pour les personnes qui ne l'utilise qu'en consultation.

    Si tu répond "Non" à la MsgBx, alors ça appelle la Sub Init.
    Mais quant on répond "Oui" et qu'on passe en lecture seule, on dirait qu'il ne recommence pas la lecture du Sub Workbook_Open.
    Ou alors, c'est cette partie du code qui ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Workbooks(fichier).ReadOnly = True Then
            Call Init
    Mais à ce moment là, je ne comprend pas comment peut apparaitre la MsgBox à la première ouverture et pas à la "réouverture"...

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Le classeur ne se ferme pas, aussi la macrp "Workbook_Open" ne se réexécute pas (tu peux le vérifier en mettant un msgbox dans la macro "Workbook_BeforeClose".

  5. #5
    Membre du Club
    Femme Profil pro
    Ingénieur calcul CM
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur calcul CM
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Par défaut
    Effectivement, j'ai testé et le fichier ne se ferme pas. Mais je n'ai pas réglé mon problème pour autant.

    J'ai rajouté mon "Call Init" apres le ReadOnly=True et rien ne se passe (j'ai fait un test avec une MsgBox et effectivement elle n'apparait pas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            If MsgBox("Si le répertoire est ouvert pour consultation, merci de cliquer sur oui pour l'ouvrir en lecture seule!", vbYesNo + vbExclamation + vbDefaultButton1, "Ouverture en lecture seule") = vbYes Then
                Workbooks.Open Filename:=fichierlong, ReadOnly:=True
                Call Init
            Else
                Call Init
            End If
    Du coup, est-ce qu'il y aurait une astuce pour que ma Sub Init se lance automatiquement après passage en lecture seule?

  6. #6
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Ce que je voulais dire, c'est qu'il me semblait plus sûr de forcer l'ouverture en lecture seule si le classeur est déjà ouvert.

    Pour le reste et sans garantie pour ton appli mais j'ai voulu faire un truc similaire il y a plusieurs années et j'ai placé mon code dans Auto_Open plutôt que dans Workbook_Open et cela fonctionnait.

+ Répondre à la discussion
Cette discussion est résolue.

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