Recherche V dans un menu déroulant

diego3110

XLDnaute Junior
Bonjour le forum,

Je ne savais pas trop comment être explicite dans mon titre....

J'ai une liste de phrase dans une feuille qui me sert comme menu deroulant dans une autre.


Voici mon pb, je voudrais que l'utilisateur puisse taper un mot et que la liste deroulante me proposent uniquement les phrases de la liste qui contienne ce mot? (cela resseemble un peu à un moteur de recherche sur ma colonne de phrase).

Est ce que vous croyez que cel est possible?

Merci d'avance et bonne journée
 

diego3110

XLDnaute Junior
Re : Recherche V dans un menu déroulant

Salut Bruno, le forum,

Ca marche ....

Je pense que j'abuses mais vu que je demarre dans la programmation, j'ai du mal à avoir une vision d'ensemble et à reperer toutes les incidence d'un programme. J'aurais donc encore besoin d'une aide.

Voila dans l'ideal ce que j'aimerais réaliser pour les missions (voir piece jointe) :

- etape 1 : l'utilisateur tape un mot . Si ce mot est trouvé dans la liste alors la liste deroulante propose les solutions.

- étape 2 : Si aucune missions proposées n'est satisfaisante ou si le mot n'est pas trouvé alors on demande à l'utilisateur d'ecrire en toute lettre la mission.

- etape 3: Une fois la nouvelle mission saisie , demande si l'utilisateur veut l'ajouter à la liste des missions et on l'ajoute

Je pense que j'ai tout le code nécessaire dans la pièce jointe mais je ne vois pas du tout comment l'agencer pour que ces étapes se fasse dans le bon ordre.


Je mets donc en pièce jointe mon fichier final qui sera peut être plus parlant que mes pietres explications....lol

Merci d'avance
A+
 

Pièces jointes

  • Formulaires saisie fiches.xls
    144 KB · Affichages: 121
  • Formulaires saisie fiches.xls
    144 KB · Affichages: 130
  • Formulaires saisie fiches.xls
    144 KB · Affichages: 124
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Recherche V dans un menu déroulant

Re,

Bonne idée de JB, appliqué à ton fichier, cela donne ça

A toi de nous dire

A+
 

Pièces jointes

  • Diego3110_FormulairesSaisieFichesV2.xls
    158.5 KB · Affichages: 54
Dernière modification par un modérateur:

diego3110

XLDnaute Junior
Re : Recherche V dans un menu déroulant

re,

waouh.....c beau. J'aimerais vraiment pouvoir utiliser ce fichier mais...

- Par contre, je suis pas sur d'avoir tout compris d'un point de vu technique ce que tu as réalisés (le code derriere le userform et les macro filtrage mission et celle d'en dessous. A quelle moment, elles sont utilisées ?).

- D'un point de vue pratique : quand je clique sur la case B23 , la boite de dialogue apparait.
- je dois saisir un mot clés (exmple : analyse)
- ensuite il me propose dans la seconde les 2 missions contenant le mot analyse.
- comment faire pour que si aucune de ces 2 missions ne m'interressent , je puisse en ecrire une autre et que celle ci soit ensuite ajouter ?

Autre pb : si le mot cles que je cherche est ANATOMIE...je n'en ai pas la possibilité, il me force a choisir analyse ?

Je suis pas sur d'être clair mais en tout cas cela ressemble vraiment au resultat que je desirerait. Merci pour votre travail.
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Recherche V dans un menu déroulant

Re,

Pour le principe,
Lorsque l'utilisateur se déplace dans une des cellules de la zone Mission, cela appel l'USF

A l'initialisation
Code:
Private Sub UserForm_Initialize()
Un ensemble de terme est ajouté au "dictionnaire" en étant trié

Lors de la mise à jour de la Combobox1 (mot clé) par sélection ou saisie,
la liste de la combobox2 est mise à jour
AfterUpdate() = après saisie / Click() = après sélection
Code:
Private Sub ComboBox1_AfterUpdate()
  Dim C As Range
  Me.ComboBox2.Clear
  For Each C In[listeMissions]
    If LCase(C) Like "*" & LCase(Me.ComboBox1) & "*" Then Me.ComboBox2.AddItem C
  Next C
End Sub

Lors de la mise à jour de la Combobox2 (Mission) par sélection ou saisie,
si le texte n'appartient pas à un index de la liste
Code:
If Me.ComboBox2.ListIndex = -1 Then
C'est qu'il faut l'ajouter

Effectivement, j'ai modifié le code en conséquence et ajouté un petit texte en bas de l'USF

A+
 

Pièces jointes

  • Diego3110_FormulairesSaisieFichesV2.1.xls
    155.5 KB · Affichages: 38
Dernière modification par un modérateur:

diego3110

XLDnaute Junior
Re : Recherche V dans un menu déroulant

Bonjour le forum, Bruno,

Merci beaucoup pour tes explications. j'arrive à comprendre le déroulé de la macro (je pense que je peux donc enlever ...la derniere partir de ma macro ..juste avant FiltrageMission dans la feuille Formulaire de saisie qui concerne l'ajout des missions).

