XL 2016 Villes suivant le code postale : 2 problemes

sorgin

XLDnaute Nouveau
Salut

J'ai 2 colonnes, Code postales (F) et Villes (G). Quant je tape le code postal je veux faire apparaitre, dans la cellule de droite, la liste déroulante des villes qui correspondes à ce code postal. J'ai mis cette formule :
Code:
=DECALER(Lapurdi_CP;EQUIV($F2;Lapurdi_CP;0)-1;1;NB.SI(Lapurdi_CP;$F$2))

Mon premier probleme. Quant je confirme mes réglages dans Validations de données ça me dit que la source est reconnue comme eronnée. J'ai quant même dit que je voulais continuer. Malgré cette erreur ça marche :confused:. Même si ça marche, j'ai quant même eu cette erreur et j'aimerais bien savoir d'où ça vient, car la source du nom Lapurdi_CP est bonne.

Second probleme. Quant j’écris la code postale et que je fait entré, ça m'envoie sur la cellule de la ville et ça ouvre automatiquement la liste déroulante avec les villes qui correspondantes aux code postal. Le probleme c'est que ça ne le fait pas pour les autres cellules. J'ai mis cette macros :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$F2" And Target.Count = 1 Then
     Application.EnableEvents = False
     Target.Offset(0, 1) = Empty
     n = Application.CountIf([Lapurdi_CP], Target)
     Select Case n
       Case 1
         Target.Offset(0, 1) = [Lapurdi_CP].Find(Target, LookAt:=xlWhole).Offset(0, 1)
         Target.Offset(0, 2) = [Lapurdi_CP].Find(Target, LookAt:=xlWhole).Offset(0, 2)
       Case Is > 1
         Target.Offset(0, 1).Select
         SendKeys "%{down}"
      End Select
      Application.EnableEvents = True
  End If
  If Target.Address = "$G2" And Target.Count = 1 Then
    Target.Offset(0, 1) = [Lapurdi_Villes].Find(Target, LookAt:=xlWhole).Offset(0, 1)
  End If
End Sub

Merci d'avance pour votre aide.
 

Pièces jointes

  • Liste test.xlsx
    12 KB · Affichages: 93

Modeste

XLDnaute Barbatruc
Bonjour sorgin,

Pour la formule dans la Validation de données, essaie
Code:
=DECALER(Listes!$A$3;EQUIV($F2;Lapurdi_CP;0)-1;1;NB.SI(Lapurdi_CP;$F2))

Pour ce qui est de ta macro, je n'en comprends pas bien l'utilité ... Je ne peux donc rien répondre!
 

sorgin

XLDnaute Nouveau
Ha mince, a la place du 1° Lapurdi_CP je devais mettre le nom de la feuille où se trouve les listes. Maintenant je le saurais ;). Merci pour ton aide.

Pour la macro, quant on a écris le code postale on tape sur entre et ça ouvre automatiquement, sur la cellule d’à-côté, la liste des villes qui correspondes au code postale. Ça évite la manip d'ouvrir la liste déroulante. C'est une petite manip, mais quant il faut la faire plusieurs fois c'est pas négligeable.
 

Modeste

XLDnaute Barbatruc
Bonsoir,

Ha mince, a la place du 1° Lapurdi_CP je devais mettre le nom de la feuille où se trouve les listes. Maintenant je le saurais
Ce n'est pas une question de nom de feuille manquant: dans ta formule de départ, tu décales toute la plage correspondant à ce nom. Il ne faut décaler que la première cellule de cette plage. Ce n'est sans doute pas la raison de ton message d'erreur à la création de la Validation (peut-être simplement qu'à ce moment il n'y avait pas de CP renseigné!?)

sorgin à dit:
Pour la macro, quant on a écris le code postale on tape sur entre et ça ouvre automatiquement, sur la cellule d’à-côté, la liste des villes qui correspondes au code postale. Ça évite la manip d'ouvrir la liste déroulante. C'est une petite manip, mais quant il faut la faire plusieurs fois c'est pas négligeable.
Ta macro semble faire plus de choses que ce que ton exemple laisser penser. Par exemple, elle garnit la colonne G et la colonne H, lorsqu'un CP ne présente qu'une occurrence dans la plage Lapurdi_CP et elle garnit la colonne H, lorsqu'une ville est indiquée en colonne G avec le contenu d'une 3e colonne o_O
Quoi qu'il en soit, quand tu écris
VB:
 If Target.Address = "$F2" ...
il est assez normal que l'événement ne soit intercepté qu'au changement de valeur en ... F2! Si tu veux travailler sur une plage plus étendue une solution (parmi d'autres) serait d'écrire:
VB:
If Not Intersect(Target, [F2:F500]) Is Nothing ...
Toute modification d'une quelconque cellule de la plage F2:F500 provoquera l'exécution de la procédure. À toi d'adapter ...
 

sorgin

XLDnaute Nouveau
Bonsoir,
Ce n'est pas une question de nom de feuille manquant: dans ta formule de départ, tu décales toute la plage correspondant à ce nom. Il ne faut décaler que la première cellule de cette plage. Ce n'est sans doute pas la raison de ton message d'erreur à la création de la Validation (peut-être simplement qu'à ce moment il n'y avait pas de CP renseigné!?)

Même avec la correction de ma formule le message d'erreur est toujours présent, donc ça ne doit pas venir de ça. Par contre il y a un truc vraiment zarbi. Quant je met à jour la formule dans le fichier sur lequel je travaille, la liste de la cellule F2 (donc celle de la ville) ne s'ouvre pas. Alors que si je la met a jour dans le fichier que j'ai mis en pièce jointe de mon 1° message la liste s'ouvre...

Rien ne change entre ces 2 fichiers, a part le fait que dans le fichier sur lequel je travaille, en attendant de solutionner le probleme, j'en ai profiter pour avancer dans les mises en forme du tableau (j'ai mis en pièce jointe les 2 fichiers).

Pour les codes postaux ils sont renseignés depuis la création du fichier.

Edit : j'ai trouvé la formule et la macro sur le site boisgontierjacques.free.fr dans un fichier excel exemple. Je je met également en pièce jointe (Code-postal villes.xls).
 

Pièces jointes

  • Liste des Entreprises.xlsx
    12.4 KB · Affichages: 85
  • Liste test.xlsx
    12.1 KB · Affichages: 74
  • Code-postal villes.xls
    46.5 KB · Affichages: 95
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 178
Messages
2 085 984
Membres
103 079
dernier inscrit
sle