IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Interdire la modification d'une cellule si condition respectée.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 5
    Par défaut Interdire la modification d'une cellule si condition respectée.
    Bonjour à tous,

    Je cherche à interdire la modification d'une cellule si son texte est de couleur rouge.
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Worksheet_Change(ByVal Target As Range)
      If Target.Font.Color = vbRed Then
        MsgBox "Cellule non modifiable"
       Exit Sub
      End If
    End Sub
    J'ai bien mon message mais la valeur de la cellule change malgré tout.
    Pourriez-vous m'apporter une aide.
    Merci.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    1°) sélectionner toute les cellules et mettre leur propriétés Protection >> Verrouillée (décocher)
    2°) Mettre la protection feuille >> Outils >> Protection >> Protéger la feuille
    et dans ton test...
    A+
    EDIT: et ton Exit sub ne sert à rien

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 5
    Par défaut
    Bonjour LeForestier,

    Merci pour ta réponse.
    Hélas, pour mon problème, cette solution ne fonctionne pas.
    J'ai peut-être un paliatif à mon code avec cette instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Application.Intersect(Selection, Range("A1:C8")).Font.Color = vbRed Then
        MsgBox "Cellule à ne pas modifier"
        Exit Sub
      End If
    End Sub
    Mon souci est que hors sélection de la plage des cellules, une erreur d'exécution '91' est générée : "Variable objet ou variable de bloc with non défini".
    Reste plus qu'à trouver l'origine du message est tout sera Ok. Je ne désespère pas.

    Merci encore si tu veux poursuivre.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 5
    Par défaut Solution.
    Eureka !

    Voici la solution qui me convient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Font.Color = vbRed Then
    MsgBox "Cellule à ne pas modifier"
        Exit Sub
      End If
    End Sub
    Petit bémol : La cellule reste modifiable mais il y a au moins alerte pour l'utilisateur.

    P.S. : Si vous voyez mieux, je reste preneur. Bien à vous.

  5. #5
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour tu peus faire un truc comme cela aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("a1:c8")) Is Nothing Then Exit Sub
    If Target.Font.Color = vbRed Then Cells(Target.Row, "D").Select
    End Sub
    ou ca protege pas mais cela previent
    selection de la plage puis donnees validation personnalisee tu tapes <0 puis ok

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Pour empècher la modification !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim lig As Long, Col As Integer
        If Target.Font.Color = vbRed Then
            MsgBox "Cellule non modifiable"
            lig = Target.Row + 1: Col = Target.Column
            While Cells(lig, Col).Font.Color = vbRed
                lig = lig + 1
            Wend
            Cells(lig, Col).Select
        End If
    End Sub
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/08/2010, 09h20
  2. Lancement d'une macro à la modification d'une cellule
    Par popsmelove dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/06/2008, 15h08
  3. Interdire la saisie dans une cellule
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/11/2007, 12h49
  4. [OpenOffice][Tableur] [macro] Evenements : modif d'une cellule dans calc
    Par Eruil dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 23/04/2007, 16h26
  5. Interdire la modification d'une table
    Par mavean dans le forum Sécurité
    Réponses: 2
    Dernier message: 29/11/2006, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo