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
Re

Avec cet variable pleine d'humour
Cela fonctionne très bien

Je ne connaissais pas xlCellType
Je n'ai rien trouvé sur F1
Mais d'après ce que j'ai trouvé sur le Net
Bien que je n'ai trouvé que des informations en Anglais !
Si je comprend bien (Car pas très bon en anglais!)
Tu déclare par ce biais les colonnes en Variables de type Constante
Et tu les traites dans la macro suivante
Est-ce bien cela ?

Donc "xlCellType" et "xlCellTypeConstants" sont des variables ?
 

Si...

XLDnaute Barbatruc
Bon_jour

On peut aussi jouer à cache-cache (bascule va et vient)
VB:
Private Sub ToggleButton1_Click()
    Dim C As Range, n As Byte
    For Each C In Range("B:B,D:D,F:F,H:H, J:J, L:L, N:N").SpecialCells(2)
    C.Font.Color = 0
    If ToggleButton1 Then
      n = InStrRev(C, " ")
      If n > 0 Then C.Characters(n, Len(C) + 1 - n).Font.Color = 10213316
    End If
  Next
End Sub
 

Pièces jointes

  • Cacher ou pas #.xlsm
    18.9 KB · Affichages: 13

Staple1600

XLDnaute Barbatruc
Re,

@Gedch
Re
Avec cet variable pleine d'humour
Cela fonctionne très bien
Je ne connaissais pas xlCellType
Je n'ai rien trouvé sur F1
Donc "xlCellType" et "xlCellTypeConstants" sont des variables ?

Alors utilisons l’enregistreur de macros pour éclairer la piste d'envol ;)
1) écris A1 en A1 puis =LIGNE() en A2
2) Sélectionnes A1:A2 et recopie vers le bas (jusqu'en A27)
3) Appuis sur F5, clic sur Cellules et coche Constantes
Arrête alors l’enregistreur de macros
Et observes le code VBA obtenu.

Tu peux refaire la manip en cochant Formules, tu verras alors la syntaxe du code VBA changer.
 

Staple1600

XLDnaute Barbatruc
Re

@Gedch
Je te mets une macro obtenu (et un peu remaniée) avec l'enregistreur de macros
VB:
Sub MacroDeTestI()
Columns(1).Delete: Range("A1") = "A1": Range("A2") = "=ROW()"
Range("A1:A2").AutoFill Destination:=Range("A1:A27")
Range("A1:A27").SpecialCells(xlCellTypeConstants, 23).Select
MsgBox "Les cellules suivantes:" & Chr(13) & Selection.Address(0, 0) & Chr(13) & "contiennent des données Texte.", vbInformation, "Avertissement"
End Sub

Ceci devrait également éclairer ta lanterne
Ce lien n'existe plus
 

Staple1600

XLDnaute Barbatruc
Re

@Gedch
Dans le lien de mon précédent message
Il y a une macro de _Thierry (souvenirs, souvenirs ;)), mal formatée par l'interface du forum.
Je l'ai ici correctement écrite (et légèrement modifiée)
Testes la sur une feuille vierge
VB:
Sub CelluleFullStatistique()
Dim Plage As Range
Dim Total!, NonVide!, ValText!, ValNume!, ValForm!, ValErre!, ValVide!, ValCond!, ValComm!, ValVali!, valVisi!

Set Plage = Sheets(1).Range("A1:J1")
Plage.Value = Array(Date, 1, vbNullString, "STAPLE", "=ROW()", 7, 8, "=5/0", 11, "Z")
Total = Plage.Count

