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