XL 2019 Réunir du texte

  • Initiateur de la discussion Initiateur de la discussion lynyrd
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bonjour le forum
y a t'il un moyen (par VBA) d'avoir sur 1 ligne par No de ligne
- le texte en français
- le texte en englais
Merci.
Bonjour,
avec 365, il existe la fonction "DÉTECTERLANGUE" qui renvoie le code de la langue reconnue dans le texte testé ('fr' pour français, 'en' pour anglais, etc.).
Cette fonction est loin d'être fiable à 100% mais elle permet quand même de détecter correctement la langue dans environ 90% à 95% des cas.
Pour le reste, une correction manuelle est nécessaire.
À partir de cette détection, on peut écrire un programme VBA qui concatènera les parties en français et les parties en anglais.
Cordialement,
 
Bonjour lynrd, le forum,

Avant de vous donner la macro voici quelques explications sur le fichier du post #1.

1) Les données en colonne A sont groupées en 719 paquets de 3, 4, 5, 6 cellules séparés par des cellules vides.

J'ai corrigé les paquets n° 156 et 670 qui étaient erronés.

2) Les paquets de 3 cellules (au nombre de 208) ne comportent qu'un seul texte, français ou anglais, il n'y a pas à y toucher.

3) Les paquets de 4 cellules (au nombre de 314) comportent 2 textes, normalement de 2 langues différentes.

Cependant une centaine de ces paquets sont dans une seule langue, il faut donc les reconnaître et concaténer les 2 textes.

4) Les paquets de 5 cellules (au nombre de 114) comportent 3 textes, de 2 langues différentes.

Il faut les reconnaitre et concaténer les 2 de la même langue.

5) Les paquets de 6 cellules (au nombre de 83) comportent 4 textes, 2 en français et 2 en anglais, il suffit de concaténer.

A+
 
Voici la macro, elle est placée dans le code de la feuille "Résultat" :
VB:
Private Sub Worksheet_Activate()
Dim francais As Range, a As Range, i, s, j
Set francais = [E2:E107]
Application.ScreenUpdating = False
Sheets("Données").[A:A].Copy [A1] 'copier-coller
For Each a In [A:A].SpecialCells(xlCellTypeConstants).Areas
    If a.Count = 4 Then
        For i = 3 To 4
            a.Cells(i, 2) = "A" 'repère anglais en colonne B
            s = Split(a.Cells(i).Text)
            For j = 0 To UBound(s)
                If Application.CountIf(francais, s(j)) Then a.Cells(i, 2) = "F": Exit For 'repère français en colonne B
            Next j
        Next i
        If a.Cells(3, 2) = a.Cells(4, 2) Then
            a.Cells(3) = a.Cells(3).Text & " " & a.Cells(4).Text 'concaténation
            a.Cells(4).Delete xlUp
        End If
        a.Cells(3, 2).Resize(2) = "" 'effacement des repères en colonne B
    ElseIf a.Count = 5 Then
        For i = 3 To 5
            a.Cells(i, 2) = "A" 'repère anglais en colonne B
            s = Split(a.Cells(i).Text)
            For j = 0 To UBound(s)
                If Application.CountIf(francais, s(j)) Then a.Cells(i, 2) = "F": Exit For 'repère français en colonne B
            Next j
        Next i
        If a.Cells(3, 2) = a.Cells(4, 2) Then
            a.Cells(3) = a.Cells(3).Text & " " & a.Cells(4).Text 'concaténation
            a.Cells(4).Delete xlUp
        ElseIf a.Cells(4, 2) = a.Cells(5, 2) Then
            a.Cells(4) = a.Cells(4).Text & " " & a.Cells(5).Text 'concaténation
            a.Cells(5).Delete xlUp
        End If
        a.Cells(3, 2).Resize(3) = "" 'effacement des repères en colonne B
    ElseIf a.Count = 6 Then
        a.Cells(3) = a.Cells(3).Text & " " & a.Cells(4).Text 'concaténation
        a.Cells(5) = a.Cells(5).Text & " " & a.Cells(6).Text 'concaténation
        a.Cells(6).Delete xlUp
        a.Cells(4).Delete xlUp
    End If
Next a
Columns(1).AutoFit
End Sub
Elle se déclenche automatiquement quand on active la feuille.
 

Pièces jointes

Re-,
et pour répondre aux 2 autres personnes,je rééncode le film et a la fin avoir les 2 sous titres en meme temps.
Je pense que cela va être très difficile :

Version française, phase 10 :

10
00:03:11,680 --> 00:03:16,470
Un triste matin
de cette sombre année 44

Version anglaise, phase 10 et 11 :

10
00:03:11,378 --> 00:03:14,006
One miserable morning.

11
00:03:14,089 --> 00:03:16,051
In black '44.

Bonne journée
 
et pour répondre aux 2 autres personnes,je rééncode le film et a la fin avoir les 2 sous titres en meme temps.
Il y a aussi des sites en ligne qui fusionnent des sous-titres de différentes langues. Par exemple ici
En pièce jointe le fichier résultant de la fusion de la version anglaise et de la version française des sous-titres de The Wall 1982
 

Pièces jointes

Prenez cette version (2), l'écriture des cellules et plages est plus simple :
VB:
Private Sub Worksheet_Activate()
Dim francais As Range, a As Range, i, s, j
Set francais = [E2:E107]
Application.ScreenUpdating = False
Sheets("Données").[A:A].Copy [A1] 'copier-coller
For Each a In [A:A].SpecialCells(xlCellTypeConstants).Areas
    If a.Count = 4 Then
        a(3, 2).Resize(2) = "A" 'repère anglais en colonne B
        For i = 3 To 4
            s = Split(a(i).Text)
            For j = 0 To UBound(s)
                If Application.CountIf(francais, s(j)) Then a(i, 2) = "F": Exit For 'repère français en colonne B
            Next j
        Next i
        If a(3, 2) = a(4, 2) Then
            a(3) = a(3).Text & " " & a(4).Text 'concaténation
            a(4).Delete xlUp
        End If
    ElseIf a.Count = 5 Then
        a(3, 2).Resize(3) = "A" 'repère anglais en colonne B
        For i = 3 To 5
            s = Split(a(i).Text)
            For j = 0 To UBound(s)
                If Application.CountIf(francais, s(j)) Then a(i, 2) = "F": Exit For 'repère français en colonne B
            Next j
        Next i
        If a(3, 2) = a(4, 2) Then
            a(3) = a(3).Text & " " & a(4).Text 'concaténation
            a(4).Delete xlUp
        ElseIf a(4, 2) = a(5, 2) Then
            a(4) = a(4).Text & " " & a(5).Text 'concaténation
            a(5).Delete xlUp
        End If
    ElseIf a.Count = 6 Then
        a(3) = a(3).Text & " " & a(4).Text 'concaténation
        a(5) = a(5).Text & " " & a(6).Text 'concaténation
        a(6).Delete xlUp
        a(4).Delete xlUp
    End If
Next a
Columns(2).ClearContents 'effacement des repères en colonne B
Columns(1).AutoFit 'ajustement largeur
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
19
Affichages
472
Réponses
2
Affichages
124
Réponses
56
Affichages
2 K
Réponses
3
Affichages
85
Retour