Bonsoir,
le code de votre dernier fichier joint (ci-dessous) présente un problème important, à rectifier avant de continuer :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i&, deb, pass As Boolean, C
mem = Target.Address(0, 0)
Range("D2") = UCase(Range("D2"))
Range("D5") = UCase(Range("D5"))
Range("D8") = UCase(Range("D8"))
On Error Resume Next
For Each C In Array("D2", "D5", "D8", "D11", "I15", "I17", "I19", "I27", "I29", "G33", "H33", "I33", "J33", "N33", "G35", "H35", "I35", "J35", "N35", "G37", "H37", "I37", "J37", "N37", "G39", "H39", "I39", "J39", "N39", "G41", "H41", "I41", "J41", "N41")
If pass Then Range(C).Select: pass = 0: Exit Sub
i = i + 1
If mem = C Then: pass = 1: GoTo 1
1 Next C
End Sub
Dès l’exécution de : Range("D2") = UCase(Range("D2")), un évènement supplémentaire est créé, puis un autre, etc... jusqu'à l'infini.
L’exécution de cette routine ne progresse pas plus loin.
Lorsque vous modifiez une cellule dans un évènement [Worksheet_Change], pensez à arrêter les évènements auparavant, puis les relancer une fois votre traitement terminé, exemple :
Application.EnableEvents = False
' code de votre traitement
Application.EnableEvents = true