XL 2010 multiples protections à reconduire sur plrs tableaux

Caroline ;-))

XLDnaute Junior
Bonjour !

Je dispose d’un onglet contenant de multiples petits tableaux que mes correspondants doivent remplir. Je souhaiterai mettre des protections sans pour autant empêcher les correspondants de saisir leurs données.

Ainsi :
- ne pas autoriser à insérer / supprimer col / ligne
- ne pas autoriser à afficher / modifier les colonnes masquées (colonnes de A à H, puis col S sont masquées)
- ne pas autoriser à rentrer les lettres : toutes les cellules des tableaux doivent être remplies par des chiffres (par défaut, il y a un zéro)
o sauf dans l’encart situé à la ligne 4 pour rentrer le nom de la région et l'encart situé à la ligne 314 pour permettre les commentaires
- ne pas avoir de cellule vide

Pour les 2 premiers points, c’est facile : j’ai utilisé > Révision > Modifications > Protéger la feuille

Pour les 2 derniers points, ils sont aussi faciles à réaliser :
- interdire les cellules vides dans les tableaux : Accueil > Style > Mise en forme conditionnelle > « Appliquer une mise en forme uniquement aux cellules qui contiennent » : Cellules vides ==> mettre une couleur dans le fond de cellule
upload_2017-12-14_14-55-25.png


- autoriser que des chiffres : Données > Outils de données > Validation des données
upload_2017-12-14_14-55-50.png


===> Le problème est que ces 2 dernières manipulations doivent être réalisées sur tous les tableaux…imaginons qu’il y ait 40 tableaux…cela devient @ !!#& !

Si j’utilise l’outil « Reproduire la mise en forme »
upload_2017-12-14_14-56-34.png

Seule la mise en forme conditionnelle est reproduite mais on peut toujours mettre des lettres dans les cellules des tableaux !

Est-ce qu’il y a moyen de créer une fonction personnalisée qui permettrait de réaliser toutes ces manipulations, en une fois, juste en précisant les cellules sur lesquelles la fonction devraient être appliquée ?
Ou si vous avez d'autres astuces, je suis preneuse ! Merci de votre aide !
 

Pièces jointes

  • Forum_protections.xlsm
    39.3 KB · Affichages: 35

Rouge

XLDnaute Impliqué
Bonjour,
voici, la macro s'exécute à l'ouverture du classeur. J'ai créer une feuille "Liste" ou se trouvent toutes les plages des différents tableaux, il suffit de la modifier ou de la compléter si besoin. La macro se sert de cette liste pour refaire les MFC ainsi que les validations de données. Si vous modifiez cette liste, il fermer et ré-ouvrir le fichier pour quelles soient prises en compte.
https://www.cjoint.com/c/GLrgjxkVSBw
Cdlt
 

zebanx

XLDnaute Accro
Bonjour Caroline, bonjour Rouge

Pour donner une idée sur les protections possibles de plages, j'organiserai ma feuille en fonction de colorindex comme présenté dans la feuille ci-jointe.

Le but est de mêler une protection globale (macro) sur toutes les cellules verrouillées (pas de modification de l'organisation de la feuille) avec une saisie possible uniquement sur les cellules dont le fond est blanc et de la compléter par une privatesub qui empêche, sauf en colonne1, de saisir des lettres.

A organiser suivant votre tableau.

++
zebanx
 

Pièces jointes

  • classeur_test_protection_feuille.xls
    266.5 KB · Affichages: 17
Dernière édition:

Caroline ;-))

XLDnaute Junior
Bonjour Rouge,
Merci pour ta macro. C'est une bonne idée que de créer un onglet où on liste les cellules de tableaux à protéger.
Il y a bien un message d'alerte quand on tape autre chose qu'un décimal.
Par contre, si on met une cellule à vide (on supprime la valeur), la mise en forme conditionnelle adéquat ne s'affiche pas.
Est-ce qu'il y a moyen de rectifier ça ? Merci et bonne journée !
 

Caroline ;-))

XLDnaute Junior
Bonjour Zebank,
Merci pour ton appli...heuu mais je n'ai rien compris :confused:
mais bon, j'ai une grippe carabinée : ceci explique peut-être cela ...
J'ai essayé de faire les différentes étapes et je suis bloquée. J'ai le message suivant :
quand j'active la macro "saisie"
upload_2017-12-19_11-21-48.png

Tu peux m'aider ? Merci.
 

Rouge

