Verrouiller, Déverrouiller et Autoriser le filtre et le copie/collé

Bonjour,

Dans un classeur Excel j'ai déjà un programme qui me de copier et coller des données de ma feuille "Feuil3" vers une autre, J'ai protégé cette feuille pour que personne ne puisse modifier le contenu des cellules. Le problème est que une fois protéger ma macro qui copie et colle mes données dans une autre feuille ne s'exécute plus et je reçois un message me disant que je ma macro ne peut pas s'exécuter sur dans une feuille protégé, je dois au préalable la déverrouiller pour pouvoir faire mon copié/collé. J'ai essayé tout ce que j'ai trouvé sur le net mais rien ne marche.

image

Que j'utilise un code pour verrouiller la feuille:

Sub Vér()
ActiveSheet.Protect "3579" 'Verrouille la feuille 3'
End Sub

Sub Dév()
ActiveSheet.Unprotect "3579" 'Déverrouille la feuille 3'
InputBox ("Saisisser le mot de pass")
End Sub

Ou que je passe par l'outil "Protéger la feuille" et autorisant les tris et les filtres, une fois la feuille verrouillée la macro ne s'exécute plus.

image

Et j'ai un autre problème, qui es que lorsque j'utilise le code ci-dessus pour verrouiller ma feuille, pour le déverrouillage on ne me demande pas d'insérer le mot de passe la feuille se déverrouille juste, donc pour palier à ce problème j'ai ajouter "InputBox" pour la saisie du mot de passe mais même si on ne saisie pas le mot de passe dans la zone de saisie, il suffit de cliquer sur OK pour que la feuille se déverrouille.

Je vous remercie d'avance pour votre aide.

cordialement

Bonjour,

Je vous transmet le classeur.

Cordialement

12test.xlsm (36.82 Ko)

Bonjour

Apparemment ce que je vous ai proposé ici --> https://forum.excel-pratique.com/s/goto/970458 ne sert à rien puisque vous avez tout changé ...

Votre fichier en retour

18test.xlsm (30.16 Ko)

Cordialement

Edit : j'ai remplacé VAL par VALEUR dans le code. Evitez d'utiliser le nom de fonctions VBA dans vos variables.

Bonjour,

ajouté

Sheets("feuil3").Unprotect Password:="3579"

en début de code et

Sheets("feuil3").protect Password:="3579"

en fin de code

*edit: trop lent, bonjour dan

Bonjour,

"Apparemment ce que je vous ai proposé ici --> https://forum.excel-pratique.com/s/goto/970458 ne sert à rien puisque vous avez tout changé "

Pas du tout Dan votre aide m'a servie pour un autre fichier, ce fichier que je présent en juste un fichier Test mais les fichiers sur lesquels j'applique tous ce que j'apprend de vous sont très différents de celui là.

Cordialement

Ok.

NB : Lorsque vous copier un écrit venant d'un post précédent, vous pouvez coller cet écrit dans la fenetre qui s'ouvre en cliquant sur l'icone "Citation" dans la barre de menu.

Vous avez testé le fichier posté ?

Bonjour,

Vous avez testé le fichier posté ?

Oui je suis entrain de le tester, lorsque je fait afficher le formulaire d'extraction et que j'ai choisie mon atelier une fois que je clique sur le bouton "Test" pour l'extraction on me demande de mettre le mot de passe une fois que je clique sur annuler, le copié/collé marche et la feuille reste verrouillé.

Merci !

cordialement

re

.... on me demande de mettre le mot de passe une fois que je clique sur annuler, le copié/collé marche et la feuille reste verrouillé

Pas sur d'avoir bien compris. Mais pour le code de déverrouilage je ferai plutot ceci

Sub Dev()
Dim Message As String, Title As String
Dim mdp
Message = "Saisissez le mot de passe"
Title = "Mot de passe"
mdp = Application.InputBox(Message, Title, Type:=1)
If vbYes = True And mdp = "3579" Then
    ActiveSheet.Unprotect "3579"
End If
End Sub

Bonjour,

Merci pour le code je l'ai mis dans mon module à la place du précédent.

Ce que tu me propose marche mais avant de pouvoir faire l'extraction je dois au préalable déverrouiller la feuille.

image

Si je ne saisie pas le code et que je clique sur annuler je reçois une message.

image

Or ce que j'aimerai c'est de pouvoir faire l'extraction sans avoir à déverrouiller la feuille.

Le but est que celui qui a besoin de faire l'extraction puisse la faire sans pour autant pouvoir modifier la feuille.

Cordialement

bon, je retente ma chance une dernière fois ...

22test.xlsm (29.68 Ko)

Bonjour,

bon, je retente ma chance une dernière fois ...

ça fonctionne Numéro 2.

Même quand la feuille est verrouillé l'extraction se fait sans que j'ai besoin de la déverrouiller

Merci !

Cordialement

Bonjour,

Pour le mot de passe, remplacez le code que je vous ai donné dans mon post précédent par celui ci-dessous :