On Error Resume Next
NonVide = Plage.SpecialCells(xlCellTypeConstants, 23).Count
ValVide = Plage.SpecialCells(xlCellTypeBlanks).Count
ValText = Plage.SpecialCells(xlCellTypeConstants, xlTextValues).Count
ValNume = Plage.SpecialCells(xlCellTypeConstants, xlNumbers).Count
ValForm = Plage.SpecialCells(xlCellTypeFormulas).Count
ValErre = Plage.SpecialCells(xlCellTypeFormulas, xlErrors).Count
ValCond = Plage.SpecialCells(xlCellTypeAllFormatConditions).Count
ValComm = Plage.SpecialCells(xlCellTypeComments).Count
ValVali = Plage.SpecialCells(xlCellTypeAllValidation).Count
valVisi = Plage.SpecialCells(xlCellTypeVisible).Count
MsgBox "La zone contient " & Total & " cellules réparties comme suit : " & vbCrLf _
& vbTab & "Cellule Non Vide" & vbTab & vbTab & ": " & NonVide & vbCrLf _
& vbTab & "Cellule Etant vide" & vbTab & vbTab & ": " & ValVide & vbCrLf _
& vbTab & "Cellule Ayant du Texte" & vbTab & ": " & ValText & vbCrLf _
& vbTab & "Cellule Valeur Numérique" & vbTab & ": " & ValNume & vbCrLf _
& vbTab & "Cellule Avec Formule" & vbTab & ": " & ValForm & vbCrLf _
& vbTab & "Cellule Etant en Erreur" & vbTab & ": " & ValErre & vbCrLf _
& vbTab & "Cellule Format Conditionnel" & vbTab & ": " & ValCond & vbCrLf _
& vbTab & "Cellule Avec Commentaire" & vbTab & ": " & ValComm & vbCrLf _
& vbTab & "Cellule Critère de validation" & vbTab & ": " & ValVali & vbCrLf _
& vbTab & "Cellule Visible" & vbTab & vbTab & ": " & valVisi & vbCrLf
End Sub
 

Gedch

XLDnaute Occasionnel
Re

Merci beaucoup de ton courage pour ce cours improvisé !

Non je n'avais pas vu le lien !
J'avais bien trouvé les différents types sur le net mais sans détail et non traduits

Merci d'avoir remanié la macro présente dans ce lien
Car effectivement elle ne fonctionnait pas dans l'état

Si un texte est constant, encore que certains mots peuvent varier au pluriel, au féminin .....
pourquoi ne pas l'avoir appelé xlCellTypeText au lieu de xlCellTypeConstants ??