Sinon, cela marche tres bien mais lorsque je fais des tests. Si je mets une missions existante ...la textbox me demande si je veux l'ajouter et inversement si j'en ecris une nouvelle , cela s'ecrit sans rien me demander...Comment je peux inverser? Je vois que cela se trouve dans

ComboBox2_AfterUpdate
....Me.ComboBox2.ListIndex = 0

Merci pour ton aide.

Bonne journée
a+
 
C

Compte Supprimé 979

Guest
Re : Recherche V dans un menu déroulant

Salut diego3110,

Oups ... n'importe quoi :eek: il faut modifier le test
Code:
If Me.ComboBox2.ListIndex = -1 Then

A+
 
Dernière modification par un modérateur:

diego3110

XLDnaute Junior
Re : Recherche V dans un menu déroulant

Cool merci Bruno,


Cool. je voulais te remercier mais j'ai encore un petit souci.

Exemple : mot clés = "Anatomie"
Missions : "faire de l'anatomie"

La missions s'ajoute bien à la liste mais comment faire pour que le mot clés "Anatomie" apparaise lors des prochaines saisie et que la missions "Faire de l'anatomie" soit egalement proposé ?

a+
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Recherche V dans un menu déroulant

Re

La touche magique F1 ou le bouton "?"
Tu effectues la recherche sur : ListIndex
Et voilà la réponse

ListIndex, propriété
Identifie l'élément actuellement sélectionné dans un contrôle ListBox ou ComboBox.
Syntaxe
object.ListIndex [= Variant]
La syntaxe de la propriété ListIndex comprend les éléments suivants :
ÉlémentDescriptionobjectObjet valide.VariantFacultatif. Élément actuellement sélectionné dans le contrôle