Sub Dev()
Dim Message As String, Title As String
Dim mdp

Message = "Saisissez le mot de passe"
Title = "Mot de passe"

mdp = Application.InputBox(Message, Title)
If mdp = 0 Then
    MsgBox "Vous avez annulé": End
ElseIf mdp = "" Then
    MsgBox "Vous n'avez rien saisi": Call Dev
ElseIf mdp = "3579" Then
    ActiveSheet.Unprotect "3579"
ElseIf mdp <> "3579" And mdp <> "" Then
    MsgBox "Mauvais mot de passe": Call Dev
End If
End Sub

Faites le test sur le fichier que je vous ai envoyé bien entendu

Cordialement

Bonjour,

Pour le mot de passe, remplacez le code que je vous ai donné dans mon post précédent.

Faites le test sur le fichier que je vous ai envoyé bien entendu

J'ai remplacé le code et j'ai fait le test avec le fichier que vous m'aviez envoyé.

Voici ce que j'ai remarqué:

-On me demande toujours de mettre le code avant de pouvoir réaliser l'extraction, de plus

-même lorsque la page n'est pas verrouillé pour faire l'extraction on me demande aussi de saisir le mot de passe et si je ne le fais pas l'extraction ne se fait pas.

cordialement

re

On me demande toujours de mettre le code avant de pouvoir réaliser l'extraction,

Ben c'est normal cela non ?

-même lorsque la page n'est pas verrouillé pour faire l'extraction on me demande aussi de saisir le mot de passe et si je ne le fais pas l'extraction ne se fait pas.

Mettez --> CALL VER juste entre Dim mdp et la ligne Message = .....
De cette manière vous êtes sûr de toujours partir d'une feuille verrouillée

re

Ben c'est normal cela non ?

Excusé moi je crois que je n'es pas été clair dans mes explication et donc je vous ai fait perdre du temps, je vais essayer de réexpliquer en espérant être claire cette fois-ci.

Le fichier sera utilisé par plusieurs personne or j'aimerais qu'il n'y ai qu'une seuls personne qui puisse avoir le mot de passe pour qu'elle soit la seule à pouvoir faire des modifications sur cette feuille source.

- Ce que je veux c'est de pouvoir faire l'extraction même si la feuille est verrouillé sans avoir besoin de saisir le mot de passe.

- Et de déverrouiller la feuille si j'on ai vraiment besoin pour modifier les valeurs, ajouter des lignes des colonnes ou en supprimer.

Cordialement

Re

- Ce que je veux c'est de pouvoir faire l'extraction même si la feuille est verrouillé sans avoir besoin de saisir le mot de passe.

Il vous suffit de supprimer CALL DEV au début de la macro Private Sub CommandButton2_Click()

- Et de déverrouiller la feuille si j'on ai vraiment besoin pour modifier les valeurs, ajouter des lignes des colonnes ou en supprimer.

C'est le bouton bleu qui est lié à la macro Sub DEV qui le fera avec demande de mot de passe

Edit : attention que dans le code Private Sub CommandButton2_Click(), il va falloir déprotéger la feuille
il faudrait mettre ceci --> .Unprotect "3579" juste en dessous de With Worksheets("Feuil3")

Pour éviter cette instruction, ce sont les lignes de code en dessous qui sont à changer. Je n'ai pas fait le code et bien que je ne comprenne pas le pourquoi de passer par un filtre des données pour les copier suivant l'atelier choisi, je n'y ai pas touché

Bonjour,

Merci Dan ça fonctionne parfaitement.

Cordialement

Bonjour

Merci Dan ça fonctionne parfaitement.

Parfait.

Sinon on peut aussi simplifier un peu pour les mots de passe afin que si vous voulez le changer on ne le change qu'à un seul endroit

Cordialement

Bonjour,

Sinon on peut aussi simplifier un peu pour les mots de passe afin que si vous voulez le changer on ne le change qu'à un seul endroit

Ça m'intéresse de savoir comment faire s'il vous plaît !

Cordialement

Ça m'intéresse de savoir comment faire s'il vous plaît !

sur base de votre fichier Test posté ici, faites ceci :

- En entête du module 1 (juste avant la ligne Sub AfficheUserForm() --> important !), mettez cette instruction

Public Const admin As Integer = "3579"

- Ensuite remplacer dans tous les codes le "3579" par admin (attention vous ne devez pas avoir de guillemets au début et à la fin de admin)

A noter que :
- si vous changez le mot de passe 3579 par un autre vous devez toujours avoir les guillemets devant et derrière (comme ci-dessus)
- j'ai choisi le mot admin mais vous pouvez mettre autre chose si vous voulez (genre C2L ou toto ou titi....)
- vous ne pouvez pas utiliser le mot mdp qui lui est déjà déclaré en variable dans le code

Cordialement

Rechercher des sujets similaires à "verrouiller deverrouiller autoriser filtre copie colle"