Dissimuler des caractères par macro

Gedch

XLDnaute Occasionnel
Bonjour

J’utilise des symboles à titre de repères comme le #

Pour certaines cellules, je souhaiterais cependant qu’ils ne soient pas visibles
Pour une cellule, ce n’est pas difficile, il suffit de mettre le ou les dièses de la même couleur que le fond de la cellule.
Mais pour des dizaines de cellules, ce serait bien trop long

Est-ce que la chose serait possible par macro ?

Merci
 

Pièces jointes

  • Dissimultion de caractères.xlsm
    8.4 KB · Affichages: 42

Gedch

XLDnaute Occasionnel
Bonjour Pierrejean
Merci de ton aide
Cela correspond tout juste à ce que je souhaite
Dans ton exemple, cela fonctionne parfaitement
Une fois intégré dans mon fichier
Les dièses se mettent dans une couleur "blanc cassé"
Je mets une photo
Mais je ne sais pas si cela va bien ce voir ??
Je ne vois pas d’où cela vient
J'ai essayé avec plusieurs couleur de fond, c'est pareil
 

Pièces jointes

  • Exemple.jpg
    Exemple.jpg
    15 KB · Affichages: 24

Gedch

XLDnaute Occasionnel
Bonjour

Vu que je ne pense pas que cela soit possible avec l'utilisation d'une MFC
J'ai inversé la gestion de la MFC
Au lieu de gérer mes cellules qui contenaient une dièse
J'ai fait l'inverse, j'ai géré les cellules qui ne contenaient pas de dièse dans la MFC
Comme cela plus de problème et la macro fonctionne parfaitement.

Par contre il me reste un problème
Dans mon fichier, j'ai en fait 7 colonnes ou doit s'opérer la macro "B,D,F,H,J,L,N"
Plutôt que de faire 7 macros, je pense qu'il doit y avoir une solution plus simple
Je m'y suis bien essayé, mais sans résultat !
Je viens donc à nouveau à l'aide

Je précise que pour la dernière cellule, c'est la colonne B qui détermine la longueur de la feuille.

Merci d'avance
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, Gedch, pierrejean

Voir ce que cette macro donne sur le fichier réel
VB:
Sub Macro1()
Dim c As Range
For Each c In Cells.SpecialCells(xlCellTypeConstants)
On Error Resume Next
c.Characters(Len(Split(c.Text)(0)) + 2, Len(Split(c.Text)(1))).Font.Color = c.Interior.Color
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@Gedch
Moi j'ai testé sur ton fichier exemple, et ça va bien partout ;)
(Les dièses prennent la couleur du fond de la cellule et donc deviennent invisibles et ce partout sur la feuille ou dans une cellule se trouvera un dièse aprés un espace en fin de cellule)
 

Staple1600

XLDnaute Barbatruc
Re,

Suite, celle-ci devrait mieux marcher si les cellules contiennent plusieurs mots
VB:
Sub Macro2()
Dim c As Range, x
Application.ScreenUpdating = False
For Each c In Cells.SpecialCells(xlCellTypeConstants)
On Error Resume Next
x = InStrRev(c.Text, Chr(32))
If x > 0 Then
c.Characters(x, Len(c) + 1 - x).Font.Color = c.Interior.Color
End If
Next
End Sub
 

Gedch

XLDnaute Occasionnel
Re,

Je viens de faire l'essai dans mon fichier exemple
J'ai intégré de nouvelles cellules contenant plusieurs mots
Et cela ne fonctionne pas quand il y a plusieurs mots
C'est alors le 2ème mot qui est effacé et le dièse reste

Il y a aussi le problème que le dièse est effacé dans la colonne B
Seules les colonnes "B,D,F,H,J,L,N" doivent être concernées
 

Pièces jointes

  • Dissimultion de caractères Stapple.xlsm
    12.1 KB · Affichages: 11

Gedch

XLDnaute Occasionnel
Re,
Ma réponse s'est croisée avec la tienne
Effectivement avec cette nouvelle macro, plus de problème avec les cellules contenant plusieurs mots
Mais par contre, comme je viens de le dire
Seules les colonnes "B,D,F,H,J,L,N" doivent être concernées
Mais cela, je pense que tu ne l'avais pas vu dans mon post #5
 

Gedch

XLDnaute Occasionnel
Bonjour Pierrejean
Merci à nouveau de ton aide

Cette solution fonctionne parfaitement et seulement dans les colonnes désirées

Juste pour être sûr de bien faire
Pour les variables j'ai mis ceci :

Dim colonnes As Variant
Dim m As Long
Dim n As Long
Dim st As String
Dim col As String

Comme je ne suis pas sûr de moi, bien que cela fonctionne avec ces variables
Merci de me corriger si j'ai mal fait ?
 

Staple1600

XLDnaute Barbatruc
Re

@Gedch
Si, si j'avais bien vu
Mais aujourd'hui je fais dans la démesure, je traite toute la feuille
Si tu ne voulais traiter que quelques colonnes, l'enregistreur de macros est là pour cela
Il suffisait d'adapter en conséquence ;)

Ce que je viens de faire ;)
VB:
Sub Macro3()
Dim c As Range, x
Application.ScreenUpdating = False
For Each c In Range("B:B,D:D,F:F,H:H,J:J,L:L,N:N").SpecialCells(xlCellTypeConstants)
On Error Resume Next
x = InStrRev(c.Text, Chr(32))
If x > 0 Then
c.Characters(x, Len(c) + 1 - x).Font.Color = c.Interior.Color
End If
Next
End Sub

NB: Ci-dessous la macro de l'enregisteur de macros qui m'a servi pour avoir la syntaxe idoine pour la modif dans la Macro3 ;)
VB:
Sub Macro1()
' Macro réalisée par l'enregisteur de macros
Range("B:B,D:D,F:F,H:H,J:J,L:L,N:N").Select
Range("N1").Activate
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Et pour la route, une version paramétrable de ma précédente macro
(Bien sur tu peux la renommer comme bon te semble ;))
Pour tester lancer la macro Test_A ou Test_B
VB:
Sub test_A()
OnNousDitRienOnNousCachePresqueTout Range("B:B,D:D,F:F,H:H,J:J,L:L,N:N"), xlCellTypeConstants
End Sub
Sub test_B()
'ici on ne traitera que les colonnes B et D
OnNousDitRienOnNousCachePresqueTout Range("B:B,D:D"), xlCellTypeConstants
End Sub
Private Sub OnNousDitRienOnNousCachePresqueTout(MesColonnes As Range, MesCellules As XlCellType)
Dim c As Range, x
Application.ScreenUpdating = False
For Each c In MesColonnes.SpecialCells(MesCellules)
On Error Resume Next
x = InStrRev(c.Text, Chr(32))
If x > 0 Then
c.Characters(x, Len(c) + 1 - x).Font.Color = c.Interior.Color
End If
Next
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 171
Membres
103 152
dernier inscrit
Karibu