XL 2013 (RESOLU) Création d'un Champ de Saisie avec Texte de Fond Dynamique

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chaelie2015

XLDnaute Accro
Bonjour Forum,
J'ai fusionné la cellule C3:O3 pour y entrer des données. Je recherche un code VBA qui affiche le texte "Nom & Prénom" en arrière-plan de la cellule.
Lorsque je commence à saisir des données dans la cellule, ce texte de fond doit disparaître automatiquement et si j'efface le contenu de la cellule, le texte de fond doit réapparaître automatiquement uniquement si la cellule est vide.
Merci
 

Pièces jointes

Solution
En fait si c'est possible : effacer la cellule active uniquement quand elle contient le texte original "Nom Prénom".

Donc remplacer l'instruction c = "" par If c = texte(n) Then c = "", voyez ce fichier (3).
Bonjoue Chaelie,
Un essai en PJ avec :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Si C3:O3 cliquée alors on vide la cellule
On Error GoTo Fin
    Application.EnableEvents = False
    If Not Intersect(Target, [C3:O3]) Is Nothing Then
        [C3] = ""
    Else
        If [C3] = "" Then [C3] = "Nom Prénom"
    End If
Fin:
Application.EnableEvents = True
End Sub
Sub Worksheet_Change(ByVal Target As Range)
' Si valeur dans C3:O3 <> vide alors on écrit Nom Prénom
On Error GoTo Fin
    If Not Intersect(Target, [C3:O3]) Is Nothing Then
        If [C3] = "" Then [C3] = "Nom Prénom"
    End If
Fin:
End Sub
 

Pièces jointes

Bonjour sylvanu, le forum
Merci pour votre réponse, elle correspond parfaitement à ce que je recherchais. J'ai cependant d'autres questions pour adapter ce code à mes besoins :

1. Je souhaite modifier la couleur du texte de fond en gris clair.
2. Si j'ai plusieurs cellules de saisie, par exemple pour l'e-mail, le site web, le montant en euros, etc., comment puis-je généraliser ce code pour les utiliser toutes ?
A+
 
Bonsoir chaelie2015, sylvanu,

Une variante avec l'ajout du mode édition quand on vide la cellule :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim texte, c As Range, n%
texte = Array("Nom Prénom", "Couriel", "Site web", "Montant en euros", "Numéro de téléphone")
Application.EnableEvents = False
For Each c In [C3,Q3,C5,Q5,J7] 'adaptable
    If Intersect(ActiveCell, c) Is Nothing Then
        If c = texte(n) Then
            c.Font.ColorIndex = 16 'gris
            c.Font.Bold = False 'non gras
            c.Font.Italic = True
        ElseIf c = "" Then
            c = texte(n)
        Else
            c.Font.ColorIndex = xlAutomatic
            c.Font.Bold = True 'gras
            c.Font.Italic = False
        End If
    Else
        c = ""
        CreateObject("WScript.Shell").SendKeys "{F2}" 'mode édition
    End If
    n = n + 1
Next
Application.EnableEvents = True
End Sub
On peut peut être optimisé mais en complexifiant.
A ton avis quelle est la solution la plus simple ?

A+
 

Pièces jointes

Re
Je vous exprime ma gratitude pour votre réponse, néanmoins, j'ai constaté un léger souci avec ce code.
Après avoir entré du texte dans une cellule, je le valide, puis tenté de le modifier ultérieurement (par exemple), il semble disparaître ????
A+
 
C'est normal puisqu'il faut effacer le texte quand on sélectionne la cellule.

Mais avant de valider la cellule on peut mémoriser le texte par clic droit => copier.

On peut ensuite le restituer dans la barre de formule et le modifier.
 
Re
Je comprends bien. Pour illustrer, j'ai saisi un texte dans le champ 'Nom Prénom' en tant que 'JOB BELGE', ensuite, je suis passé à la cellule suivante 'Email' : 'charlie_Belge@gmail.com'. Après cela, j'ai remarqué qu'il y avait une erreur dans la cellule 'Nom Prénom'. J'aimerais savoir comment je peux corriger uniquement 'Job' en 'Charlie' sans effacer tout le texte dans la cellule 'Nom Prénom'
A+.
 
Comme je l'ai dit il faut mémoriser le champ 'Nom Prénom' en plaçant sa valeur dans le presse-papier.

Cela peut se faire en exécutant cette macro :
VB:
Sub PressePapier()
'se lance par les touches Ctrl+P
Dim x$
With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' DataObject en late binding
    Do
        x = InputBox("Entrez l'adresse de la cellule à mémoriser :", "Presse-papier", x)
        If x = "" Then Exit Sub
        On Error Resume Next
        .SetText Range(x)
    Loop While Err
    .PutInClipboard
End With
End Sub
Il suffit ensuite de coller le contenu du presse-papier par Ctrl+V.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour