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 :

Text d'une forme ne s'efface pas


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 Text d'une forme ne s'efface pas
    Bonjour,

    Je travaille sur un classeur excel pour automatiser quelques taches répétitives.
    Dans une feuille j'ai une zone de texte Shape("MaZoneTxt") dont je me sers pour écrire un texte que je récupère après pour l'envoyer par mail.
    Pour aider les utilisateurs de ce fichier à bien remplir cette zone de texte, j'ai rendu cette zone de texte transparente à 50% et j'ai placé derrière elle une forme Shape("MonRect") sur lequel j'ai mis un texte indicatif de ce qu'il faut remplir sur la zone de texte.

    Mon but c'est qu'une fois l'utilisateur commence à saisir son texte, le texte indicatif sur le Shape("MonRect") disparaisse.
    Et jusqu'à présent je n'arrive pas à trouver comment faire. Voici le code que j'utilise:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal Target As Range)
         If Range("H4").Value = "Val3" Then
            ActiveSheet.Unprotect
            Shapes("MaZoneTxt").TextFrame.Characters.Text = ""
            Shapes("MaZoneTxt").Visible = msoFalse
            Shapes("MonRect").Visible = msoFalse
            ActiveSheet.Protect
         Else
            ActiveSheet.Unprotect
            Shapes("MaZoneTxt").Visible = msoTrue
            Shapes("MonRect").Visible = msoTrue
            End If
            ActiveSheet.Protect
            Call Label
     End Sub
     
     
    Private Sub Label()
            If Shapes("MaZoneTxt").TextFrame.Characters.Text = "" Then
            ActiveSheet.Unprotect
            Shapes("MonRect").TextFrame.Characters.Text = "Faites ceci et cela...."
            Else: Shapes("MonRect").TextFrame.Characters.Text = ""
            End If
            ActiveSheet.Protect
    End Sub
    Avec ce code le texte "Faites ceci et cela...." ne disparaît pas et je ne sais pas pourquoi.

    Pourriez-vous m'aider svp?

    Cdt;

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Heathcliff_1 Voir le message
    Avec ce code le texte "Faites ceci et cela...." ne disparaît pas et je ne sais pas pourquoi.
    Worksheet_Change ne se déclenche que lorsqu'on valide la saisie d'une cellule et non lorsqu'on commence à taper le contenu.
    De plus, ça fonctionne avec le contenu de cellules et non celui des zones de texte.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    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
    Dans une feuille j'ai une zone de texte Shape("MaZoneTxt") dont je me sers pour écrire un texte que je récupère après pour l'envoyer par mail.
    Au lieu d'une zone de texte, utilises un TexBox ActiveX, tu disposeras de tous les évènements nécessaires.
    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

  4. #4
    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.

    Sincèrement j'évite les forme AciveX. Y a pas moyen de continuer avec des formes simples comme j'ai fait ?

  5. #5
    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
    Re,

    Avec un TextBox, c'est pourtant simple (et souple) :
    TextBox1.xlsm
    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

  6. #6
    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
    Bonjour Patrice,

    Merci pour ton retour. Toutefois, je ne souhaite pas utiliser les ActiveX dans mon fichier.
    J'ai opté pour une autre idée qui consiste à rendre la zone de texte Shapes("MaZoneTxt") transparente à 50% quand elle est vide comme ça la forme Shapes("MonRect") derrière pourra apparaître avec son message "Faites ceci et cela...".
    Une fois je commence à écrire dans "MaZoneTxt" la transparence passe à 0% comme ça le message derrière n’apparaît plus.

    J'ai essayé de la mettre en place, j'ai crée un module où j'ai mis ce bout de code et affecté la macro à "MaZoneTxt":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Transparence()
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes("MaZoneTxt")
    With shp
    If shp.TextFrame.Characters.Text = "" Then
    .Fill.Transparency = 0.5
    Else
    .Fill.Transparency = 0
    End If
    End With
    End Sub
    Mais ce code ne me laisse plus la main pour écrire dans "MaZoneTxt" et je ne sais pas comment remédier à ce problème.

    Avez-vous une idée pourquoi cela ne marche pas ?

    Merci d'avance.

  7. #7
    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
    Citation Envoyé par Heathcliff_1 Voir le message
    Mais ce code ne me laisse plus la main pour écrire dans "MaZoneTxt" et je ne sais pas comment remédier à ce problème.
    Avez-vous une idée pourquoi cela ne marche pas ?
    Pour faire ce que tu voudrais, il faut que l'objet utilisé dispose des évènements ad hoc, ce qui n'est pas le cas avec une zone de texte (ça l'est avec un activeX).
    Si tu ne disposes pas d'évènement permettant de détecter la saisie du texte, tu vas forcement te diriger vers une alternative foireuse.
    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

  8. #8
    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
    Oui mais sincèrement j'évite les ActiveX car ces formes, d'après ma courte expérience dans le domaine, cause des problèmes que je peux qualifier de gratuits.
    Là j'avance peu à peu vers la solution. Actuellement j'utilise ce bout de code sur ma feuille:
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Dim sh As Worksheet
    Set sh = ActiveSheet
    Dim shp As Shape
    Set shp = Shapes("MaZoneTxt")
    With shp
    If shp.TextFrame.Characters.Text = "" Then
    .Fill.Transparency = 0.5
    Else
    .Fill.Transparency = 0
    End If
    End With
     
    End Sub
    Et le dernier problème c'est que le changement de transparence ne s'opère lorsque je clique sur une cellule hors de du Shape. Je continue toujours mes recherches.

    Presque 5 heures pour un truc que j'ai qualifié de simple au début

    Si y a des propositions je suis preneur bien évidemment.

    Merci

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Heathcliff_1 Voir le message
    Là j'avance peu à peu vers la solution. Actuellement j'utilise ce bout de code sur ma feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    SelectionChange n'est pas activé par la sélection d'objet. Il n'est activé que par la sélection de cellule.

    La seule façon (à ma connaissance) d'activer une macro en sélectionnant un objet, c'est que lier la macro à cet objet.
    Mais ça ne fonctionnera pas avec une Zone de texte de saisie parce que le fait de lier la macro à cette zone de texte va bloquer la possibilité de saisie.
    Ca n'est donc pas applicable à ton cas.

    La seule méthode que je vois est de créer une zone de texte contenant ton "Faites ceci et cela..." liée à une macro.
    Quand on clique sur cette zone de texte, la macro liée va créer une nouvelle zone de texte par dessus la précédente.
    Ainsi, il sera possible de saisir dans cette nouvelle zone de texte.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  10. #10
    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 bien pour vos retours et vos éclaircissements. Je comprends mieux.

    En fin de compte, j'ai laissé tomber l'idée et je me suis contenté d'un commentaire au lieu de se compliquer la vie.

    En tout cas merci !

    Bonne journée

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

Discussions similaires

  1. [Newbie]Ajout d'un texte dans une form
    Par devoluti0n dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/03/2009, 15h32
  2. rotation du texte dans une forme
    Par gullian dans le forum Word
    Réponses: 1
    Dernier message: 08/03/2009, 20h35
  3. trajectoire d'une forme qui ne fonctionne pas
    Par kaya 59 dans le forum VBA PowerPoint
    Réponses: 13
    Dernier message: 02/08/2008, 10h27
  4. Texte sous une forme particulière
    Par mmb04 dans le forum Mise en forme
    Réponses: 2
    Dernier message: 12/06/2007, 15h10
  5. Réponses: 1
    Dernier message: 25/10/2006, 22h03

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