Sous-titres : incrémentation de toutes les chaînes de caractères "hh:mm:ss,mmm"

Contenu du snippet

Petite macro word servant à incrémenter toutes les chaînes de caractères codant le temps dans un sous-titre.

Source / Exemple :


Sub IncrementTempo()
    
    Dim ToutLeSub As String
    Dim TexteFinal As String
    Dim ligne As String
    Dim carac As String
    
    Dim increment As Long
    
    Dim LongueurSub As Integer
    Dim i As Integer
    
    TexteFinal = ""
    increment = InputBox("temps additionnel en millisecondes", "Tempo")
    
    'selection de tout le texte
    Selection.WholeStory
    ToutLeSub = Selection
    LongueurSub = Len(ToutLeSub)
    
    'decoupage ligne a ligne
    For i = 1 To LongueurSub
        
        'caractere lu
        carac = Mid(ToutLeSub, i, 1)
        
        'detection retour a la ligne (caractere de valeur 13)
        If Asc(carac) <> 13 Then ligne = ligne + carac Else TexteFinal = TexteFinal + ReecritureSub(ligne, increment)
        
    Next

    Selection.TypeText (TexteFinal)

End Sub

Function ReecritureSub(texte As String, increment As Long) As String
    
    'detection lignes de tempo contenant la chaine "-->"
    If Mid(texte, 13, 5) = " --> " Then texte = IncremTempo(texte, increment)
    
    'obtention texte finale avec les tempos modifiees
    ReecritureSub = texte + vbCr
    
    'RAZ de la ligne
    texte = ""
    
End Function

Function IncremTempo(texte As String, increment As Long) As String

    Dim PremiereTempo As String
    Dim SecondeTempo As String
        
    PremiereTempo = Mid(texte, 1, 13)
    SecondeTempo = Mid(texte, 18, 13)
    
    IncremTempo = AdditionTempo(PremiereTempo, increment) + " --> " + AdditionTempo(SecondeTempo, increment)
    

End Function

Function AdditionTempo(texte As String, increment As Long) As String

    Dim heure As Integer
    Dim minute As Integer
    Dim seconde As Integer
    Dim millisec As Integer
    
    heure = Mid(texte, 1, 2) + (increment \ 3600000)
    minute = Mid(texte, 4, 2) + (increment \ 60000) - ((increment \ 3600000) * 60)
    seconde = Mid(texte, 7, 2) + (increment \ 1000) - ((increment \ 60000) * 60)
    millisec = Mid(texte, 10, 3) + increment - ((increment \ 1000) * 1000)
    
    While (millisec >= 1000)
        millisec = millisec - 1000
        seconde = seconde + 1
    Wend
    
    While (seconde >= 60)
        seconde = seconde - 60
        minute = minute + 1
    Wend
    
    While (minute >= 60)
        minute = minute - 60
        heure = heure + 1
    Wend
    
    AdditionTempo = convertFormat(heure, 2) + ":" + convertFormat(minute, 2) + ":" + convertFormat(seconde, 2) + "," + convertFormat(millisec, 3)

End Function

Sub CorrigeValeur(minute As Integer, seconde As Integer, millisec As Integer)
    Do
        millisec = millisec - 1000
        seconde = seconde + 1
    While (millisec > 1000)

End Sub

Function convertFormat(valeur As Integer, longueur As Integer) As String
    convertFormat = valeur
    
    If Len(convertFormat) < longueur Then convertFormat = "0" + convertFormat
    If Len(convertFormat) < longueur Then convertFormat = "0" + convertFormat
    
End Function

Conclusion :


Il s'agit juste d'un exemple qui permettra aux débutants de mieux comprendre la manipulation de chaînes de caractères avec un exemple concret:
00:00:13,835 --> 00:00:21,105
Hello!

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.