Protéger formule dans cellule
Bonsoir a toutes et tous, forum
Je souhaiterai svp protéger des cellules qui contiennent de simples formules (somme)
contre une fausse manipulation ce qui effacerai la cellule qui contiendrai la dite formule
voir svp petit fichier pour compléments d'infos a l'intérieur ci joint pour essai en VBA svp
Merci d'avance a vous et de votre temps
Raymond
Etape 1 Selectionne la plage (D5:G19)
Choisis format cellule monétaire
Etape 2 Selectionne la plage (D5:G19)
Ensuite choisis validation des données
Puis : Décimal
Choisis l'intervalle de valeur (compris entre -100000 et 100000 par exemple)
Etape 3 Selectionne D20:G20
Format cellule -> Protection -> clique sur vérouillé
Ensuite tu cliques sur protéger la feuille (tu choisis un mot de passe si tu veux et le tour est joué
voici un exemple
Cordialement
Bonjour
pour protéger ta ligne de formules, tu pourrais interdire la sélection de ces cellules
Exemple (voir Code de Feuille)
Cordialement
ketamacanna a écrit :Etape 1 Selectionne la plage (D5:G19)
Choisis format cellule monétaire
Etape 2 Selectionne la plage (D5:G19)
Ensuite choisis validation des données
Puis : Décimal
Choisis l'intervalle de valeur (compris entre -100000 et 100000 par exemple)
Etape 3 Selectionne D20:G20
Format cellule -> Protection -> clique sur vérouillé
Ensuite tu cliques sur protéger la feuille (tu choisis un mot de passe si tu veux et le tour est joué
voici un exemple
Cordialement
Salut
Merci de ta réponse c'est bien mais je fais comment pour enlever ce que tu a fait car la je ne peux plus modifier ni sélectionner
je préfère si possible en vba svp
merci a plus tard
Raymond
Amadéus a écrit :Bonjour
pour protéger ta ligne de formules, tu pourrais interdire la sélection de ces cellules
Exemple (voir Code de Feuille)
Cordialement
Salut Amadéus
Merci pour ta réponse ca marche
et pour n'entrer dans la zone en orange D5:G19 que les chiffres et le signe de l'euro svp
merci a toi a plus tard
Raymond
Bonjour
Pour le premier point, la solution de ketamacanna me semble la bonne.
Si elle ne convient pas, indique-nous comment tu veux la voir traitée.
Cordialement
Amadéus a écrit :Bonjour
Pour le premier point, la solution de ketamacanna me semble la bonne.
Si elle ne convient pas, indique-nous comment tu veux la voir traitée.
Cordialement
Re Amadèus
pour n'entrer que des chiffres et l'euro de la zone D5:G19 je préfèrerai en vba si cela ne te dérange pas, svp
Merci a plus tard
Raymond
Bonsoir,
Sub ChiffresEuro()
'
' ChiffresEuro Macro
'
'
Range("D5:G19").Select
Selection.NumberFormat = "#,##0.00 $"
End Subdivxl a écrit :Bonsoir,
Sub ChiffresEuro() ' ' ChiffresEuro Macro ' ' Range("D5:G19").Select Selection.NumberFormat = "#,##0.00 $" End Sub
Bonjour Divxl
Merci pour ta réponse et le petit code, on ne pourrait pas faire en sorte pour que lorsqu'une lettre est entré, que l'on efface et que l'on reste dans la cellule afin d'entrer ce qui doir etre entré et rien d'autres, c'est a dire chiffres et l'euro.
merci bonne journée a plus tard
Raymond
Bonjour Raymond,
Tu selectionnes la cellule concernée,
Tu créés une macro nommée "ValCell" (par exemple)
et dans VBA, dans le module concerné, tu lui mets ce code :
Sub ValCell()
'
' ValCell Macro
'
'
With Selection.Validation
.Delete
.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="-9999", Formula2:="9999"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "Erreur de Données"
.InputMessage = ""
.ErrorMessage = _
"Les caractères sont refusés dans cette cellule," & Chr(10) & "Veuillez entrer un nombre entier."
.ShowInput = False
.ShowError = True
End With
End Subil y a surement plus simple que ça, mais j'ai que ça à ma connaissance.
Re salut
merci pour le code
ca a l'air de fonctionner mais dès que l'on change de cellule il faut relancer la macro, donc comme tu dit si il y a mieux je suis preneur
Merci pour le coup de main, bonne après midi
Raymond
Re Raymond,
ben oui, là je n'ai fais que pour une cellule, tu fais la même chose pour les autres.
ça t'habituera si tu le fais toi-même 8)
faut juste changer le nom de la macro pour chaque cellule.
ou alors tu sélectionnes toutes tes cellules (plage) et tu mets le même code :
Sub ValCell()
'
' ValCell Macro
'
'
With Selection.Validation
.Delete
.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="-9999", Formula2:="9999"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "Erreur de saise"
.InputMessage = ""
.ErrorMessage = _
"Les cellules de cette plage ne comportent pas de caractères." & Chr(10) & "Veuillez recommencer la saisie."
.ShowInput = False
.ShowError = True
End With
End SubConcerne ta plage D5:G19
Bonjour Raymond
Pourquoi voulez vous faire absolument du vba pour faire cela ? en fait Excel gère les validations de données nativement très simplement.
Si toutefois le vba est indispensable, je vous conseille d'utiliser les événements de feuille de calcul, en d'autres termes :
- si une valeur de cellule change alors,
- je dois vérifier la validité de cette valeur,
- si ce n'est pas valide, afficher un message à l'utilisateur et effacer sa valeur
Par exemple (à copier dans un module de type feuille) :
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'Vérification de la cellule A2
If Target.Address = "$A$2" Then
MsgBox "Vous avez saisi :" & Target.Value & " dans la cellule A2"
If Not IsNumeric(Target.Value) Then
MsgBox "Vous devez saisir un chiffre numérique, nondediou !!"
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
Else
MsgBox "OK c'est bon :)", vbInformation
End If
End If
End Sub
Bonjour
oui pour les validations natives en faisant :
- Selectionner la plage
Clic sur le menu "Données"
Puis "Validation des Données" (2 fois)
Puis remplir la textBox qui s'ouvre et valider
Mais comme il parlait de VBA....mon code donnait ce que je viens de mettre ci-dessous 8)
Chrix a écrit :Bonjour Raymond
Pourquoi voulez vous faire absolument du vba pour faire cela ? en fait Excel gère les validations de données nativement très simplement.
Si toutefois le vba est indispensable, je vous conseille d'utiliser les événements de feuille de calcul, en d'autres termes :
- si une valeur de cellule change alors,
- je dois vérifier la validité de cette valeur,
- si ce n'est pas valide, afficher un message à l'utilisateur et effacer sa valeur
Par exemple (à copier dans un module de type feuille) :
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) 'Vérification de la cellule A2 If Target.Address = "$A$2" Then MsgBox "Vous avez saisi :" & Target.Value & " dans la cellule A2" If Not IsNumeric(Target.Value) Then MsgBox "Vous devez saisir un chiffre numérique, nondediou !!" Application.EnableEvents = False Target.Value = "" Application.EnableEvents = True Else MsgBox "OK c'est bon :)", vbInformation End If End If End Sub
Salut Chrix
Merci pour ta réponse pour A2 on ne peut pas étendre svp a une plage D5:G19 " nondediou " c'est marrant hihih
Raymond
divxl a écrit :Bonjour
oui pour les validations natives en faisant :
- Selectionner la plage
Clic sur le menu "Données"
Puis "Validation des Données" (2 fois)
Puis remplir la textBox qui s'ouvre et validerMais comme il parlait de VBA....mon code donnait ce que je viens de mettre ci-dessous 8)
j'ai fait en sélectionnant aussi toute la plage ca a l'air de fonctionner aussi
je test ca aussi merci
Raymond
Mais comme il parlait de VBA....mon code donnait ce que je viens de mettre ci-dessous 8)
Oui tout à fait divxl ^^
Raymond, voici comment affecter cette vérification sur une plage
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'Vérification dans les cellules D5:G19
'Est ce que la cellule qui vient d'être modifiée fait partie de la plage D5:G19 ?
If Not Intersect(Target, Range("D5:G19")) Is Nothing Then
'oui
MsgBox "Vous avez saisi :" & Target.Value & " dans la cellule " & Target.Address
If Not IsNumeric(Target.Value) Then
MsgBox "Vous devez saisir un chiffre numérique, nondediou !!"
'On efface la valeur,
'au passage (désactivation d'événement obligatoire sinon l'événement se re-déclenche)
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
Else
MsgBox "OK c'est bon :)", vbInformation
End If
End If
End SubMais je conseille vraiment d'utiliser la validation de donnée de divxl, c'est beaucoup plus simple, on prend une plage en entier, Données > Validation, on configure et hop c'est fait
Chrix a écrit :Mais comme il parlait de VBA....mon code donnait ce que je viens de mettre ci-dessous 8)
Oui tout à fait divxl ^^
Raymond, voici comment affecter cette vérification sur une plage
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) 'Vérification dans les cellules D5:G19 'Est ce que la cellule qui vient d'être modifiée fait partie de la plage D5:G19 ? If Not Intersect(Target, Range("D5:G19")) Is Nothing Then 'oui MsgBox "Vous avez saisi :" & Target.Value & " dans la cellule " & Target.Address If Not IsNumeric(Target.Value) Then MsgBox "Vous devez saisir un chiffre numérique, nondediou !!" 'On efface la valeur, 'au passage (désactivation d'événement obligatoire sinon l'événement se re-déclenche) Application.EnableEvents = False Target.Value = "" Application.EnableEvents = True Else MsgBox "OK c'est bon :)", vbInformation End If End If End SubMais je conseille vraiment d'utiliser la validation de donnée de divxl, c'est beaucoup plus simple, on prend une plage en entier, Données > Validation, on configure et hop c'est fait
Re
c'est presque bon
quand on entre un chiffre et que pas d'erreur c'est bon
si on rentre une ou des lettres et que l'on corrige
on a l'affichage des messages plusieurs fois
merci ha pour répondre pourquoi vba parce que " La curiosité est un défaut de passionné " mème si je ne suis pas trop expert comme toi et beaucoup d'autres gens du forum.
Raymond
Bonjour
Regarde si cela conviendrait (Voir Codes Feuil1 et Module)
Cordialement
Sympa la méthode d'Amadéus (notamment pour les totaux)
@Raymond : Je suis bien loin d'être un expert, mais dans ton cas il y avait plusieurs solutions possibles (des simples et des moins simples) aussi je voulais te demander pourquoi tu voulais absolument du vba. Pour la curiosité ? c'est une noble raison ! sache le
Chrix a écrit :Sympa la méthode d'Amadéus (notamment pour les totaux)
@Raymond : Je suis bien loin d'être un expert, mais dans ton cas il y avait plusieurs solutions possibles (des simples et des moins simples) aussi je voulais te demander pourquoi tu voulais absolument du vba. Pour la curiosité ? c'est une noble raison ! sache le
j'ai fait quelques programmes qui fonctionnent toujours avec l'aide de nombreuses personnes du forum, je n'ai pas été vacciner au VBA étant petit c'est surement pour ca que j'ai du mal, mais malgré tout, comme j'aime bien programmer j'arrive tout de mème a faire pas mal de choses, mais a 59 ans les études non merci.
Merci beaucoup pour ton aide, passe de bonnes fètes de fin d'année.
Cordialement Raymond
RE
chrix, divxl, amadéus,
Merci a vous 3 de votre aide et de votre temps pour les codes, le code d'Amadéus correspond bien a mon besoin, ca fonctionne comme je le souhaitai.
Encore merci a vous, passez toutes et tous, forum, de bonnes fètes de fin d'année et attention a la nitro bibine (LOL)
Cordialement Raymond
Re,
Faudrait que quelqu'un m'explique une chose,
Pourquoi on arrive à des codes différents à l'arrivée ?
Version d'Excel peut-être ?
Car mon code, vient exclusivement de mes opérations réalisées
Je ne pourrai en aucun cas, dire à quoi sert ça ou ça ^^
Je garde quand même de coté, la soluce d'Amadeus, pour l'avoir devant moi 8)