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 :

Griser une zone de texte


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Points : 79
    Points
    79
    Par défaut Griser une zone de texte
    Bonjour,

    Sur une feuille de mon classeur, j'ai une zone texte que j'ai appelée "MaZoneTxt" et un bouton de formulaire affecté à une macro et qui opère ailleurs dans une autre feuille.Et en fin une liste déroulante de 3 choix "VAL1", "Val2" et "Val3".

    Mon objectif, c'est de figer déjà les dimensions de la zone de texte comme ça personne ne pourra le modifier, et en plus de la griser tant que la valeur choisie dans la liste déroulante n'est pas "Val3", ce qui veut dire quand la valeur est "Val1" ou "Val2", on ne peut pas rentrer du texte dans cette zone.

    J'ai essayé de protéger la feuille mais je n'ai pas réussi à atteindre mes objectifs et en plus de cela, la macro du bouton formulaire retourne une erreur quand la feuille est protégée.

    Y- a t-il un autre moyen plus simple sans passer par la protection de la feuille SVP?

    Merci d'avance.

    Cdt;

  2. #2
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Points : 79
    Points
    79
    Par défaut
    En gros je veux un truc de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Valeur choisie = Val3 Then MaZoneTxt.Enable = True
    Else MaZoneTxt.Enable = False
    Et en plus de ça les dimension de la box je veux qu'elles soient fixes immodifiables.

    Merci

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 232
    Points : 5 632
    Points
    5 632
    Par défaut
    Bonjour,
    Y- a t-il un autre moyen plus simple sans passer par la protection de la feuille SVP?
    Oui, si la liste déroulante n'est pas Val3, pour toutes tentatives de sélection d'une cellule dans la zone grisée, la macro renvoi vers une cellule extérieure à cette zone.

    dans le module de la feuille, macro évènementielle du style suivant à adapter selon vos données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not Intersect(Target, Range("la zone grisée")) Is Nothing Then sélection_d_une_cellule_hors_zone_grisée
    End Sub
    Cdlt

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Citation Envoyé par Heathcliff_1 Voir le message
    Y- a t-il un autre moyen plus simple sans passer par la protection de la feuille SVP?
    Pas spécialement plus simple, mais plus simple à maîtriser et à coder : utiliser une TextBox sur un Userform.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Points : 79
    Points
    79
    Par défaut
    Merci pour vos retours.

    J'ai pu résoudre le problème finalement avec la protection de la feuille en verrouillant le zone de texte comme ça les dimensions reste inchangeable, et en déverrouillant le texte dans ce shape et cela se fait avec un clic droit sur la zone de texte et choisir "Format de la forme".

    Et pour l'autre point qui consiste à laisser la zone grisée quand ce n'est pas "VAL3" qui est choisi, j'ai finalement utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shapes("MaZoneTxt").Visible = msoFalse
    comme ça la zone de texte n’apparaît que lorsque c'est nécessaire.

    Là j'ai une autre question, c'est que cette macro ne s'exécute que lorsque je sélectionne une cellule sur le feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     ActiveSheet.Protect
     
     If Range("H4").Value = "VAL3" Then
     
     Shapes("MaZoneTxt").Visible = msoFalse
     Else
     Shapes("MaZoneTxt").Visible = msoTrue
     End If
     
     
     End Sub
    Moi ce que je veux c'est que le shape apparaisse quand VAL3 est choisi automatiquement sans besoin de cliquer sur une cellule pour le faire apparaître. Y a t-il un moyen pour cela?

    Merci d'avance.

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Il faut utiliser l’évènement Change, quand target est H4.
    Et éventuellement l'évènement Activate (au cas ou la zone ne serait pas visible ou non-visible selon le contenu de H4).
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  7. #7
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Points : 79
    Points
    79
    Par défaut
    @Patrice740 désolé je n'ai pas bien compris ce tu veux dire par ça. Peux-tu m'expliquer un peu plus en détail ton idée?
    Merci

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    A la place de ton code dans le module de la feuille concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Option Explicit
    Private Sub Worksheet_Activate()
      Call AfficherMasquerMaZoneTxt
    End Sub
     
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Me.Range("H4")) Is Nothing Then Call AfficherMasquerMaZoneTxt
    End Sub
     
    Private Sub AfficherMasquerMaZoneTxt()
      Me.Unprotect
      If Me.Range("H4").Value = "VAL3" Then
        Me.Shapes("MaZoneTxt").Visible = msoTrue
      Else
        Me.Shapes("MaZoneTxt").Visible = msoFalse
      End If
      Me.Protect
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Points : 79
    Points
    79
    Par défaut
    @Patrice740 C'est exactement ce que je cherche, merci beaucoup !
    Je suis vraiment désolé de vous importuner mais crois moi j'ai fait de mon mieux pour trouver la solution moi même. En tout cas j'apprends tous les jours avec des gens comme vous.

    Merci encore une fois pour l'aide.

    Cdt;

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

Discussions similaires

  1. griser une zone de texte suite à un evenement
    Par nakatami dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 01/09/2010, 12h50
  2. griser une zone de texte
    Par casho dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/08/2006, 15h15
  3. [JTextArea ] Définir une zone de texte
    Par Katyucha dans le forum Composants
    Réponses: 8
    Dernier message: 18/11/2004, 00h32
  4. [HTML] Bloquer l'ecriture d'une zone de texte
    Par bouboussjunior dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/10/2004, 10h57
  5. Réponses: 9
    Dernier message: 26/04/2004, 22h51

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