Liste déroulante ne fonctionnant pas correctement
Bonjour,
J'avais posé une question concernant un petit problème avec liste déroulante. Une réponse me fut faite et j'en étais satisfaite. Or, je suis tenue de revenir sur la question. C'est une liste déroulante avec code postal et ville.
Certes la réponse qui me fut faite fonctionne, mais la fonction Recherchev va chercher la 1ère réponse qu'elle trouve dans la liste des villes et l'affiche, or, plusieurs communes ont le même code postal. La fonction doit donc m'afficher toutes les communes portant
le même code postal? Dans le cas du fichier joint, il y a 2 communes ayant le même code postal, elle doit m'afficher
les deux afin que l'utilisateur puisse faire son choix. Désolée de m'en être rendue compte 48 heures après.
Merci d'avance pour toute réponse
Bonjour
Très chère amie du Forum
En effet, la réponse qui vous fut adressée n'envisageait pas l'hypothèse de réponses multiples. Il existe plusieurs solutions pour accéder à votre demande et afin de vous donner celle qui correspondrait le mieux, selon votre souhait, il nous serait fortement utile que vous puissiez nous apporter quelques précisions sur votre formulation.
En effet, à l'examen du fichier exemple que vous avez bien voulu joindre, selon l'usage, à votre demande, nous constatons que la cellule C3 de la Feuil1 du dit fichier ne contient pas de liste déroulante et vous écrivez
La fonction doit donc m'afficher toutes les communes portant
le même code postal? Dans le cas du fichier joint, il y a 2 communes ayant le même code postal, elle doit m'afficher
les deux afin que l'utilisateur puisse faire son choix
Cette formulation nous plonge dans un état de perplexité que vous comprendrez sans doute. Vous dites "La fonction doit donc m'afficher toutes les communes .." et plus loin, vous précisez "afin que l'utilisateur puisse faire son choix".
Vous omettez de nous faire savoir si le choix de l'utilisateur se fera dans l'affichage des réponses uniques ou diverses de la colonne E ou si vous eussiez préféré une option permettant à l'utilisateur d'effectuer ce choix de la commune directement à partir de la liste déroulante.
Dans l'attente, nous vous proposons un affichage de réponses uniques ou multiples, selon le cas à l'aide de formules dites matricielles; lesquelles nécessitent pour fonctionner correctement d'être validées, non avec la touche traditionnelle "Entrée" mais par l'appui consécutif des 3 touches Ctrl, Maj (ou Shift selon votre version de clavier) et Entrée.
Souhaitant avoir ainsi contribué à votre entière satisfaction, nous serons toujours heureux de vous retrouver sur ce Forum.
Bonjour
Sur ce second fichier, nous portons à votre connaissance quelques suggestions concernant l'établissement de la liste déroulante sans doublon et classée numériquement.
A cet effet, nous avons ajouté 2 formules nommées et modifié celle délà existante.
Toujours dans l'espoir de vous étre agréable.
Bien cordialement
Bonjour Amadeus,
Ce n'est pas toujours très facile à expliquer. Je dois créer des listes déroulantes, notamment pour des codes postaux et villes correspondantes. J'avais déjà réussi cette liste déroulante et cela fonctionnait en utilisant validation des données. Quand on saisit dans code postal le code qui le concerne, on obtenait la liste de toutes les villes portant ce code.. Sauf que j'ai du détruire ces cellules. Je ne sais pourquoi, maintenant à chaque tentative excel me répond "Vous ne pouvez pas faire référence à d'autres feuilles ou classeurs pour les validations de données". Quand quelque chose a déjà fonctionné, il doit à nouveau marcher.
Les données sont sur la feuil2. Il y a deux villes qui ont le même code postal ; avec la formule dans la cellule ville, on obtient une seule réponse. Cette réponse était bonne mais incomplète.
Je continue mes recherches..
Votre proposition malheureusement ne peut convenir. Merci d'avoir fait une réponse..
Bonjour
avec la formule dans la cellule ville, on obtient une seule réponse. Cette réponse était bonne mais incomplète.
Vous souhaitiez obtenir 2 réponses quand 2 villes avaient le même code postal sélectionné dans la liste déroulante en C3. La solution que nous vous avons proposé donne ce résultat.
Exemple: Si en C3 vous sélectionnez le code postal 78113
En E3 s'affiche Adainville
En E4 s'affiche Bourdonné
Vous avez bien vos 2 réponses.
Pour ce qui est du message d'Excel
"Vous ne pouvez pas faire référence à d'autres feuilles ou classeurs pour les validations de données".
Vous constaterez que celui-ci n'intervient pas sur le fichier exemple joint à mon message (?)
Peut-être vous a-t-il échappé que sur mon message, je vous signalais
A cet effet, nous avons ajouté 2 formules nommées et modifié celle délà existante.
C'est le nom d'une de ces formules nommée qui est utilisé dans la validation de données de la liste déroulante et c'est aussi l'utilisation d'un nom dans cette validation qui fait qu'Excel n'affiche pas le message précédent.
Espérant que cette explication vous permettra une meilleure compréhension de la réponse..
Si toutefois, quelque chose nous avait échappé dans la résolution de votre question, vous seriez aimable de nous le préciser, afin que nous puissions orienter notre recherche dans la direction souhaitée.
Cordialement
Salut,
Pour l'instant Amadeus je regarde votre proposition tranquillement, car pour l'instant je n'ai pas compris comment tout cela fonctionne.
Merci de m'avoir fait cette réponse. Excel est plus compliqué que je pensais, aujourd'hui cela marche, demain la même chose ne marche plus, c'est déconcertant.
Je ne ferme pas encore ce message, le temps que j'arrive à comprendre et à appliquer votre réponse.
Merci et Bonne soirée.
Bonjour
Excel est plus compliqué que je pensais, aujourd'hui cela marche, demain la même chose ne marche plus, c'est déconcertant.
Désolé de vous contredire, une formule correctement écrite ne varie pas dans le temps sauf éventuellement si cette formule référe à des dates qui influent sur le résultat.
cordialement
Bonjour,
Une solution en pièce jointe.
Le code des macros est dans le module de Feuil1
A+
Bonjour,
Je dois revenir vers vous car des petits problèmes se posent encore pour cette liste déroulante avec ou sans combobox.
Dans vianney2.xlsm la formule fonctionne sauf, que je ne puis l'appliquer car le fonctionnement est étalé sur
plusieurs cellules, la fiche définitive est une fiche personnelle avec adresse et je ne dispose que d'une seule cellule pour
afficher la ville.
Dans ce cas la proposition faite dans vianney1_G.xslm serait plus adéquate et elle fonctionne là aussi, mais
je rencontre 3 autres petits problèmes
1) Dans l'exemple, la cellule de la ville semble grise comme si elle est effacée, quand on quitte la cellule, c'est peut-être juste une affaire de format, tout ce que j'ai essayé n'est d'aucun effet.
2) Dans le fichier définitif les reports semblent avoir été bien faits, (apparemment je n'ai pas fait d'erreur de reports), mais
la macro se heurte à la ligne Set isect = Application
3) Je n'arrive pas à implanter le combobox dans la cellule I3, ce que vous avez parfaitement réussi dans l'exemple. J'ai beau dire dans la macro d'implanter le combobox dans cette cellule cela ne fonctionne pas.
Merci pour tous les efforts que vous avez déjà fournis pour résoudre cette question.
Je vous expédie l'exacte feuille du classeur et vianney1_G.xslm.
Merci d'avance
Bonjour,
Je ne comprend pas tu peux reformuler ?1) Dans l'exemple, la cellule de la ville semble grise comme si elle est effacée
C'est normal tu as mis une option Explicit dans ton module, moi je n'ai pas déclaré mes variables...2) Dans le fichier définitif les reports semblent avoir été bien faits, (apparemment je n'ai pas fait d'erreur de reports), mais
la macro se heurte à la ligne Set isect = Application
De toutes façons ça ne marcherait pas car tu n'as pas utilisé le même type de contrôle que moi : J'ai utilisé un Combo de la liste d'Outils Active X et non un contrôle de formulaire.
Si tu te mets en mode création et que tu fais un clic sur mon contrôle, dans la barre de formule tu vois écrit :
=INCORPORER("Forms.ComboBox.1";"")
Si tu fais un clic droit sur mon contrôle, tu as la possibilité d'afficher ses propriétés. Dans cette fenêtre de propriété le nom que j'ai défini est "ComboVille"
Ce contrôle ne fait pas référérence à une cellule : C'est la macro qui se charge du transfert dans la cellule E3
Toujours en mode création si tu fais un clic sur ton contrôle il ne se passe rien.
Si tu fais un clic droit sur ton contrôle tu vois son nom à l'extrème gauche de la barre de formule et tu vois dans la barre de formule que son contenu est :
='[essai (1).xlsm]Feuil1'!$I$13
Enfin dans mon exemple les codeville ont un nom défini dans le gestionnaire de nom.
Bref les fonctionnements n'ont rien à voir...
Il faut revoir ta copie sous cet angle et déclarer mes variables comme suit
Dim isect, Z$, k%, j%Je joins ton fichier modifié avec mes spécifications. Tu pourras t'entrainer à faire de même ligne 26, il suffira de créer un autre Combo que tu nommeras différemment (ComboVille2 par exemple). Mais celà entrainera une modification conséquente du Worksheet_Change. Reviens me voir si tu n'y arrives pas.
[Nota] Il n'existe pas d'évènement Worksheet_BeforeClose. Je l'ai donc supprimé. Et j'ai mis un BeforeClose dans ThisWorkbook ce qui est l'unique place ou tu peux le mettre.
A+
Bonsoir,
Merci Galopin tu m'as encore sauvée. Je vais devoir dire à ma Présidente c'est grâce à excel-pratique qu'elle pourra mieux gérer ses dossiers. En un mot cela fonctionne, sauf que comme j'ai deux codes postaux sur la même page, j'ai aussi deux "Private Sub Worksheet_Change", or le bon sens dit que l'on peut n'avoir qu'un seul. Vous avez traité déjà cette question le 22/11/2011, mais je ne sais pas l'appliquer. Vous disiez qu'il faut mélanger les deux. Les sources sont les mêmes. J'ai doublé les Private avec les nouvelles données dans le fichier.
Je renvoie le fichier vianney2_G.xlsm.
Merci d'avance
Bonsoir,
En effet il ne faut qu'un Worksheet_Change.
Voici le code :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect, Z$, k%, j%
If Target.Count = 1 Then
Set isect = Application.Intersect(Range("D13"), Target)
If Not isect Is Nothing Then
Z = Format(Target, "00000")
On Error GoTo GESTERR
ComboVille.Clear
k = Feuil2.Range("CodeVille").Rows.Count + 1
For j = 2 To k
If CStr(Feuil2.Cells(j, 1)) = Z Then ComboVille.AddItem Feuil2.Cells(j, 2)
Next j
End If
Set isect = Application.Intersect(Range("D26"), Target)
If Not isect Is Nothing Then
Z = Format(Target, "00000")
On Error GoTo GESTERR
Comboempl.Clear
k = Feuil2.Range("CodeVille").Rows.Count + 1
For j = 2 To k
If CStr(Feuil2.Cells(j, 1)) = Z Then Comboempl.AddItem Feuil2.Cells(j, 2)
Next j
End If
End If
Exit Sub
GESTERR:
End SubA+
Bonjour,
Les listes déroulantes fonctionnent correctement maintenant. Merci à Galopin. Merci à tous. Je ferme le message.