XLDnaute Impliqué
Bonsoir,
Voici la petite correction:
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Set ShMod = Sheets("modele")
Set ShList = Sheets("Liste")
DerLigList = ShList.[C1000].End(xlUp).Row
For i = 2 To DerLigList
Pos = ShList.Cells(i, "C")
Pos2Pts = InStr(1, Pos, ":", 1)
Cell = Left(Pos, Pos2Pts - 1)
Formule = Cell & "="""""
ShMod.Range(Pos).FormatConditions.Delete
Range(Pos).FormatConditions.Add(xlCellValue, xlEqual, "=" & Formule).Interior.ColorIndex = 6
With Range(Pos).Validation
.Delete
.Add Type:=xlValidateDecimal, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="0", Formula2:="1000000"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
Next i
End Sub

Cordialement
 

zebanx

XLDnaute Accro
Bonsoir Rouge, bonsoir Caroline.

L'approche est différente de celle de Rouge.

Je pensais que la priorité était donnée pour protéger le fichier envoyé, c'est pour cela que je me suis intéressé à un paramétrage de couleurs et à bloquer toute la matrice par un mot de passe pour le reste.

Il faut respecter certaines étapes. Je vais retravailler sur ton fichier... demain et voir ce qui est possible.

Bonne nuit.
zebanx

PS : pouvez-vous me confirmer stp que les champs "string" ne sont pas modifiables sur les tableaux (ie : colonne I) en dehors des lignes 4 et 314 ?
 
Dernière édition:

Caroline ;-))

XLDnaute Junior
Bonjour Zebanx,

Janvier = bûches, galettes des rois, gâteaux de toutes sortes et aussi les vœux !
Une très belle année 2018 !

Merci pour ton fichier qui fonctionne, il faut suivre les différents points de ta procédure mais quand j’essaye de l’appliquer sur mon véritable fichier…oups, ça ne marche plus.

Pourtant, j'ai :
- récupéré ton vba,
- laissé en blanc, les cellules des tableaux sur lesquelles il doit y avoir les protections
- mis un couleur de fonds où il ne doit pas y avoir de protection (sommes)
- puis ai suivi ta procédure…

Voilà, il y a quelque chose qui cloche ?

Merci.
 

zebanx

XLDnaute Accro
Bonjour Caroline (et le forum)

Merci et bons voeux pour 2018 également.

Le même process en gardant le fichier du #1.

Récapitulons les étapes sous excel 2003 (mais ça devrait fonctionner de la même manière sur les versions ultérieures) :
- copie de la sheet "modèle" et mise à l'écran de quelques colonnes non masquées
- tout en gris
- toutes les cellules sont cochées en "format - cellule - verrouillées" sauf I1 et J4 qui sont à déverrouillées.
- mise en blanc des zones sur le tableau que les intervenants peuvent modifier

- sélection d'une seule case (dans outil - protection - protéger la feuille) et cocher uniquement la deuxième case "sélectionner les cellules déverrouillées" (ie : cela revient à décocher la première case "sélectionner les cellules verrouillées")
- ne pas mettre de mot de passe et sortir
A cette étape, vous ne pouvez aller que dans les cellules déverrouillées c'est-à-dire I1 et J4

- ôter la protection de la feuille (outil - protection). Toutes les cases sont sélectionnables à nouveau.
- lancer la macro soit à partir du bouton soit ALT+F8

résultat : on ne peut accéder qu'aux cellules en blanc. Vous pouvez toujours accéder à la matrice avec votre mot de passe.

Je ne sais pas après où ça pourrait clocher et espère que tout ira bien à partir de ce fichier.

Ici le résultat final mais on peut repartir du départ en ôtant la protection de la feuille, en verrouillant à nouveau toutes les cellules et recommencer le process.

++ zebanx


ps :
- Remarque #5 : "on error resume next" rajouté dans le code.
- pour naviguer dans les cellules déverouillées, on part de la première cellule (I1) ou de la dernière (P375) et on utilise les flèches de direction (gauche - droite) qui vous amènent soit en bas soit en haut du document : pratique !
 

Pièces jointes

  • fichier_2.xls
    221 KB · Affichages: 17
Dernière édition:

Rouge

XLDnaute Impliqué
Bonjour et meilleurs voeux à tous,
Concernant le post 9, ou le programme s'arrête sur la ligne "Cell = Left(Pos, Pos2Pts - 1)",
Sur la ligne surligée en jaune, passez avec la souris sans cliquer dessus, sur les éléments suivants ; "Pos" et "Pos2Pts".
"Pos" vous donne l'adresse de la plage traitée.
"Pos2Pts" donne la position des 2 points dans l'adresse trouvée par "Pos"
Un de ces 2 éléments est mauvais, commencez par regarder dans la feuille "liste" et observez chaque plage d'adresse en colonne C, les formats de plages sont-ils tous identiques?, Regardez aussi dans votre feuille "Modèle" à l'adresse indiqué par "Pos", quel est l'élément qui pourrait perturber le programme.
Et dites moi ce que vous trouvez?
Cdlt
 

Discussions similaires

Statistiques des forums

Discussions
311 730
Messages
2 081 989
Membres
101 856
dernier inscrit
Marina40