Soluce : Protéger à nouveau une feuille déjà protégé

V

Valou

Guest
Ci-dessous la soluce que m'a envoyé William (dont je remercie encore). J'ai testé elle fonctionne.
En tout cas, c'est super pratique, lorsqu'on envoie un fichier déjà protégé (sauf les cellules nécessaires) à une personne.
Cette dernière "entre" ses chiffres et nous renvoie le fichier dont la feuille est verrouillée dans sa totalité. De sorte, que quelqu'un d'autre ne puisse pas la modifier.
Merci encore à William et A+ bientôt sur le forum...

Valou


Sub verrouillage1()

Sheets("NOTE DE FRAIS").Activate
MsgBox " ATTENTION, cette opération va provoquer la sauvegarde, ainsi que le verrouillage de cette note de frais "
If MsgBox1 = True Then
GoTo 10
End If

MsgBox " Il conviendra de renommer le fichier, avant de l'enregistrer... "
If MsgBox2 = True Then
GoTo 10
End If

rep = Application.Dialogs(xlDialogSaveWorkbook).Show
If rep = False Then
GoTo 10
End If

ActiveSheet.Unprotect ("1")

'Pour les cellules B14 a J46

Range("A14:J46").Select
Selection.Locked = True

'Pour les cellules B3 a E7

Range("B3:E7").Select
Selection.Locked = True

x = Range("B7:E7").Value

Range("C12:E13").Value = "FEUILLE VERROUILLE PAR :"
Range("F12:H13").Value = x

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="1"
Exit Sub


10 MsgBox " Merci de saisir l'ensemble des données, avant de sauvegarder... "

End Sub
 
W

William

Guest
Re-bonjour Valou et le Forum.

Si quelqu'un a une idée pour améliorer cette macro, je suis preneur !!

Notamment, ce pourrait être sympa de bloquer l'accès à l'éditeur VB pour ce fichier, de façon à ce que personne ne puisse trouver le mot de passe (il s'agit de 1 dans l'exemple ci-dessus...)

A bon entendeur....

Merci d'avance.

...Salut.

William
 
J

Jacques

Guest
Bonsoir William

Pour protéger les codes VBA, dans la fenêtre de l'explorateur de projet, tu clique avec le bouton droit sur VBAproject et tu choisi dans le menu contextuel "propriété de VBAproject". Là tu as un onglet protection qui te permet de mettre un mot de passe pour pouvoir afficher le code

Voilà bonne soirée
 
W

William

Guest
Bonjour à Tous,

Waouh, trop fort le Jacques !!

Je commence à comprendre le VBA, mais je manque sérieusement de base !


J'essayais de trouver une macro pour faire disparaître le code...

Merci Jacques,

@+

William
 
J

Jacques

Guest
Bonsoir à tous, Bonsoir Thierry

Pour revenir à notre problème d'affichage de notre Userform, la procédure Initialize se lance dès que le Userform se charge. C'est ce qui se passe quand tu fais Userform.Show.

Mais c'est également ce qui ce passe quand tu mets dans ta procédure principale With Userform2 car c'est comme si tu avais mis Userform.Load.

Cependant là où mon explication n'allait pas , c'est qu'il ne faut pas faire le calcul avec les unités de la taille d'écran.
En effet pour un affichage en 1024x768 comme c'est mon cas, la taille maxi de l'userform que l'on peut afficher est de 765x560.

Il faut donc faire les calcul avec cette taille là.
donc dans la procédure Initialize on aurait pour un affichage en bas à droite
With UserForm1
.Left = 765- .Width
.Top = 560 - .Height
.StartUpPosition = 0
End With
Sans oublier bien sûr le .StartUpPosition = 0 (que tu as oublié dans le Userform1 de ta démo - ce qui fait que la boîte de dialogue s'affichait au centre de l'écran puisque la valeur de ce paramètre était 2

Voilà pour ce soir je crois que j'ai à peu près fait le tour de la question

Bonne nuit
 
@

@+Thierry

Guest
Bonsoir Jacques et le Forum

Heuh oui, je n'ai rien oublié du tout..... je n'ai fait que copié/collé ce que tu avais posté à 16-02-03 15:59

Maintenant avec cette explication complémentaire, je contaste que la méthode telle que tu viens de l'écrire maintenant fonctionne, mais je ne pouvais pas l'imaginer, puisque tu ne parlais pas de .StartUpPosition = 0 dans ton post.
Merci pour ce complément d'info.

Ceci dit, sur un 19tft il reste vers milieu le UserForm !! lol et si je change il y a intérêt à être précis car au lieu de ne pas voir le UserForm à l'écran çà plante Excel sans aucun message (contrairement à UserForm.Show, où il suffit de faire ALT F4, si le UserForm n'apparaît pas lors des tests que j'ai fait pour cette démo). Et par conséquent je pense que l'initialise est toujours une méthode douteuse pour placer le UserForm.

Mais pour "Cut this Story Short" je dirais qu'on peut utiliser cette méthode si on a "oublié" de paramétrer la position avant, dans le UserForm.Show, qui est tout de même la méthode utilisée par les programmeurs.

Bonne Soirée
@+Thierry
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 184
dernier inscrit
amiko