"ROGOEN Eric" <in...@boutillet.fr> a écrit dans le message news: uOMwS5rr$GA....@cppssbbsa02.microsoft.com...
Tertonn <ter...@free.fr> a écrit dans le message : ECjN4.137$Bu6.5...@nnrp3.proxad.net...
En m'appuyant sur la réponse de Tertonn, je te propose une fonction et
une procédure qui te feront sans doute gagner du temps par rapport à tes
boutons.
Le principe est, quand tu tapes l'entrée dans une cellule, de faire
précéder le chiffre ou la lettre à mettre en exposant ou en indice d'un
caractère "marqueur". Tu peux prendre, par exemple, l'accent circonflexe
pour un exposant et un point virgule pour un indice.
Tu tapes donc, par exemple, a^2+b!4
Lorsque tu valides ensuite par Entrée, la fonction renvoie vrai si elle
rencontre l'un des deux marqueurs. La procédure applique la mise en
forme suivant le marqueur.
Dans l'événement Worksheet_Change de ta feuille, écris cette ligne de
code
If HasFlagExpInd(Target, "^", ";") Then Call AvecExpInd(Target, "^",
";")
Ainsi toutes tes saisies seront testées et mises en forme
automatiquement si besoin.
Dans un module, recopie le code suivant :
Function HasFlagExpInd(ByVal Src As Range, FlagExposant As String,
FlagIndice As String)
HasDelimiteur = False
If Src.Count > 1 Then Exit Function
For i = 1 To Src.Characters.Count
If (Src.Characters(i, 1).Text = FlagExposant) Or _
(Src.Characters(i, 1).Text = FlagIndice) Then
HasFlagExpInd = True
Exit Function
End If
Next
End Function
Sub AvecExpInd(ByVal Src As Range, FlagExposant As String, FlagIndice As
String)
If Src.Count > 1 Then Exit Sub
For i = 1 To Src.Characters.Count
If Src.Characters(i, 1).Text = FlagExposant Then
Src.Characters(i + 1, 1).Font.Superscript = True
Src.Characters(i, 1).Delete
ElseIf Src.Characters(i, 1).Text = FlagIndice Then
Src.Characters(i + 1, 1).Font.Subscript = True
Src.Characters(i, 1).Delete
End If
Next
End Sub
HTH
FS
--
Frédéric Sigonneau
Gestions de temps : http://perso.wanadoo.fr/frederic.sigonneau
Time managements : http://perso.wanadoo.fr/frederic.sigonneau/index2.htm
Apparement l'évenement Worksheet_Change ne se produit pas !
J'ai pourtant insérer les lignes suivantes dans un module (Module1 dans
PERSO.XLS)
Private Sub Worksheet_Change(ByVal Target As Range)
If HasFlagExpInd(Target, "^", ";") Then Call AvecExpInd(Target, "^",
";")
End Sub
ainsi que HasFlagExpInd et AvecExpInd dans le même module
où est le problème ?
Eric R. - in...@boutillet.fr - www.boutillet.fr
C'est dans l'événement Worksheet_Change de la feuille où tu travailles
que tu dois entrer if etc., pas dans une feuille du perso.xls
--
Un fichier exemple dans ta BAL.
Fs
L'erreur que j'ai commise est que j'ai utilisé Worksheet_Change au lieu de
Workbook_SheetChange.
En plus je l'avais placé dans le module1 au lieu de ThisWorkbook, alors...
Par contre, peut-tu me dire à quoi sert la ligne "HasDelimiteur = False"
dans la Fonction "HasFlagExpInd"?
Ne serais-ce pas plutôt "HasFlagExpInd= False" afin d'initialiser la
variable avant le contrôle?
Merci de m'avoir consacré un peu de ton temps.
Frédéric Sigonneau <frederic....@wanadoo.fr> a écrit dans le message :
8e6g83$afv$1...@wanadoo.fr...
A rien (voir plus bas)
> Ne serais-ce pas plutôt "HasFlagExpInd= False" afin d'initialiser la
> variable avant le contrôle?
Si. J'avais commencé par une première version mettant uniquement en
exposant, et la function de test s'appelait HasDelimiteur. Et puis j'ai
modifié pour inclure la mise en indice, modifié les noms des
procédures,... et j'en ai oublié.