Optimiser macro

F

Fabien

Guest
Bonjour

On m'a aidé à réaliser une macro
Le but est que dans la cellule F8, les trois derniers caractères soit écrit en exposant.
Mais la macro, au lieu de changer le texte de la cellule F8, me met le résultat dans la cellule ou je me trouve.
De plus je voudrais executer cette macro dans plusieurs cellules, qui sont
F8;F14;F20;F26;F32;F38;F44, Comment l'adapter

Ma Macro

Private Sub Worksheet_Activate()

With ActiveSheet
.EnableSelection = xlNoRestrictions
.Unprotect Password:="toto"

ActiveCell.FormulaR1C1 = Range("F8").Value
Mot = ActiveCell.Value
For I = 1 To Len(Mot)
If Mid(Mot, I, 1) <> Chr(32) Then
Else: tranche1 = Left(ActiveCell.Value, I)
GoTo suite
End If
Next I

suite:

With ActiveCell.Characters(Start:=I - 3, Length:=3).Font
.Superscript = True
End With

.EnableSelection = xlUnlockedCells
.Protect Password:="toto", Contents:=True, UserInterfaceOnly:=True, Scenarios:=True, DrawingObjects:=True
End With

End Sub

Merci
 
A

Abel

Guest
Bonjour Fabien, le forum

Ben c'est normal, puisque, justement, dans le code tu lui dis de mettre la valeur de "F8" dans la cellule active "ActiveCell.FormulaR1C1 = Range("F8").Value"

Maintenant, pour le faire sur les différentes cellules, et comme les s'incrémentent de 6 à chaque fois, il y a la solution de faire une boucle avec une pas de 6 :

For L=8 to 44 step 6
Mot= Range("F" & L)
....
With ActiveCell.Characters(Start:=I - 3, Length:=3).Font
.Superscript = True
End With
Next L

Je n'ai pas testé, mais à la louche, ça devrait le faire.

Si la solution de la boucle ne convient pas, il faudra travailler sur une sélection :

Range("F8,F14,F20,F26,F32,F38,F44").Select
For each c in selection
Mot = c.Value
....
With ActiveCell.Characters(Start:=I - 3, Length:=3).Font
.Superscript = True
End With
Next c



En espérant que cela te dépanne.

Abel
 
L

léa

Guest
Bonjour Fabien,

Il me semble reconnaître la macro que j'ai réalisée à la demande de l'un d'entre vous.
Le demandeur voulait écrire un texte avec à l'intérieur une partie de ce dernier en exposant, donc si tu l"appliques in extenso tu auras le même résultat (exemple : bon courage Fabien avec courage en exposant)
Il te faut donc modifier cette macro pour qu"elle ne te mette que les 3 derniers caractères en exposant
Ceci devrait te convenir :

ActiveCell.Select
Mot = ActiveCell.Value


With ActiveCell
.Characters(Len(Mot) - 2, 3).Font.Superscript = True
End With

la cellule que tu auras choisie subira le code

Bon courage
léa
 
F

Fabien

Guest
Merci

Je l'ai modifié, mais j'avais oblié de te dire que je suis pas très fort.
Tu vas rire

Ma macro

Sub AffichageSaison()

For L = 8 To 44 Step 6
Mot = Range("F" & L)
For I = 1 To Len(Mot)
If Mid(Mot, I, 1) <> Chr(32) Then
Else: tranche1 = Left(ActiveCell.Value, I)
GoTo suite
End If
Next I

suite:

With ActiveCell.Characters(Start:=I - 3, Length:=3).Font
.Superscript = True
End With
Next L
End Sub

Evidemment il faut déclarer "L" et çà je ne sais pas faire.

A+
 
A

Abel

Guest
Re,

Dans ce cas "L" n'a pas besoin d'être déclaré sauf s'il doit être utilisé dans différents modules auquel cas il faut le déclarer comme étant une variable publique. C'est à dire visible par tout le projet.

Si un jour tu en as besoin, en tête d'un module, écris :

Public L as "le type de variable que tu veux" (String, Range, Integer, etc).

Pour ce qui est de la rigolade, ne t'inquiète pas on a tous démarré un jour en tatonnant et même encore maintenant, en tous cas pour ma part, je me fait rire tout seul.

Abel
 

Statistiques des forums

Discussions
312 839
Messages
2 092 692
Membres
105 510
dernier inscrit
gabgil.