Compter en VBA à partir de la fin.

Vidralta

XLDnaute Nouveau
Bonsoir tout le monde

Je viens de découvrir ce forum, et le trouvant fort interessant, je m'y suis inscrit en espérant trouver mon bonheur et peut-etre meme satisfaire celui de quelqu'un d'autre en lui proposant de l'aide ;) !!!

Mon probléme se trouve dans ce code :

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Right(Target.Value, 2) = "m3" Then
    With Target.Characters(Start:=2, Length:=1).Font
        .Superscript = True
    End With
End If
End Sub

Mon but est de transformer de le dernier caractére en exposant :
Ce code donne pour exemple :

Si je tape : m3 le trois se transforme en exposant (logique d'aprés le code!)
Mais lorsque je tape : 15m3 j'aimerai que ce soit le 3 qui se met en exposant et non le 5

Existe t'il un code me permettant de partir de la fin???

Exemple :
PHP:
Start:=(end-1), Length:=1

Ou existe t'il tout simplement une solution plus simple??:)

Merci d'avance

Vidralta
 

Gorfael

XLDnaute Barbatruc
Re : Compter en VBA à partir de la fin.

Vidralta à dit:
Bonsoir tout le monde

Je viens de découvrir ce forum, et le trouvant fort interessant, je m'y suis inscrit en espérant trouver mon bonheur et peut-etre meme satisfaire celui de quelqu'un d'autre en lui proposant de l'aide ;) !!!

Mon probléme se trouve dans ce code :

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Right(Target.Value, 2) = "m3" Then
With Target.Characters(Start:=2, Length:=1).Font
.Superscript = True
End With
End If
End Sub

Mon but est de transformer de le dernier caractére en exposant :
Ce code donne pour exemple :

Si je tape : m3 le trois se transforme en exposant (logique d'aprés le code!)
Mais lorsque je tape : 15m3 j'aimerai que ce soit le 3 qui se met en exposant et non le 5

Existe t'il un code me permettant de partir de la fin???

Exemple :
PHP:
Start:=(end-1), Length:=1

Ou existe t'il tout simplement une solution plus simple??:)

Merci d'avance

Vidralta
Salut et bonnes fêtes
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Right(Target.Value, 2) = "m3" Then Target.Characters(Start:=Len(Target), _
                  Length:=1).Font.Superscript = True
End Sub
J'ai testé, ça marche, mais......................
Si tu sélectionnes plusieurs cellules et que tu les effaces ou que tu fais un coller, tu passes en erreur. la même macro, tenant compte de ce problème :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
For Each Cel In Target
If Right(Cel.Value, 2) = "m3" Then Cel.Characters(Start:=Len(Cel), _
                  Length:=1).Font.Superscript = True
Next Cel
End Sub
Il semble que le changement de police ne déclenche pas d'événement, donc pas besoin de les inhiber pour éviter un bouclage, mais penses-y quand tu utilises les macros à lancement automatique.
A+
Nota : Avoir trouvé la syntaxe pour mettre en forme un caractère et buter sur un problème aussi simple, c'est toute la magie d'Excel. (et de ceux/celles qui le pratiquent)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 845
Messages
2 092 764
Membres
105 529
dernier inscrit
StarExcel