Protéger une feuille contre des actions maladroites

Aloha

XLDnaute Accro
Bonjour,

Je produis tous les mois (par VBA) pour chaque salarié (80) une fiche où iul/elle introduit ses heures de travail, de congé, de maladie etc. et qui fait tous les calculs requis, ces calculs étant acttualisés (c.-à-d. qu'ils tiennent compte des heures recueillies les mois précédents depuis janvier).

Comme certaines personnes sont incroyablement maladroites avec la souris, ils arrivent toujours à apporter aux fiches des modifications involontaires mais fâcheuses.

Je joins un modèle de fiche.

Les cases sont composées en réalité de 2 cases superposées fusionnées. Malheureusement il est toujours possible de sélectionner une demi-case (ce que j'ai du mal à comprendre, puisqu'elles ont fusionné et ne constituent plus qu'une seule cellule!). La raison en est que dans la partie de droite de chaque feuille, comportant les calculs et que j'ai dû supprimer pour des raisons de taille de fichier à joindre, j'avais besoin du double de lignes de la partie droite; je n'ai pas trouvé d'autre solution que de fusionner toutes les cellules à gauche pour en avoir le double à droite. Dans ce contexte je serais très intéressé de savoir s'il y aurait un autre moyen de résoudre ce problème!

Il arrive que des personnes déplacent, sans le vouloir, encore une fois, des cellules, modifiant ainsi les formules dans la colonne AD (les formules sur la fiche donnent des messages d'erreur parce qu'il y a des cellules qui manquent; j'ai dû les supprimer pour satisfaire la contrainte de la taille maximale d'un fichier à joindre à ce message).
A vrai dire, je ne sais pas trop si, en déplaçant des cellules, on peut modifier une formule, mais le fait est que régulièrement des formules sont modifiées (décalage de la référence à des cellules dans les formules). Comment faut-il s'y prendre pour modifier une formule involontairement, par la simple manipulation maladroite de la souris?

Un exemple tel qu'il s'est produit:
La formule originale et exacte:
=NB.SI(F17:K17;"X")/2+NB.SI(L17:AA17;"X")+NB.SI(AB17:AC17;"X")/2

a été modifiée comme suit:
=NB.SI(F17:K17;"X")/2+NB.SI(L17:AB17;"X")+NB.SI(AA17:AB17;"X")/2

(pour la meilleure compréhension de la formule: les heures (introduites en tant que X) de 0 h à 6 h comptent à moitié, celles de 6 h à 22 h en entier et celles de 22 h à 0 h à moitié)

J'ai construit un exemple dans le fichier joint: la formule de la cellule AD19 est fausse et celle de la cellule AD21 est exacte.

Ma question:

y a-t-il un moyen de protection (action à intégrer dans mon code VBA) empêchant les personnes de faire ce genre de manipulations (sur les cellules et les formules) tout en leur permettant d'introduire les données?


Excel 2003

Merci d'avance pour toute aide.

Aloha
 

Pièces jointes

  • Classeur2.zip
    13.9 KB · Affichages: 45
  • Classeur2.zip
    13.9 KB · Affichages: 47
  • Classeur2.zip
    13.9 KB · Affichages: 40

ERIC S

XLDnaute Barbatruc
Re : Protéger une feuille contre des actions maladroites

re

si la proposition d'excel par défaut (cocher sélection cellules verrouillées et déverrouillées), cela doit fonctionner (j'ai fait quelques essais sous 97)

si tu valides d'autres options, ou si tu décoches sélection cellules verrouillées elles ne seront pas prises en compte

donc une protection par défaut est reconnue
 

Aloha

XLDnaute Accro
Re : Protéger une feuille contre des actions maladroites

Salut,

J'ai protégé la feuille en n'autorisant l'utilisateur qu'à sélectionner les cellules déverrouillées, ce qui n'empêche hélas pas de déplacer les cellules. N'existe-t-il pas un moyen par VBA, puisque je dois de toute façon l'intégrer dans mon code?

J'ai enregistré les actions en macro et je l'ai intégré dans mon code, qui l'accepte mais ne fait pas ce que je veux.

Voici cette partie de code:

Sub(xy)
....
Dim wsSheet as Worksheet
....
For Each wsSheet In ActiveWorkbook.Worksheets
wsSheet.Range("A1:BB70").FormulaHidden = True
wsSheet.Range("F5:AC66").VerticalAlignment = xlCenter
Sheets(wsSheet).Protect.DrawingObjects := True, Contents := True, Scenarios := True, AlowFormattingCells := False, AllowFormattingColumns:= False
Sheets(wsSheet).EnableSelection = xlUnlockedCells

Le "sheets(wsSheet)", c'est moi qui l'ai ajouté, mais, même si Excel avale cette grenouille, je doute que ça soit exacte!?

Et je viens de m'apercevoir qu'il n'avale pas la ligne:

"Sheets(wsSheet).Protect.DrawingObjects := True, Contents := True, Scenarios := True, AlowFormattingCells := False, AllowFormattingColumns:= False"

dans laquelle j'ai ajouté manuellement la partie:

"AllowFormattingCells := False, AllowFormattingColumns:= False" .

Une chose que je ne comprends pas: comment est-ce possible que l'on puisse annuler la fusion de 2 cellules en ne faisant rien d'autre qu'une (mauvaise) manipulation de la souris au niveau des cellules, alors qu'il fallait utiliser une commande pour les fusionner?

Aloha
 
Dernière édition:

Aloha

XLDnaute Accro
Re : Protéger une feuille contre des actions maladroites

personne ne semble avoir une idée!:(

Ou bien y a-t-il une autre raison pour laquelle les nombreuses personnes qui ont répondu ne disent mot maintenant?

Est-ce trop compliqué? Etes-vous tous partis en vacances? Mes explications ne sont elles pas assez claires? Ou bien se pourrait-il que je vous énerve parce que je ne "lâche pas prise"?

Faites-le moi savoir svp.

Sinon, bon weekend et encore une fois un grand merci pour votre aide.

Aloha
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 379
Messages
2 087 768
Membres
103 662
dernier inscrit
rterterert