Actualiser le gestionnaire de nom

Bonjour,

Voici tout d'abord à quoi ressemble mon fichier.

capture d ecran 2019 09 04 a 17 45 52

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.

Bonjour,

merci de joindre votre fichier excel.

Bonjour,

merci de joindre votre fichier excel et d'expliquer le but du code.

Je suis d'accord Isabelle, je suis dessus et assez perplexe depuis hier !

Si le but est d'éviter des doublons, et comme les noms ne peuvent pas faire référence à une formule matricielle, il faudra utiliser un "Scripting.Dictionary" ou faire une copie de la liste et supprimer les doublons par la fonction excel.

Ensuite, cela m'intéresse aussi de voir comment tu vas résoudre le problème de boris.

ouff! j'ai fais une demande le jour même de la gaffe mais bon, pas d'action ni de réponse

suppression de messages

je clic à nouveau sur "Modifier" pour voir si ça faire une modification au message,

en espérant que cela ne fasse pas un nouveau message.

je vois que c'est ok,

c'est peut être un problème avec ma souris, depuis quelque jours je dois la brancher plus souvent,

je vais devoir voir si je change la batterie ou la souris.

est que ça vaut la peine de changer la batterie de la souris ?

? !

Il m'arrive de faire répondre au lieu d'éditer ... je pense que c'est à cela que tu fais allusion. Pas très grave !

En tous cas ta demande a été supprimée, mais pas les messages "i" !

capture d ecran 55 capture d ecran 56

Re et merci pour vos réponses.

Alors pour re résumer.

Il y a 2 pages:

2019 et Aircraft list.

Dans la page 2019, on renseigne les vols qu'un pilote peut faire avec notamment le type et les immatriculations de l'avion.

A savoir en F6 le type de l'avion qui est appelé par une liste nommé AVION

puis en fonction du type de l'avion, on choisit l'immat qui va bien ( G6 ).

La liste "AVION" ne cause pas de problème mais le nom des listes associés à chaque avion ne se met pas à jour.

Par exemple si je vole sur C_172 et la liste portant le nom C_172 va etre associé I19:AG19 .

Mais si je déplace C_172 de ligne, alors je vais avoir deux noms associés à I19:AG19 bref ca me fou le bordel quoi...

J'avais du coup imaginé un bout de truc pour supprimer les noms puis les remettre a chaque fois qu'un item est modifié mais c'est assez beaucoup lourd...

Le fichier est en Pièce jointe. Merci pour vos réponses. Si je me suis mal exprimé, n'hésitez pas.

Bonjour,

tu utilises =INDIRECT(F6) très bien, mais le nom F6 (enfin son contenu) n'est pas défini ...

capture d ecran 59 capture d ecran 60

Il n'est pas indispensable dans ton cas de créer les noms pour chaque type d'avion.

Tu peux utiliser la formule suivante pour valider les données de la colonne G

=DECALER('Aircraft list'!$H$3;EQUIV('2019'!F6;'Aircraft list'!$H$4:$H$59;0);1;1;25)
capture d ecran 61

Plus fin pour éviter les plages vierges ...

=DECALER('Aircraft list'!$H$3;EQUIV(F6;'Aircraft list'!$H$4:$H$59;0);1;1;NBVAL(DECALER('Aircraft list'!$H$3;EQUIV(F6;'Aircraft list'!$H$4:$H$59;0);1;1;25)))

Vous etes parfait, merci merci merci ...

Rechercher des sujets similaires à "actualiser gestionnaire nom"