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

18classeur1.xlsm (11.34 Ko)

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

16sans-macro.xlsm (12.31 Ko)

Cordialement

Bonjour

pour protéger ta ligne de formules, tu pourrais interdire la sélection de ces cellules

Exemple (voir Code de Feuille)

Cordialement

45classeur1.xlsm (16.86 Ko)
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 Sub
divxl 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 Sub

il 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 Sub

Concerne 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
8classeur1.zip (6.62 Ko)

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 valider

Mais 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 Sub

Mais 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 Sub

Mais 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

18classeur1.xlsm (19.39 Ko)

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)

Rechercher des sujets similaires à "proteger formule"