XL 2016 VBA - Mettre en Indice une partie du contenu d'une cellule : problème avec la propriété Font.Subscript

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 !

crocrocro

XLDnaute Impliqué
Bonjour,
La propriété Font.Subscript qui permet de mettre en Indice (ou de l'enlever) une partie du contenu de la cellule ne fonctionne pas correctement lorsque le contenu de la cellule à des caractéristique de police (Exposant - Indice - Normal) hétérogène.
Au moins dans mon code 😠
Voici un exemple de résultats obtenus
1738866813430.png

Le code
VB:
Option Explicit
Sub CaractèresIndicésNonIndicés()
Dim i As Integer
Dim Message As String
    Application.ScreenUpdating = False
    Message = "Liste des caractères passés de Indicé à Non Indicé :"
    For i = 1 To Len(ActiveCell.Value)
        If ActiveCell.Characters(i, 1).Font.Subscript = True Then
            ActiveCell.Characters(i, 1).Font.Subscript = False
            Message = Message & vbLf & i & "ème caractère : " & ActiveCell.Characters(i, 1).Caption
        End If
    Next i
    Application.ScreenUpdating = True
    MsgBox Message
End Sub
Sub ChiffresEnIndicés()
Dim i As Integer
Dim CaractèreCourant As String
Dim Message As String
    Application.ScreenUpdating = False
    Message = "Liste des caractères passés en Indicés :"
    For i = 1 To Len(ActiveCell.Value)
        CaractèreCourant = Mid(ActiveCell.Value, i, 1)
        If CaractèreCourant >= "0" And CaractèreCourant <= "9" Then
            ActiveCell.Characters(i, 1).Font.Subscript = True
            Message = Message & vbLf & i & "ème caractère : " & ActiveCell.Characters(i, 1).Caption
        End If
    Next i
    Application.ScreenUpdating = True
    MsgBox Message
End Sub

Sub NonChiffresEnNonIndicés()

Dim i As Integer
Dim CaractèreCourant As String
Dim Message As String
    Application.ScreenUpdating = False
    Message = "Liste des caractères passés en Non Indicés :"
    For i = 1 To Len(ActiveCell.Value)
        CaractèreCourant = Mid(ActiveCell.Value, i, 1)
        If CaractèreCourant < "0" Or CaractèreCourant > "9" Then
            ActiveCell.Characters(i, 1).Font.Subscript = False
            Message = Message & vbLf & i & "ème caractère : " & ActiveCell.Characters(i, 1).Caption
        End If
    Next i
    Application.ScreenUpdating = True
    MsgBox Message
End Sub
En PJ, le fichier correspondant.
Merci d'avance à la personne qui m'indiquera ma (ou mes) erreur(s) ...
 

Pièces jointes

Bonjour,
La propriété Font.Subscript qui permet de mettre en Indice (ou de l'enlever) une partie du contenu de la cellule ne fonctionne pas correctement lorsque le contenu de la cellule à des caractéristique de police (Exposant - Indice - Normal) hétérogène.
Au moins dans mon code 😠
Voici un exemple de résultats obtenus
Regarde la pièce jointe 1212570
Le code
VB:
Option Explicit
Sub CaractèresIndicésNonIndicés()
Dim i As Integer
Dim Message As String
    Application.ScreenUpdating = False
    Message = "Liste des caractères passés de Indicé à Non Indicé :"
    For i = 1 To Len(ActiveCell.Value)
        If ActiveCell.Characters(i, 1).Font.Subscript = True Then
            ActiveCell.Characters(i, 1).Font.Subscript = False
            Message = Message & vbLf & i & "ème caractère : " & ActiveCell.Characters(i, 1).Caption
        End If
    Next i
    Application.ScreenUpdating = True
    MsgBox Message
End Sub
Sub ChiffresEnIndicés()
Dim i As Integer
Dim CaractèreCourant As String
Dim Message As String
    Application.ScreenUpdating = False
    Message = "Liste des caractères passés en Indicés :"
    For i = 1 To Len(ActiveCell.Value)
        CaractèreCourant = Mid(ActiveCell.Value, i, 1)
        If CaractèreCourant >= "0" And CaractèreCourant <= "9" Then
            ActiveCell.Characters(i, 1).Font.Subscript = True
            Message = Message & vbLf & i & "ème caractère : " & ActiveCell.Characters(i, 1).Caption
        End If
    Next i
    Application.ScreenUpdating = True
    MsgBox Message
End Sub

Sub NonChiffresEnNonIndicés()

Dim i As Integer
Dim CaractèreCourant As String
Dim Message As String
    Application.ScreenUpdating = False
    Message = "Liste des caractères passés en Non Indicés :"
    For i = 1 To Len(ActiveCell.Value)
        CaractèreCourant = Mid(ActiveCell.Value, i, 1)
        If CaractèreCourant < "0" Or CaractèreCourant > "9" Then
            ActiveCell.Characters(i, 1).Font.Subscript = False
            Message = Message & vbLf & i & "ème caractère : " & ActiveCell.Characters(i, 1).Caption
        End If
    Next i
    Application.ScreenUpdating = True
    MsgBox Message
End Sub
En PJ, le fichier correspondant.
Merci d'avance à la personne qui m'indiquera ma (ou mes) erreur(s) ...
Bonsoir,
Bizarrement, si on reprend toutes les propriétés du caractère à modifier, ça marche.
Encore un comportement plutôt étrange d'Excel.
VB:
Sub CaractèresIndicésNonIndicés()
Dim i As Integer
Dim Message As String
    Application.ScreenUpdating = False
    Message = "Liste des caractères passés de Indicé à Non Indicé :"
    For i = 1 To Len(ActiveCell.Value)
        If ActiveCell.Characters(i, 1).Font.Subscript = True Then
            With ActiveCell.Characters(Start:=i, Length:=1).Font
                .Name = "Calibri"
                .FontStyle = "Normal"
                .Size = 18
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ThemeColor = xlThemeColorLight1
                .TintAndShade = 0
                .ThemeFont = xlThemeFontMinor
            End With
            Message = Message & vbLf & i & "ème caractère : " & ActiveCell.Characters(i, 1).Caption
        End If
    Next i
    Application.ScreenUpdating = True
    MsgBox Message
End Sub
Cordialement,
 
Bonjour @Gégé-45550 , merci pour votre retour mais chez moi, votre code ne fonctionne pas :
Tous les caractères passent en non indicés et pas seulement les non-indicés (ici 34).
De plus, on perd la couleur, ici rouge pour 34.
Je ne l'ai pas écrit, mais le code devant fonctionner quelle que soit la police, je ne dois pas mettre "en dur" les caractéristiques.

1738915743768.png


Et, comme vous le dites, une nouvelle bizarrerie d'Excel.
J'ai déjà constaté qu'Excel était (très ?) mauvais pour tout ce qui concerne la mise en forme sélective (par caractère) du contenu d'une cellule.
Je suis en train de finir de mettre au point un outil équivalent à la fonction Rechercher-Remplacer d'Excel qui présente pas mal d'inconvénients résumés ici
1738916459430.png
 
- 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

Réponses
3
Affichages
534
Retour