Protection de feuille et macro
Bonjour à tous,
j'aurais besoin d'un petit coup de main par rapport à mon fichier excel.
J'essaie de créer un formulaire d'approbation, dans ce fichier il y a deux parties à remplir par 2 services différents.
J'ai donc fait en sorte que chaque service peut modifier sa zone sans aller modifier l'autre zone (grâce à ce tutoriel si ça peut aider quelqu'un : http://excelunplugged.com/2015/03/03/allow-users-to-edit-ranges-in-excel/).
Je rencontre deux problèmes suite à ça :
1. la restriction de la plage1 ne fonctionne pas complètement : à partir de la ligne 12 je peux quand même écrire sans avoir besoin de rentrer un mot de passe
(pour la plage2 ça fonctionne sans problème)
2. la protection de la feuille empêche l’exécution de la macro.
Quelqu'un aurait-il une idée pour le probleme 1 et 2 ?? Je joins un fichier exemple pour vous aider.
le mot de passe pour ouvrir le fichier : 123
pour ôter la protection : 123
mot de passe de la plage 1 : plage1
mot de passe de la plage 2 : plage2
Un grand merci à vous.
bonsoir,
Visiblement les cellules ne sont pas verrouillées à partir de la ligne 12.
A+
Salut
regarder ca
Autoriser la modification des cellules dans une feuille de calcul protégée
Lorsque vous protégez une feuille de calcul, toutes ses cellules sont verrouillées par défaut, ce qui signifie qu'elles ne peuvent pas être modifiées. Pour permettre la modification de cellules tout en conservant le verrouillage de certaines d'entre elles, vous pouvez déverrouiller les cellules, puis verrouiller des cellules et des plages spécifiques avant de procéder à la protection de la feuille de calcul. Vous pouvez également permettre à certains utilisateurs de modifier des plages spécifiques d'une feuille de calcul protégée.
et ca
Sélectionnez la feuille de calcul que vous souhaitez protéger.
Pour déverrouiller les cellules ou les plages que d'autres utilisateurs pourront modifier, procédez comme suit :
Sélectionnez chaque cellule ou plage que vous souhaitez déverrouiller.
Sous l'onglet Accueil, dans le groupe Cellules, cliquez sur Format, puis sur Format de cellule.
Dans l'onglet Protection, désactivez la case à cocher Verrouillé , puis cliquez sur OK.
"pour le probleme 2 ??"
moi je utilise:
au début de la procedure je met
Worksheet.UnProtect (MotDePasse)
puis a la fin de procedure je met
Worksheet.Protect (MotDePasse, ObjetsDessin, Contenu, Scénarios, InterfaceUtilisateurUniquement, AutoriserCellulesMiseEnForme, AutoriserColonnesMiseEnForme, AutoriserLignesMiseEnForme, AutoriserInsertionColonnes, AutoriserInsertionLignes, AutoriserInsertionLiensHypertexte, AutoriserSuppressionColonnes, AutoriserSuppressionLignes, AutoriserTri, AutoriserFiltrage, AutoriserUtilisationTableauxCroisésDynamiques)
Bonjour,
Merci pour vos réponses. Effectivement j'avais simplement oublié de cocher verrouillé pour les cellules.
Cependant pour le code ca ne fonctionnait pas mais ce n'est pas grave j'ai simplement supprimer la protection de la feuille.
Par contre j'avais une petite question concernant la macro : Peut-on faire en sorte qu'elle s’exécute pour plusieurs cellules.
Dans mon cas, lorsque le type de Log est choisi cela doit afficher ou non des colonnes.
Par la suite il remplit le formulaire en ajoutant des montants. Maintenant j'aimerai simplement faire en sorte d'afficher certaines ligne a condition que le total (cellule E9 ou F9) soit supérieur a un certain montant.
Malheureusement je ne peux pas avoir plusieurs Private Sub Worksheet_Change(ByVal Target As Range) sur la même feuille et lorsque je met toutes les macros dans la même ça ne fonctionne pas.
Je vous joins mon fichier pour que vous pussiez voir ce que j'ai fais.
Merci pour votre aide.
bonsoir,
Essaie comme ça : je dois pas être loin du compte...
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iR%, iC%, isect
Application.ScreenUpdating = False
If Target.Count = 1 Then
Set isect = Application.Intersect(Target, Range("B10"))
If Not isect Is Nothing Then
If Target.Value = "Accident" Then
Columns("J:AD").EntireColumn.Hidden = False
Cells(10, 3).Value = "Merci d'ajouter les photos sur votre droite"
ElseIf Target.Value = "Usage inapproprié" Then
Columns("J:AD").EntireColumn.Hidden = False
Cells(10, 3).Value = "Merci d'ajouter les photos sur votre droite"
ElseIf Target.Value = "Réparation normal" Then
Columns("J:AD").EntireColumn.Hidden = True
Cells(10, 3).Value = ""
ElseIf Target.Value = "Demande spéciale" Then
Columns("J:AD").EntireColumn.Hidden = True
Cells(10, 3).Value = ""
End If
End If
Set isect = Application.Intersect(Target, Range("E9"))
If Not isect Is Nothing Then
If Target.Value > 4000 Then
Rows("39:53").EntireRow.Hidden = False
End If
End If
Set isect = Application.Intersect(Target, Range("F9"))
If Not isect Is Nothing Then
If Target.Value > 8000 Then 'à vérifier
Rows("39:53").EntireRow.Hidden = False
End If
End If
End If
End SubA+
Bonjour,
Merci à toi malheureusement ça ne fonctionne pas. La première partie fonctionne (type de log avec les colonnes qui apparaissent ou disparaissent) mais ensuite lorsque je rajoute un montant supérieur à 4000 cela ne m'affiche pas les lignes.
J'essai de comprendre ce que tu as fais et peut être que mes interrogations vont t'aider :
1. tu déclare iR%, iC%, isect mais sans préciser si c'Est string, boolean etc.
2. De plus, iR%, iC% ne sont pas utilisé, a quoi correspondent ces éléments ?
Je vais continuer à jouer avec ça en attendant.
Merci
bonjour,
ne t'inquiète pas pour ces déclarations (tu peux les supprimer) % accolé à ces variables signifie as integer.
lorsque je rajoute un montant supérieur à 4000 cela ne m'affiche pas les lignes
Quand tu rajoute un montant supérieur à 4000 ou ? en E9 ?
Ben... Je n'avais pas compris !
Tu peux essayer de remplacer
Set isect = Application.Intersect(Target, Range("E9"))
If Not isect Is Nothing Then
If Target.Value > 4000 Then
Rows("39:53").EntireRow.Hidden = False
End If
End If
Set isect = Application.Intersect(Target, Range("F9"))
If Not isect Is Nothing Then
If Target.Value > 8000 Then 'à vérifier
Rows("39:53").EntireRow.Hidden = False
End If
End If...par :
Set isect = Application.Intersect(Target, Range("E9"))
If Not isect Is Nothing Then
Rows("39:53").Hidden = IIf(Target.Value > 4000, False, True)
End If
Set isect = Application.Intersect(Target, Range("F9"))
If Not isect Is Nothing Then
Rows("39:53").Hidden = IIf(Target.Value > 8000, False, True)
End IfAvec la même réserve pour le seuil de 8000 que j'ai mis au hasard...
A+
Désolé j'ai peut être pas été assez clair mais j'ai joins le fichier pour que vous pussiez voir directement.
En E9 et F9 ce sont des totaux : je ne dois rien écrire dans ces cellules : elles s'incrémentent automatiquement en fonction des montants rentrés dans les cellules E..(E14, E16 etc, de même pour F)
L'objectif est de faire en sorte que dés que le total (en E9 pou F9) atteint un montant (dans mon exemple 4000) les lignes 39 à 53 apparaissent.
L,'idée c'était de faire un worsheet_change pour E9 et F9 mais sachant que j'ai déjà un worksheet_change pour B10 j'essaie de trouver un façon d'utiliser le worksheet_change pour plusieurs cellules.
J'espere avoir été plus clair.
J'ai essayé de remplacer le code par le nouveau mais rien ne change.
Merci pour ton temps en tout cas.