En lecture seul : VBA

bonjour,

dans le fichier joint j'ai une macro dans Thisworkbook qui permet d'enregistrer automatiquement à la fermeture.

le souci, c'est que je voudrais que si la personne ouvre le fichier en lecture seul, qu'au moment de la fermeture le code VBA n'enregistre pas (j'ai vue qu'uatrement il cré un nouveau fichier)

Le mot de passe est : mdp

j'espère avoir été clair ?

Francky

69lecture-seul.xlsm (19.00 Ko)

Bonjour,

If ActiveWorkbook.ReadOnly Then

(ou thisworkbook ou ...)

eric

bonjour Eric,

j'ai essayé, mais ça ne marche pas il fait une copie,

voilà comment j'ai modifié le code :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Save
If ActiveWorkbook.ReadOnly Then
End If
End Sub

Francky

Il faut le mettre dans le test :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If ActiveWorkbook.ReadOnly Then
        Application.EnableEvents = False
        MsgBox "classeur non enregistré"
        Me.Close
    Else
        Me.Save
    End If
End Sub

eric

ok, merci Eric

Francky

J'ai trouvé ton code intéressant; mais comment modifier le le code d'accès?


Rectificatif: le mot de passe est mdp, comment le changer?

bonjour,

fichier "enregistrer sous" puis "outil" et "option général"

cdt

Francky


bonjour Eric,

après quelques essais, je m'apperçois que si je choisi la lecture seul, au moment de quiter il me met bien la Msgbox "Classeu non enregistré" et une fois que je clique sur "ok" au lieu de fermer ile me propose d'enregistrer...

cordialement,

Francky

où trouver outil? (window7)

rien à voir avec Wondows 7 !

c'est dans Excel, tu choisis dans fichier enregistrer sous, une fenêtre s'ouvre à côté du bouton enregistrer il 'y a outil (selon la version d'excel il faut chercher un peu...)

Francky

Je n'avais pas regardé le bas de la page correctement.

Merci pour tes explications.

Cdt.

Le bouton résolu n'apparait pas !

Bonjour,

ta demande était :

je voudrais que si la personne ouvre le fichier en lecture seul, qu'au moment de la fermeture le code VBA n'enregistre pas

Et s'il est en lecture seule tu es obligé de l'enregistrer sous un autre nom :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not ActiveWorkbook.ReadOnly Then
        Me.Save
    End If
End Sub

eric

je m'explique peut être mal Eric,

pour moi ton dernier code est bon, mais je voudrais, lorsuq'on ouvre en lecture seul, qu'après qu'on clique sur "ok" de la msgbox le fichier se ferme sans avoir la possiblité d'enregistrer sou un autre nom...

dis-moi si c'est plus clair ?

Francky

je m'explique peut être mal Eric,

Tout ce qui est clair pour moi c'est que je ne comprend plus rien à ce que tu veux...

Déjà voyons si on parle de la même chose : j'ai considéré 'lecture seule' dans le cas ou il est déjà ouvert par une autre personne.

Dans cas au post du 24 Nov 2012, 17:06 normalement il se ferme et ne propose pas la sauvegarde.

Mais il pourrait s'agir de l'attribut 'lecture seule' du fichier.

Du quel parles-tu ?

Et décris précisément les différents cas de figure mais j'ai l'impression d'avoir répondu à tous.

eric

autant pour moi Eric, tu as raison c'était au cas où il était déjà ouvert ailleur...

donc je vais le tester au boulot et je te dirais si c'est ok,

excuse-moi pour cette erreur

Francky

désolé de persister Eric,

je viens de tester la macro au boulot. J'ai donc ouvert sur un poste le fichier puis sur le mien en lecture seul.

Puis j'ai fais une saisi (comme si j'avais oublié que j'étais en lecture seul) et au moment de la fermeture ile me précise "classeur non enregistrer" (donc tout va bien) et là je voudrais qu'après avoir cliqué sur ok le fichier se ferme alrs qu'il me propose d'enregistrer ou de ne pas enregistrer...

Francky

Bonjour,

Donc ce n'est pas 'ne pas enregistrer' mais proposer l'enregistrement...

Enlève Application.EnableEvents = False

eric

désolé Eric, mais je ne dois pas être clair car ce n'est pas encore ça...

  • ouvert en écriture : enregistrement automatique (ça c'est ok)
  • ouvert en lecture seul (parce qu'il serait déjà ouvert ailleurs) : je voudrais que la personne n'est pas la possibilité d'enregistrer au moment de la fermeture. alors que là, il propose d'enregistrer sous...
Je suis désolé qu'on est du mal à se comprendre.

Francky

On va y arriver... Rajoute cancel=true :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If ActiveWorkbook.ReadOnly Then
        Cancel = True
        Application.EnableEvents = False
        MsgBox "classeur non enregistré"
        Me.Close
    Else
        Me.Save
    End If
End Sub

bon, ça ne parchait pas, du coup j'ai regarder ton code et j'ai déplacé la ligne

Cancel = True

le la manière suivante :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If ActiveWorkbook.ReadOnly Then
        Application.EnableEvents = False
        MsgBox "classeur non enregistré"
        Me.Close
        Cancel = True
    Else
        Me.Save
    End If
End Sub

et ça à l'air de marché,

encore merci Eric de ta patience.

Francky

Rechercher des sujets similaires à "lecture seul vba"