Bonjour,
Voici tout d'abord à quoi ressemble mon fichier.
Pour résumer, un tableau avec des noms d'avions et les immatriculations des avions.
J'aimerais que les listes créé par ma macro se mette à jour tout seul sans faire de doublons. Je précise que les listes en question sont appelées en cascade dans une autre page.
J'ai définis la liste "AVION" qui va de A4 à A 59 et ensuite sur chaque ligne la liste des immats de chaque TYPE d'avions.
Par exemple BE_76 correspond à I4:AG4.
J'avais commencé à faire mon code de la manière suivant jusqu'à ce que je me rende compte que si je changeais l'ordre de mes avions ou si je mettais le nom à jour, j'obtenais des doublons:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "*****"
If Not Application.Intersect(Target, Range("A4:A59")) Is Nothing Then
ActiveWorkbook.Names.Add Name:="AVION", RefersToR1C1:= _
"='Aircraft list'!R4C1:R59C1"
Range("H4:AG59").Select
Selection.CreateNames Top:=False, Left:=True, Bottom:=False, Right:= _
False
End If
If Not Application.Intersect(Target, Range("I4:AG59")) Is Nothing Then
ActiveWorkbook.Names.Add Name:="AVION", RefersToR1C1:= _
"='Aircraft list'!R4C1:R59C1"
Range("H4:AG59").Select
Selection.CreateNames Top:=False, Left:=True, Bottom:=False, Right:= _
False
End If
Range("A4").Select
ActiveSheet.Protect "*******", True, True, True
End Sub
Puis j'ai essayé de l'améliorer, mais inutique de vous dire que ca rame et que je suis sure qu'il y a moyen de faire mieux...:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "*****"
If Not Application.Intersect(Target, Range("A4:A59")) Is Nothing Then
Dim nm As Name
For Each nm In ActiveWorkbook.Names
nm.Delete
Next nm
ActiveWorkbook.Names.Add Name:="AVION", RefersToR1C1:= _
"='Aircraft list'!R4C1:R59C1"
Range("H4:AG59").Select
Selection.CreateNames Top:=False, Left:=True, Bottom:=False, Right:= _
False
End If
If Not Application.Intersect(Target, Range("I4:AG59")) Is Nothing Then
Dim nm As Name
For Each nm In ActiveWorkbook.Names
nm.Delete
Next nm
ActiveWorkbook.Names.Add Name:="AVION", RefersToR1C1:= _
"='Aircraft list'!R4C1:R59C1"
Range("H4:AG59").Select
Selection.CreateNames Top:=False, Left:=True, Bottom:=False, Right:= _
False
End If
Range("A4").Select
ActiveSheet.Protect "********", True, True, True
End Sub
Bref je sollicite votre aide pour simplifier un peu le bordel et faire en sorte que mon fichier ne rame pas...
Merci à vous.