Transformation nombre : Notation Scientifique normalisée

Il transforme les nombres 1.2345E67, 1.234E-15, 0.245E+28 en 1.2345 x 1067, 1.234 x 10-15 , 0.245 x 1028

Avertissement

Ce programme ne fonctionne que si les nombres ne sont pas dans des cellules. Si les nombres sont séparés par des caractères du style tabulation (dans le cas d’un tableau importé), cet algorithme fonctionne.

Ce programme s’appuie sur le code trouvé à l’URL suivante https://superuser.com/questions/1142900/scientific-notation-in-microsoft-word

Les lignes 47 à 63 correspondent à la procédure rechercherEtRemplacer qui est une variante de celle écrite pour terminator3.

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 multiplication ?", vbYesNo, "Avertissement")
   If (reponse = vbYes) Then
 
   
    ' put in general form
    Call rechercherEtRemplacer("([0-9.]@)E([-+0-9]@)([!0-9])", "\1##x10§§\2##\3", True)
     
    ' take out leading 0 exponents  - Transforme un 10^+037 en 10^+37
     Call rechercherEtRemplacer("§§+0", "§§+", False)
          
    ' take out + exponents  - Transforme un 10^+20 en 10^20
 
     Call rechercherEtRemplacer("§§+", "§§", False)
     
  ' take out leading 0 exponents for negative numbers - Transforme un 10^-020   en 10^-20
    Call rechercherEtRemplacer("§§-0", "§§-", False)
     
    ' elevate exponents - met en superscript la puissance de 10
    Call rechercherEtRemplacerSuperscript("§§([-+0-9]@)##", "§§\1", True)
     
    Dim CroixMultiplication  As String
    Dim EspaceInsecable  As String
    FuturEventuelEspaceInsecable = "<futureventuelespaceinsecable>"
    CroixMultiplication = ChrW$(215)
 
   ChaineRemplacement = FuturEventuelEspaceInsecable & _
     CroixMultiplication & FuturEventuelEspaceInsecable & 10
     
    ' free up x10
    Call rechercherEtRemplacer("##x10§§", ChaineRemplacement, False)
     
    ' 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
    Call rechercherEtRemplacer(FuturEventuelEspaceInsecable, ChaineRemplacement, False)

  End if
     
End Sub
 
Sub rechercherEtRemplacer(texteAChercher, texteDeRemplacement, OptionCaractereGenerique)
 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find
  .Text = texteAChercher
  .Replacement.Text = texteDeRemplacement
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchWildcards = OptionCaractereGenerique
  .MatchSoundsLike = False
  .MatchAllWordForms = False
 End With
 Selection.Find.Execute Replace:=wdReplaceAll
End Sub
 
Sub rechercherEtRemplacerSuperscript(texteAChercher, texteDeRemplacement, OptionCaractereGenerique)
 Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .Superscript = True
        .Subscript = False
    End With
 With Selection.Find
  .Text = texteAChercher
  .Replacement.Text = texteDeRemplacement
  .Forward = True
  .Wrap = wdFindContinue
  .Format = True   '<---- ATtention, cette valeur doit etre à True
  .MatchCase = False
  .MatchWholeWord = False
  .MatchWildcards = OptionCaractereGenerique
  .MatchSoundsLike = False
  .MatchAllWordForms = False
 End With
 Selection.Find.Execute Replace:=wdReplaceAll
End Sub