mise en forme

cmalifarge

XLDnaute Nouveau
Bonjour à tous,
j'ai un tableau qui sert à plusieurs utilisateurs pour rentrée des données des quantités pour être plus précis.
Exemple M. X rentre des données en A1 et M. Y rentre des données en B2.
J'aimerai qu'une fois ses données rentrées si M.X revient sur le tableau après enregistrement et fermeture du fichier les modifier elles apparaissent par exemple en rouge. Je veux en fait m'assurer que les données saisies ne soient modifiées par la suite tout en laissant le tableau accessible à d'autre utilisateurs.
Pensez vous que cela soit réalisable via une macro et si oui laquelle?

Merci pour votre aide
 

job75

XLDnaute Barbatruc
Bonjour cmalifarge, Philippe, le forum,

Colorer les cellules n'apporte pas grand-chose.

Si le fichier est utilisé par plusieurs utilisateurs on peut autoriser des plages pour chacun.

Placer cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim NomOrdi, AdressePlage, i As Variant, plage As Range
NomOrdi = Array("User", "Bernard", "Julie") 'noms des ordinateurs autorisés, à adapter
AdressePlage = Array("A2:A100", "B2:B100", "C2:C100") 'adresses des plages autorisées, à adapter
i = Application.Match(Environ("UserName"), NomOrdi, 0)
Application.EnableEvents = False 'désactive les évènements
If IsError(i) Then MsgBox "Vous n'avez pas le droit de modifier des cellules !", 48: GoTo 1
If Target.Count > 1000 Then MsgBox "Nombre de cellules modifiées trop grand !", 48: GoTo 1
Set plage = Range(AdressePlage(i - 1))
For Each Target In Target
  If Intersect(Target, plage) Is Nothing Then MsgBox "Vous n'avez pas le droit de modifier ces cellules !", 48: GoTo 1
Next
GoTo 2
1 Application.Undo
2 Application.EnableEvents = True 'réactive les évènements
End Sub
"User" est le nom de mon ordi, si vous ne connaissez pas le nom du vôtre exécutez :
Code:
Sub a()
MsgBox Environ("UserName")
End Sub
A+
 

job75

XLDnaute Barbatruc
Re,

Pour éviter qu'un des utilisateurs déplace les cellules par suppression il faut protéger la feuille.

En ayant d'abord déverrouillé toutes les cellules autorisées.

Alors cette instruction n'est normalement plus nécessaire :
Code:
If Target.Count > 1000 Then MsgBox "Nombre de cellules modifiées trop grand !", 48: GoTo 1
A+
 

job75

XLDnaute Barbatruc
Re,

Ceci est nettement mieux, placer dans ThisWorkbook :
Code:
Private Sub Workbook_Open()
Dim NomOrdi, AdressePlage, i As Variant
With Feuil1 'CodeName de la feuille, à adapter
  NomOrdi = Array("User", "Bernard", "Julie") 'noms des ordinateurs autorisés, à adapter
  AdressePlage = Array("A2:A100", "B2:B100", "C2:C100") 'adresses des plages autorisées, à adapter
  .Protect "toto", UserInterfaceOnly:=True 'mot de passe à adapter
  i = Application.Match(Environ("UserName"), NomOrdi, 0)
  If IsNumeric(i) Then .Range(AdressePlage(i - 1)).Cells.Locked = False 'déverrouille la plage autorisée
End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Feuil1 'CodeName de la feuille, à adapter
  .Protect "toto", UserInterfaceOnly:=True 'mot de passe à adapter
  .Cells.Locked = True 'verrouille toutes les cellules
End With
Save 'enregistrement
End Sub
Protéger le VBAProject pour que l'utilisateur ne puisse voir le mot de passe "toto".

L'utilisateur n'aura pas accès à sa plage s'il n'active pas les macros
.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35