'Auteur : JM CLIPET 29/10/2001
' Cette macro convertit les accords d'une grille (tableau) ou d'un morceau (texte)
' en degrés ( I II III IV V VI VII )
' Tout ce qui est en italique (Titres ou paroles...) n'est pas considéré comme accords
' et n'est donc pas transposé.
' De même tout ce qui est en exposant est considéré comme enrichissement et n'est donc pas transposé
' Par Ex Bb7 sera ransposé mais pas B(b5)
Dim lettre_chiffre(7) 'Pour convertir le nom de l'accord en degré de 1 à 12
lettre_chiffre(1) = 10 'Sans tenir compte des dièses et des bémols)
lettre_chiffre(2) = 12 '1 pour C, 3 pour D ... 12 pour B
lettre_chiffre(3) = 1
lettre_chiffre(4) = 3
lettre_chiffre(5) = 5
lettre_chiffre(6) = 6
lettre_chiffre(7) = 8
Dim Degre$(12)
Degre$(1) = "I"
Degre$(2) = "bII"
Degre$(3) = "II"
Degre$(4) = "bIII"
Degre$(5) = "III"
Degre$(6) = "IV"
Degre$(7) = "bV"
Degre$(8) = "V"
Degre$(9) = "bVI"
Degre$(10) = "VI"
Degre$(11) = "bVII"
Degre$(12) = "VII"
Dim Note1$(12)
Note1$(1) = "C"
Note1$(2) = "Db"
Note1$(3) = "D"
Note1$(4) = "Eb"
Note1$(5) = "E"
Note1$(6) = "F"
Note1$(7) = "Gb"
Note1$(8) = "G"
Note1$(9) = "Ab"
Note1$(10) = "A"
Note1$(11) = "Bb"
Note1$(12) = "B"
Dim Note2$(12)
Note2$(1) = "C"
Note2$(2) = "C#"
Note2$(3) = "D"
Note2$(4) = "D#"
Note2$(5) = "E"
Note2$(6) = "F"
Note2$(7) = "F#"
Note2$(8) = "G"
Note2$(9) = "G#"
Note2$(10) = "A"
Note2$(11) = "A#"
Note2$(12) = "B"
Dim ordre(12)
ordre(1) = 2
ordre(2) = 4
ordre(3) = 7
ordre(4) = 9
ordre(5) = 11
ordre(6) = 1
ordre(7) = 3
ordre(8) = 5
ordre(9) = 6
ordre(10) = 8
ordre(11) = 10
ordre(12) = 12
If Selection.Type = wdSelectionIP Then
MsgBox ("Veuillez sélectionner les accords à convertir en degrés")
End
End If
'supprime l'affichage en mode page pour ne pas perdre de temps avec la pagination
temp = ActiveWindow.View.Type
ActiveWindow.View.Type = wdNormalView
'Pour convertir le nom de l'accord en degré de 1 à 12
'1 pour C, 2 pour C#, 3 pour D ... 12 pour B
ton$ = InputBox$("Entrez la tonalité du morceau : ")
t = Asc(ton$) - 64
t = lettre_chiffre(t)
For i = 1 To Len(ton$)
If Mid$(ton$, i, 1) = "b" Then t
= t - 1
If Mid$(ton$, i, 1) = "#" Then t
= t + 1
Next i
t = -(t - 1) 'pour transposer du ton vers le degré I
'replace t entre 1 et 12
While (t <= 0)
t = t + 12
Wend
While (t >= 12)
t = t - 12
Wend
Selection.Find.ClearFormatting
Selection.Find.Font.Italic = False 'Ne modifie pas le texte en italique
Selection.Find.Font.Superscript = False 'Ni les altérations en exposant
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Rem Remplace A - G par I - VII transposés
For i = 1 To 12
Result = ordre(i) + t
If Result > 12 Then Result = Result
- 12
With Selection.Find
.Text = Note1$(ordre(i))
.Replacement.Text = Degre$(Result)
End With
Selection.Find.Execute
Replace:=wdReplaceAll
If (i <= 5) Then 'Si l'accord
With Selection.Find
.Text = Note2$(ordre(i))
.Replacement.Text =
Degre$(Result)
End With
Selection.Find.Execute
Replace:=wdReplaceAll
End If
Next i
ActiveWindow.View.Type = temp
MsgBox ("Fini !")
End Sub