Text en filigrane

enzo_s

XLDnaute Junior
Bonjour à tous,

J'essaye d'ajouter du text en filigrane dans une cellule qui s'efface quand je sais une valeur.

Le but est de mettre un exemple en filigrane qui c'efface quand on complet la cellule

Encore merci !!
 

pierrejean

XLDnaute Barbatruc
Bonjour Enzo
un essai un tantinet capillotracté
2 macros
prepare : apres lancement on ecrit dans les cellules concernées avec Couleur de Font gris plus ou moins fonçé
fonctionne: apres lancement la selection d'une de ces cellules reviendra en Font automatique et à vide
 

Pièces jointes

  • filigranne.xlsm
    14.4 KB · Affichages: 20

enzo_s

XLDnaute Junior
Merci pour vos réponse,
Avec le premier exemple de Job75 je suis embêté parce que j'utilise une macro qui supprime Contents et du coup aussi la MFC
Dans l'exemple de Pierre Jean, je le même problème. Il faudrait que quand la cellule est vide elle présente son texte en filigrane mais une fois remplie disparaît mais revient ci je clean la cellule.
C'EST une peu tiré par les cheveux
Merci encore
 

enzo_s

XLDnaute Junior
Est-il possible de l'adapter pour que plutôt d'avoir une plage de cellule A1:A10

Je choisisse exemple :

B2=CHVSGRI
B3=Campus de Bla bla
G15=NCHCHTTF12
Etc

Thanks pour l'aide


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
Application.EnableEvents = False
With Target
If .Value = "CHVSHRI" Or .Value = "" Then
.Value = "CHVSHRI"
.Font.ColorIndex = 15
Else
.Font.ColorIndex = 1
End If
End With
Application.EnableEvents = True
End If
End Sub
 

frangy

XLDnaute Occasionnel
L'évènement Worksheet.Change est déclenché lorsque le contenu d'une cellule est modifiée dans la feuille.
Pour traiter des cellules spécifiques, il faut donc pouvoir "cibler" ces cellules.
La question est donc de savoir comment l'emplacement de ces cellules est défini (adresse, nom de cellule, recherche préalable, etc. ) .
Avec un exemple concret et explicite, tu auras plus de chance d'obtenir une réponse adaptée.
 

job75

XLDnaute Barbatruc
Re, salut Pierre, frangy,
Est-il possible de l'adapter pour que plutôt d'avoir une plage de cellule A1:A10

Je choisisse exemple :

B2=CHVSGRI
B3=Campus de Bla bla
G15=NCHCHTTF12
Etc
Ceci va bien :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a, b, i
a = Array("B2", "B3", "G15") 'à adapter
b = Array("CHVSGRI", "Campus de Bla bla", "NCHCHTTF12") 'à adapter
For i = 0 To UBound(a)
    If Range(a(i)) = "" Then
        Range(a(i)).Font.ColorIndex = 16
        Range(a(i)).Font.Bold = False 'non gras
        Range(a(i)) = b(i)
    ElseIf Range(a(i)) <> b(i) Then
        Range(a(i)).Font.ColorIndex = xlAutomatic
        Range(a(i)).Font.Bold = True 'gras, facultatif
    End If
Next
End Sub
A+
 

enzo_s

XLDnaute Junior
Salut Job75

Merci pour le script ça fonctionne bien mais j'ai un petit souci :
- dans le cas ou j'ai des virgule, il les remplace par ' exemple = "100,200,300", "100"

Comment contourner le souci ?

Merci !

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a, b, i
a = Array("C11", "C12", "F24") 'à adapter
b = Array("CHVSGRI", "100,200,300", "100") 'à adapter
For i = 0 To UBound(a)
    If Range(a(i)) = "" Then
        Range(a(i)).Font.ColorIndex = 18
        Range(a(i)).Font.Bold = False 'non gras
       Range(a(i)) = b(i)
    ElseIf Range(a(i)) <> b(i) Then
        Range(a(i)).Font.ColorIndex = 18
        Range(a(i)).Font.Bold = False 'gras, facultatif
    End If
Next
End Sub
 

job75

XLDnaute Barbatruc
Bonjour enzo_s, Pierre, frangy,
exemple = "100,200,300", "100"
En VBA la virgule est le séparateur des milliers, pour l'éviter utiliser le format Texte :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a, b, i
a = Array("C11", "C12", "F24") 'à adapter
b = Array("CHVSGRI", "100,200,300", "100") 'à adapter
For i = 0 To UBound(a)
    If Range(a(i)) = "" Then
        Range(a(i)).NumberFormat = "@" 'format Texte
        Range(a(i)).Font.ColorIndex = 18
        Range(a(i)).Font.Bold = False 'non gras
       Range(a(i)) = b(i)
    ElseIf Range(a(i)) <> b(i) Then
        Range(a(i)).NumberFormat = "General" 'format Standard
        Range(a(i)).Font.ColorIndex = Automatic
        Range(a(i)).Font.Bold = False 'gras, facultatif
    End If
Next
End Sub
A+
 

job75

XLDnaute Barbatruc
Une autre solution (meilleure) est de remplacer la virgule "normale" (code 44) par la virgule "spéciale" (code 130) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a, b, i
a = Array("C11", "C12", "F24") 'à adapter
b = Array("CHVSGRI", "100,200,300", "100") 'à adapter
For i = 0 To UBound(a)
    b(i) = Replace(b(i), ",", Chr(130))
    If Range(a(i)) = "" Then
        Range(a(i)).Font.ColorIndex = 18
        Range(a(i)).Font.Bold = False 'non gras
        Range(a(i)) = b(i)
    ElseIf Range(a(i)) <> b(i) Then
        Range(a(i)).Font.ColorIndex = Automatic
        Range(a(i)).Font.Bold = False 'gras, facultatif
    End If
Next
End Sub
 

Discussions similaires

Réponses
17
Affichages
517

Statistiques des forums

Discussions
312 498
Messages
2 088 997
Membres
104 001
dernier inscrit
dessinbecm