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

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

  • Charlie Texte de fond.xlsm
    10.3 KB · Affichages: 4
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).

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Charlie Texte de fond.xlsm
    16.1 KB · Affichages: 2

chaelie2015

XLDnaute Accro
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+
 

job75

XLDnaute Barbatruc
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

  • Charlie Texte de fond(1).xlsm
    18.5 KB · Affichages: 1

chaelie2015

XLDnaute Accro
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+
 

job75

XLDnaute Barbatruc
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.
 

chaelie2015

XLDnaute Accro
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+.
 

job75

XLDnaute Barbatruc
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

  • Charlie Texte de fond(2).xlsm
    21.3 KB · Affichages: 2

job75

XLDnaute Barbatruc
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).
 

Pièces jointes

  • Charlie Texte de fond(3).xlsm
    19.4 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 137
Membres
112 668
dernier inscrit
foyoman