Fichier ne ferme pas selon la demande

Résolu
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017 - 7 janv. 2016 à 13:14
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017 - 19 févr. 2016 à 16:53
Bonjour,

je voulais proteger un fichier partagé de toutes nouvelles completions non autorisées
soit dans le thisWorbook
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If VBA.Environ("username") = Worksheets("maintenance & securité").Range("A12").Value Then 'celui qui a tout les droits
ElseIf Intersect(Target, Range("AE1")) Is Nothing Then

Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True

End If

End Sub


Pour la gestion de mes evenements de completion
je fais
Sub xxx
Application.EnableEvents = False
' mon code qui execute la completion
Application.EnableEvents = True
End Sub

afin de modifier les données

je souhaitais que les utilisateurs utilisent un bouton fermer pour sortir


sub fermer
Application.EnableEvents = False
ActiveWorkbook.Save
ThisWorkbook.Close
end sub


Je suis le username qui a tous les droits et pour moi quand j utilise le bouton fermer le fichier se ferme, pour les autres utilisateurs la fonction ne marche pas. Je ne comprends pas.


merci pour votre aide

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 29/01/2016 à 20:49
Hé bien ...
L'âne, ce soir, c'est ton serviteur (moi-même) qui a lu tes messages mais n'a pas su lire tout ton code (et voir que tu avais bel et bien mis en place la procédure que j'avais moi-même préconisée). Je me donne dans la foulée deux paires de baffes et t'autorise à en faire au moins autant (je les mérite, ces baffes).
Le problème semble en effet être qu'il est impossible de sauvegarder en même temps que l'on "modifie" (conflit), même si la "modification n'en est pas une réelle.
On va essayer de se rattraper aux branches ...
1) Déclare une variable publique "ignore" en booléenne
Public ignore as boolean
2) passe cette booléenne à True dans la procédure évènementielle de sauvegarde :
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ignore = true
End Sub

3) transforme la procéure antimode ainsi
Public Sub antimode()
if not ignore then
If Application.VBE.ActiveVBProject.Mode > 0 Then Range("A1") = Range("A1")
Application.OnTime Now + TimeValue("00:00:01"), "antimode"
end if
End Sub

Cela devrait suffire.
Il se peut que tu aies également (à voir) à passer ignore à True dans la procédure évènementielle Workbook_BeforeClose
Essaye.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
1
alors j'avais testé cette approche mais j'avais pas codé comme toi.
Je vais tester et je te redis

merci de ton aide
0
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
Modifié par mikmak78 le 19/02/2016 à 16:53
ca fonctionne!!!!
merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 7/01/2016 à 16:24
Bonjour,
quel serait selon toi le sens de ce qui serait écrit ainsi :
Si expression1 alors
sinon expression2 alors
....
fin si

qui n'est rien d'autre que :
si non expression1 et que expression2 alors
...
fin si

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 janv. 2016 à 16:48
Et je ne comprends pas pourquoi ce micmac au lieu d'utiliser tout simplement la protection des cellules que tu veux protéger :
ton :
ElseIf Intersect(Target, Range("AE1")) Is Nothing Then
Application.Undo

montre que tu veux en fait tout permettre à un utilisateur et tout protéger, sauf la cellule AE1, pour les autres utilisateurs.
protège donc ces cellules selon l'utilisateur ...
0
En faite le but de cela est de ne pas permettre aucune modification a l'utilisateur lambda grace a cette double condition il ne peut rien modifier sans passer les boutons
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 7/01/2016 à 18:22
si ce qui t'arrête est la détermination de la plage de cellules à protéger (tout sauf une cellule), regarde ce petit exemple de détermination de la plage :
Dans cet exemple , nous retenaons tout sauf la cellule B8 ===>>
Dim plage As Range, cellibre As Range, c As Long, r As Long
Set cellibre = Range("B8")
c = cellibre.Column
r = cellibre.Row
Set plage = Union(Range(Cells(1, c), Cells(r - 1, c)), Range(Cells(r + 1, c), Cells(UsedRange.Rows.Count, c)))
For Each colonne In UsedRange.Columns
If colonne.Column <> c Then
Set plage = Union(plage, colonne)
End If
Next
MsgBox "ta plage à protéger selon l'utilisateur est donc la plage " & plage.Address & vbCrLf & _
"regarde ... je vais la sélectionner. Elle comprend toutes les cellules, sauf la B8"
plage.Select

Yapluka

EDIT : tu peux également faire ceci, qui protège toute la feuille Feui2 (exemple) , sauf la cesllule B8
 
Worksheets("Feuil2").Unprotect
Sheets("Feuil2").Cells.Locked = True
Range("B8").Locked = False
Worksheets("Feuil2").Protect , DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True


Et plus besoin de ton scénario à coups de Undo ...
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0

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

Posez votre question
je ne peux pas mettre tous simplement de protection car le fichier est partagée, d'ou ce simulacre de protection que j'essaye de faire fonctionner
0
mon problème sur la partie de boucle de protection qui fonctionne mais sur le fait que l'utilisateur lambda n'arrive pas a fermer le fichier une fois modifé via les boutons/macro
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 8/01/2016 à 17:53
je ne peux pas mettre tous simplement de protection car le fichier est partagée

Je ne te comprends pas.
Mets donc ou enlève donc la protection par code VBA, en fonction de l'utilisateur. Cela est à faire dans l'évènement Workbook_Open du classeur.


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
29 janv. 2016 à 12:40
re Bonjour
Apres avoir testé avec d'autre login,
J'ai trouver la root cause du probleme, c'est lié a cette macro

Private Sub Workbook_Open()
Flaggreen = True
Select Case VBA.Environ("username")
Case "superuser"
Case Flaggreen = True
Application.OnTime Now + TimeValue("00:00:00"), "antimode"
Case Flaggreen = False
End Select
End Sub


+

Public Sub antimode()
If Application.VBE.ActiveVBProject.Mode > 0 Then Range("A1") = Range("A1")
Application.OnTime Now + TimeValue("00:00:01"), "antimode"

End Sub


qui me permettait de bloquer le bouton "mode creation"
En enlevant cette partie , l'utilisateur peut fermer et sauver par contre maintenant les utilisateurs peuvent se mettre en mode creation et donc by passer les securités....
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 29/01/2016 à 13:25
Ta "soluce" est tirée par les cheveux et peu orthodoxe.
Mais si tu y tiens et que ton souci est maintenant d'empêcher que l'on se mette en mode création, cherche donc parmi mes interventions d'il y a peu de temps. Si ma "vieille" mémoire n'est pas complètement devenue pourrie, tu devrais y trouver cela (empêcher le mode création) !
Cherche d'abord cette intervention (fais cet effort). Si tu n'y parviens pas, je la retrouverai moi-même en faisant les gestes de recherche que tu n'auras pas su faire.
J'attends ...

EDIT : Ah ! pour être fort du café, cela l'est ...
Je viens de la trouver, cette discussion (en quelques secondes ...)
C'est en plus A TOI, que j'avais montré comment empêcher le mode création !!!!!

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
29 janv. 2016 à 16:09
c est sur que c est peu orthodoxe je le concede...
je ne comprends pas ce que tu veux dire puisque j ai ajouté justement la modif que tu m'avais dite cf disussion du 18.06.15.
et pour ne pas avoir une boucle infini j'ai rajouté des "portes sortis"...(voir ci dessus)
0
Rejoignez-nous