Ce programme s’appuie sur le code trouvé à l’URL suivante
La macro présentée à cette URL contenant un caractère spécial (le MULTIPLICATION SIGN qui n’est pas la lettre x), il a été difficile de recopier le script pour créer une macro sur Word Macintosh car l’éditeur de code VBA ne semble pas capable d’accepter des caractères spéciaux comme ce dernier)
J’ai de plus ajouté une option pour mettre ou non des espaces insécables autour de ce signe.
Vous pouvez tester cette macro en la lançant sur les nombres suivants.
Pour annuler l’opération, il faudra faire plusieurs fois <Control> <Z>
Attention : la macro s’applique à tout le texte de ce document.
Conseil de lancement de cette macro :
Evitez de placer le curseur à l’intérieur d’un nombre quand vous lancez cette macro
Limtes du programme :
Ne fonctionne pas (encore) lorsque les nombres ne possèdent pas au moins un caractère qui le suit. Par exemple, dans le tableau ci-dessous, il y a un caractère <espace> juste après le dernier caractère de l’exposant.
SI vous lancez cette macro sur un texte brut de tableau (colonnes délimitées par une tabulation ou un autre signe), la macro fonctionnera sans problème.
Si vous lancez cette macro sur un tableau avec des cellules, les nombres non traités seront ceux qui ne seront pas suivis d'un caractère autre qu'un chiffre.
Résultat
| Nombres à convertir | Résultat de la conversion |
| 1.2345E+067 | 1.2345 × 1067 |
| 1.2345E67 | 1.2345 × 1067 |
| 8.2345E-067 | 8.2345 × 10-67 |
| 8.2345E-67 | 8.2345 × 10-67 |
| 1.2345E+067 | Ne fonctionne pas |
| 1.2345E67 | Ne fonctionne pas |
| 8.2345E-067 | Ne fonctionne pas |
| 8.2345E-67 | Ne fonctionne pas |
Nouvelle version
Sub ConvNbEnNotationScientifiqueNormalisee()
'Ce programme s’appuie sur le code trouvé à l’URL suivante https://superuser.com/questions/1142900/scientific-notation-in-microsoft-word
reponse = MsgBox("Voulez-vous des espaces insécables avant ET Apres la croix de mltiplcation ?", vbYesNo, "Avertissement")
' put in general form
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "([0-9.]@)E([-+0-9]@)([!0-9])"
.Replacement.Text = "\1##x10§§\2##\3"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
' take out leading 0 exponents - Transforme un 10^+037 en 10^+37
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "§§+0"
.Replacement.Text = "§§+"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
' take out + exponents - Transforme un 10^+20 en 10^20
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "§§+"
.Replacement.Text = "§§"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
' take out leading 0 exponents for negative numbers - Transforme un 10^-020 en 10^-20
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "§§-0"
.Replacement.Text = "§§-"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
' elevate exponents - met en superscript la puissance de 10
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find.Replacement.Font
.Superscript = True
.Subscript = False
End With
With Selection.Find
.Text = "§§([-+0-9]@)##"
.Replacement.Text = "§§\1"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Dim CroixMultiplication As String
Dim EspaceInsecable As String
FuturEventuelEspaceInsecable = "<futurEventuelEspaceinsecable>"
CroixMultiplication = ChrW$(215)
ChaineRemplacement = FuturEventuelEspaceInsecable & CroixMultiplication & FuturEventuelEspaceInsecable & 10
' free up x10
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "##x10§§"
.Replacement.Text = ChaineRemplacement
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
' enleve les chaines "<futurEventuelEspaceinsecable>" et remplace par des espaces insecables si l'option est activé
If (reponse = vbYes) Then
ChaineRemplacement = "^s"
Else
ChaineRemplacement = ""
End If
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = FuturEventuelEspaceInsecable
.Replacement.Text = ChaineRemplacement
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub