Conversion Nb En notation scientifique normalisee

Ce programme s’appuie sur le code trouvé à l’URL suivante

https://superuser.com/questions/1142900/scientific-notation-in-microsoft-word

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 à convertirRésultat de la conversion
1.2345E+0671.2345 × 1067 
1.2345E67 1.2345 × 1067 
8.2345E-0678.2345 × 10-67
8.2345E-67 8.2345 × 10-67 
1.2345E+067Ne fonctionne pas
1.2345E67Ne fonctionne pas
8.2345E-067Ne fonctionne pas
8.2345E-67Ne 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