Je remarque (ce qui me semble ??) une erreur dans le résultat
Mais c'est sans doute encore que je ne comprend pas quelque chose
1 Cellule vide (d'accord)
7 cellules non vides (J'en vois 9 ?)
Et 1 + 7 = 8, pas 10 ??

Pour ce qui est des cellules au TypeAllFormatConditions
Si c'est bien du formatage des cellules qu'il s'agit
Toutes ces 10 cellules ayant le même formatage
Le nombre devait donc être 10 et non 0 ?

Pour ce qui des cellules de TypeAllValidation
J'avoue que je ne pas avoir d'idée de ce que est cette validation ?
 

Staple1600

XLDnaute Barbatruc
Re,

@Gedch
Comme ce n'est pas le sujet de ta question* (SpecialCells et xlCellType), je te suggère d'ouvrir une nouvelle discussion pour des questions sur ces constantes d'Excel.

PS: Tu as bien observé tous les options possibles quand tu as appuyé sur la touche F5?

*: le sujet étant ici de dissimuler les caractères # dans des cellules (et uniquement en fin de chaîne)

PS: Il faut lire Constant comme Constante (puisque cela vient de l'anglais)
Rien à voir avec le féminin, masculin ou pluriel.
 

Staple1600

XLDnaute Barbatruc
Re,

@Gedch
Je remarque (ce qui me semble ??) une erreur dans le résultat
Mais c'est sans doute encore que je ne comprend pas quelque chose
1 Cellule vide (d'accord)
7 cellules non vides (J'en vois 9 ?)
Et 1 + 7 = 8, pas 10 ??
Une dernière macro pour t'expliquer pourquoi on trouve 7
VB:
Sub Test_II()
[A1:J1] = Array(Date, 1, vbNullString, "STAPLE", "=ROW()", 7, 8, "=5/0", 11, "Z")
With [A1:J1].SpecialCells(xlCellTypeConstants, 23)
NonVide = .Count
Adresses = .Address(0, 0)
End With
MsgBox "Nombre de cellules ""Texte"" non vides: " & Chr(13) & vbTab & NonVide & _
Chr(13) & "Adresse des cellules: " & Chr(13) & vbTab & Adresses
End Sub
 

Gedch

XLDnaute Occasionnel
Re,

Tu as raison cela n'a rien à voir avec ma demande
Je répondais cela, car j'ai essayé de comprendre la macro que tu as introduite dans la discussion
Comme je m’efforce toujours de comprendre les macros qui me sont offertes
Je n'ai pas résisté à cette réponse

Je vais entre temps essayé d'approfondir ces notions

Pour en revenir au sujet, ce qui m'importe pour l'heure
C'est donc de comprendre la macro en question :

Est-ce ce que tu as utilisé ce type de code "xlCellType"
Pour permettre à la macro "Private Sub OnNousDitRienOnNousCachePresqueTout" de fonctionner
Avec 2 possibilités de choix de colonnes ?
(Soit avec les colonnes énumérées dans les macros test_A ou test_B)

Ou en d'autres termes
Aurait tu pu déclarer simplement ces variables de type constant en tête de module
comme on le fait généralement pour les autres variables
et ne pas utiliser type de code "xlCellType" ?

Il n'y a pas obligation de réponse
Car les 2 macros que j'ai obtenues de toi et de PierreJean fonctionnent parfaitement
Et donc ma demande est donc classée
 

Staple1600

XLDnaute Barbatruc
Re

@Gedch
La macro que j'appelle paramétrable, c'est juste un petit plus ;)
Elle permet de appeler la macro avec des des parametres
Je la remets (avec un nom plus "sérieux" et des commentaires)
VB:
Sub test_C()
'Cette macro appelle la macro paramétrable nommée CacherCaracteres
'le premier paramètre c'est la plage de cellules
'le second le type de cellule ciblé ici les cellules "texte"
CacherCaracteres Range("B:B,D:D,F:F,H:H,J:J,L:L,N:N"), xlCellTypeConstants
End Sub

Private Sub CacherCaracteres(MesColonnes As Range, MesCellules As XlCellType)
'Déclarations des variables
Dim c As Range, x
'Fige le rafraîchissement de l'écran
Application.ScreenUpdating = False
'Boucle sur toutes les cellules des colonnes  de la variable MesColonnes
'en prenant en compte que les cellules "Texte" définies par la variable MesCellules
For Each c In MesColonnes.SpecialCells(MesCellules)
On Error Resume Next
'x=la position du dernier espace
x = InStrRev(c.Text, Chr(32))
If x > 0 Then
c.Characters(x, Len(c) + 1 - x).Font.Color = c.Interior.Color
'Ici en se basant sur la valeur de x, on trouve les caractères
'dont il faut changer la couleur pour les dissimuler
End If
Next
End Sub|/code]
 

Gedch

XLDnaute Occasionnel
Re
Et bien j'ai bien fait de continuer cette conversation
Et je te remercie beaucoup d'avoir pris la peine de commenter ta macro
Avec cette macro commentée tout devient limpide pour moi
Je comprends à présent parfaitement ton code.

Juste une dernière question
Tu n'a pas cataloguer la variable X
Elle prend donc le type Variant si je ne me trompe pas ?
Pourtant x est une valeur numérique
Ne devrait on pas mettre "Dim x as Integer" ?
 

Staple1600

XLDnaute Barbatruc
Re

@Gedch
Exact
Quand tu déclares les variables sans préciser : Dim x As ...
Par défaut la variable est déclaré As Variant
Donc effectivement on pouvait déclarer
Dim x As Integer
ou aussi
Dim x As Byte
ou même
Dim x As Long

PS: Ça fait plaisir de voir un demandeur qui se creuse les méninges ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 966
Membres
103 069
dernier inscrit
jujulop