Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Exposants et indices dans une cellule

0 views
Skip to first unread message

ROGOEN Eric

unread,
Apr 25, 2000, 3:00:00 AM4/25/00
to
Bonjours à tous,
 
J'utilise énormément la mise en exposant ou en indice de caractères individuels dans une même cellule.
Pour cela, je sélectionne le caractère puis dans le menu Format->Cellule->Police, je coche la case "Exposant" ou "Indice".
J'ai donc créé deux boutons pour automatiser ces procédures fastidieuses en leur affectant une macro.
C'est là que ça coince :-((
 
L'enregistreur de macro utilise le code suivant :
 
ActiveCell.Characters(Start, Lenght).Font.Superscript = True
 
Mais il utilise le texte d'exemple qui m'a servi à créer la macro !...
 
Je ne parvient pas à récupérer les paramètres Start et Lenght correspondant au texte sélectionné dans la cellule qui varient d'un cas à l'autre bien sûr :-((((
 
Malgré mes recherches dans l'aide, je n'ai pas trouvé de solution qui marche.
Pour info, je travaille avec Excel 97 (VBA pour Excel) sous NT4.
 
Si quelqu'un a une solution à me proposer, elle sera la bienvenue.
Merci d'avance.
 
 

Tertonn

unread,
Apr 25, 2000, 3:00:00 AM4/25/00
to
Rectification
With Worksheets("Feuil1").Range("A1")
    .Value = "ax6"
    .Characters(3, 1).Font.superscript = True
End With
Kenavo
"ROGOEN Eric" <in...@boutillet.fr> a écrit dans le message news: uOMwS5rr$GA....@cppssbbsa02.microsoft.com...

ROGOEN Eric

unread,
Apr 25, 2000, 3:00:00 AM4/25/00
to
OK merci, ton truc çà marche. Mais je ne peut pas mettre le "3" et le "1" dans le code, ne sachant pas où sera situé le caractère à mettre en exposant. Je me suis peut-être mal exprimé.
Ce que je veut faire, c'est mettre en exposant les caractères que j'ai sélectionnés dans le texte de la cellule. La sélection étant différente à chaque fois, il doit bien exister un procédure qui renvoi les propriétés de celle-ci car manuellement ça fonctionne par le menu ! (J'ai bien trouvé SelStart, SelLenght ou SelText sans succès)
 
Je te remercie quand même ;-)
Tertonn <ter...@free.fr> a écrit dans le message : ECjN4.137$Bu6.5...@nnrp3.proxad.net...

Frédéric Sigonneau

unread,
Apr 26, 2000, 3:00:00 AM4/26/00
to
Salut,

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


ROGEON Eric

unread,
Apr 26, 2000, 3:00:00 AM4/26/00
to
Je te remercie pour ta solution, elle me parait séduisante.
Par contre, il ne se passe rien :-(
J'ai dû louper un épisode !

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


Frédéric Sigonneau

unread,
Apr 26, 2000, 3:00:00 AM4/26/00
to
ROGEON Eric a écrit :

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

ROGEON Eric

unread,
Apr 26, 2000, 3:00:00 AM4/26/00
to
Pas réaction non plus !?...

--

Frédéric Sigonneau

unread,
Apr 26, 2000, 3:00:00 AM4/26/00
to

ROGEON Eric <in...@boutillet.fr> a écrit dans le message :
#MGIs81r$GA.191@cppssbbsa05...

> Pas réaction non plus !?...

Un fichier exemple dans ta BAL.

Fs

ROGEON Eric

unread,
Apr 26, 2000, 3:00:00 AM4/26/00
to
Youpi! çà marche :~))))

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...

Frédéric Sigonneau

unread,
Apr 26, 2000, 3:00:00 AM4/26/00
to
ROGEON Eric a écrit :
>
> Youpi! çà marche :~))))
[couic]

> Par contre, peut-tu me dire à quoi sert la ligne "HasDelimiteur = False"
> dans la Fonction "HasFlagExpInd"?

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é.

0 new messages