Bonjour,
4 secondes, ça te va?
J'ai "un peu" modifié ton code......
dans le Private Sub Worksheet_Change de la feuille Notice :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" Then
LangueChoisie = Target
Call traduc
End If
End Sub
et dans un module standard :
Public LangueChoisie As String
Sub traduc()
Dim t, cel As Range
Dim Languecolonne As Byte
t = Timer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Sheets("Textes")
Application.EnableEvents = False
Languecolonne = Application.Match(LangueChoisie, .Range("A1:IV1"), 0)
For Each cel In .Range("B2:B" & .[B65000].End(xlUp).Row)
If cel <> "" Then
If .Cells(cel.Row, Languecolonne).MergeCells Then
.Cells(cel.Row, Languecolonne).MergeArea.Copy Range(cel.Value).MergeArea
Else
.Cells(cel.Row, Languecolonne).Copy Range(cel.Value).MergeArea
End If
End If
Next cel
End With
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
MsgBox Timer - t
End Sub
j'ai laissé le t = Timer et le msgbox de la fin, pour tester
Tu peux les supprimer, bien évidemment
Je crois que tu n'auras pas besoin de la barre de progression
Chez moi, cela fonctionne, j'espère qu'il en sera de même chez toi