Remarques
La propriété ListIndex contient un index de la ligne sélectionnée dans la liste. Les valeurs de la propriété ListIndex sont comprises entre –1 et le nombre total de lignes de la liste moins 1 (c'est-à-dire, ListCount – 1). Lorsqu'aucune ligne n'est sélectionnée, la propriété ListIndex renvoie la valeur –1. Quand l'utilisateur sélectionne une ligne d'un contrôle ListBox ou ComboBox, le système définit la valeur de la propriété ListIndex. La valeur de la propriété ListIndex de la première ligne de la liste est zéro, la valeur de la deuxième liste est 1, et ainsi de suite.
Note Si vous utilisez la propriété MultiSelect pour créer un contrôle ListBox permettant plusieurs sélections, la propriété Selected du contrôle ListBox (plutôt que la propriété ListIndex) identifie les lignes sélectionnées. La propriété Selected est un tableau ayant le même nombre de valeurs que le nombre de lignes du contrôle ListBox. Pour chaque ligne de la zone de liste, la propriété Selected contient la valeur True si la ligne est sélectionnée, et False si elle ne l'est pas. Dans un contrôle ListBox permettant plusieurs sélections, la propriété ListIndex renvoie l'index de la ligne ayant le focus, que celle-ci soit ou non actuellement sélectionnée.
La valeur de la propriété ListIndex est aussi disponible en affectant la valeur 0 à la propriété BoundColumn pour une liste modifiable ou une zone de liste. Si la valeur de la propriété BoundColumn est 0, la source de données sous-jacente de laquelle dépend la liste modifiable ou la zone de liste contient la même valeur d'index de liste que la propriété ListIndex.

A+
 

diego3110

XLDnaute Junior
Re : Recherche V dans un menu déroulant

re,

j'essaie d'identifier mon pb :
Exemple : mot clés = "Anatomie"
Missions : "faire de l'anatomie"

La missions s'ajoute bien à la liste mais comment faire pour que le mot clés "Anatomie" apparaise lors des prochaines saisie et que la missions "Faire de l'anatomie" soit egalement proposé ?

Je crois que le UserForm_Initialize qui créer le Dictionnaire des mots clés ne se relance pas/ ne se mets pas à jour à l'ouverture du fichier lorsqu'une ligne est ajouté à "Listemissions".

De plus, normalement avec la macro "AjouterElementAListe", ma nouvelle liste de missions devraient se trier par ordre alphabétique mais nela ne le fait pas ?

...merci d'avance si tu as une petite idée.
a+
 
C

Compte Supprimé 979

Guest
Re : Recherche V dans un menu déroulant

Re,

* Problème 1 : Dico
Il faut modifier le code du Cb2
Code:
Private Sub ComboBox2_AfterUpdate()
  ' Si le texte ne figure pas dans les choix proposés
  ' Demander à l'utilisateur
  If Me.ComboBox2.ListIndex = -1 Then
    'Demander à l'utilisateur s'il veut l'ajouter à la liste
    If MsgBox("Cette mission n'est pas encore réferencée." _
            & vbCrLf & "Voulez-vous l'ajouter?", _
              vbQuestion + vbYesNo, "Ajouter une mission") = vbYes Then
      'Si oui appeler la macro d'ajout
      AjouterElementAListe Sheets("Missions").Range("Listemissions"), Me.ComboBox2.Value
      Call UserForm_Initialize
    End If
  End If
  ' Inscire la valeur choisie
  ActiveCell = Me.ComboBox2
  Me.Hide
End Sub

* Problème 2 : le tri
Soucis, le tri n'est pas appliqué à la nouvelle dimension de la zone "ListeMissions"
Code:
Public Sub AjouterElementAListe(Liste As Range, ByVal Element As String)
  Dim nm As Name
  'On travail sur la plage nommée passée en paramètre
  With Liste
    'Récupèrer le nom de la plage nommée (de la liste) pour pouvoir la retaillée ci-dessous
    Set nm = .Name
    'rajouter l'élément dans la première ligne sous la liste
    'c'est à dire décaler la plage de son nombre de lignes à partir de la première
    ' retaillée à une ligne
    .Offset(.Rows.Count).Resize(1) = Element
    'redéfinition du nom avec la nouvelle ligne
    'C'est à dire retailler la plage à +1 ligne et renvoyer son address dans sa définition
    nm.RefersTo = "=" & .Parent.Name & "!" & .Resize(.Rows.Count + 1).Address
    Range("ListeMissions").Sort Key1:=.Cells(2, 1), Order1:=xlAscending, Header:=xlYes
  End With
End Sub

A+
 

diego3110

XLDnaute Junior
Re : Recherche V dans un menu déroulant

re,

J'ai modifié mon fichier pour reprendre la méthode proposée (j'y suis presque !!...je suis un peu fier quand même!!:)).

Mais j'ai encore 2 souci (je joins le fichier).

1/ Dans les menu déroulant : Si je choisi un mot clé : exemple pour les missions : "Accompagnement"
En mission, 2 propositions ...mais (par exemple) aucune ne me convient. Je voudrais ecrire : "Accompagnement des usagers".
Je ne peux pas car dés que je tape "A" dans la zone cela me valide "Assistance et accompagnement.....". ?


2/Pour ma partie sur les "Compétences relationnelles", la boite de dialogue marche nickel mais la mise à jour de la liste ne se fait pas si j'ajoute une nouvelle compétence (la compétence inserer n'est pas inclus dans la zone "CompRel" ...j'ai pourtant bien vérifié???(cela marche pour compétences technique).?

Merci d'avance. A+
 

Pièces jointes

  • Formulaires saisie fiches c.xls
    160.5 KB · Affichages: 86
C

Compte Supprimé 979

Guest
Re : Recherche V dans un menu déroulant

Re,

1) Il faut supprimer le Combobox2_Click()
2) Tu peux créer une seule et unique procédure d'ajout, voir code modifié

A+
 

Pièces jointes

  • Diego3110_Formulaires saisie fichesV3.1.xls
    152 KB · Affichages: 86
Dernière modification par un modérateur:

Discussions similaires

Réponses
13
Affichages
655
Réponses
5
Affichages
440
Réponses
1
Affichages
413

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel