XL 2016 Activer Combobox seulement quand je click sur la cellule liée

Philonce

XLDnaute Nouveau
Bonjour,

j'ai créer un système de recherche pour des tables d'opérations qui sont dans un feuille BD_Tables.
J'ai créé des Combobox pour chacunes des disciplines pour choisir le type de l'intervention et ensuite dans une autre cellule , il y a une formule index et equiv pour retrouver la table à utiliser.

Tout se passe bien jusque là sauf que lorsque je tape mon texte dans la première combobox. Nickel. Par contre, je tape dans la deuxième combobox mon texte, et là, la première s'ouvre....Je voudrais que seul la combobox concernée soient active lorsque je click dans la cellule liée. J'ai cherché beaucoup, mais tout ce que j'ai testé ne fonctionne pas. C'est le dernier truc qui me bloque pour finaliser, et je ne sais plus ou trouver ma solution.

J'espère que ce forum est toujours actif.

Merci d'avance,
 

Philonce

XLDnaute Nouveau
Bonjour,

merci pour la réponse.

Voici le dossier que j'ai créé. Je précise que je suis débutant en Excel. Désolé j'ai fait bcp de faute de cet Excel.

Merci pour votre aide,
 

Pièces jointes

  • (Test-05-02-2022)Bloc-op---Recherche-de-table.xlsm
    265.8 KB · Affichages: 11

Philonce

XLDnaute Nouveau
Re,

si ca peut aider (désolé, je sais que vous êtes sûrement bien meilleur que moi) mais j'ai déjà essayé ceci.

Dans le Code VBA sur la page Worksheet dans (selectionchange)

VB:
If not intersection (Target, Range("D9:D25")) is nothing And Target.count = 1 Then
    Me.combobox1.visible = True
    Me.combobox1.activate

Else
    Me.combobox1.visible = False
End If

Mais à part faire disparaite la box quand je click ailleur, ca ne l'a jamais fait réapparaitre.
 

job75

XLDnaute Barbatruc
Je crains de ne pas pouvoir continuer sur ce fil.

En effet je ne comprends pas du tout les définitions des listes "ListeCardio","ListeUro" etc...

Pourquoi ne pas utiliser simplement =BD_Tables!$F$2:$F$124, =BD_Tables!$F$126:$F$260 etc...

Je ne comprends pas à quoi servent les colonnes D E F (masquées) de la feuille BD_Tables.

Et j'ai horreur de me prendre la tête.

Juste une chose, en général on crée la liste d'une ComboBox avec l'évènement GotFocus, et la propriété .List, je ne sais pas si ça pourrait faire l'affaire ici.
 

Philonce

XLDnaute Nouveau
Bonsoir Job,

merci de prendre du temps. Alors comme dit précédemment, je ne m'y connais pas grandement et ce que tu me proposes ne me parle pas. Moi ce que j'ai fait, c'est suivre ce tuto


Je voudrais vraiment avoir cet effet (Dropdown je viens d'apprendre le mot il y a 2 min) style google. Je veux une liste déroulante autoprédictive. Je veux aussi que ma base de donnée soit dynamique. Si j'ajoute une ligne, je veux que tout se mette à jour.
Je veux cet effet visuel dans ma liste déroulante et en fonction de ce que je tape, j'ai mon resultat de table d'opération.

Je ne sais pas si je suis plus clair.....
 

Philonce

XLDnaute Nouveau
Rebonjour,



alors j'ai trouvé une solution en passant ma nuit à y penser. Le problème venait du fait que j'avais fusionné des cellules. Cela ne permettait pas au code VBA de fonctionner. Il me reste une dernier problème.

Si un texte est écrit dans une des Combobox, alors je ne peux pas écrire dans une autre sans que la première s'ouvre. Tout le reste fonctionne à partir du moment que rien n'est écrit dans une Combobox. La solution de facilité serait que on supprimer à chaque fois avant une recherche, mais j'aimerais savoir si un code pourrait corriger cela.

J'espère être clair dans la description de mon problème.



Bien à vous,



PS: Fichier joint.
 

Pièces jointes

  • (Test-05-02-2022)Bloc-op---Recherche-de-table.xlsm
    262.8 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour Philonce, le forum,

Votre fichier n'allait pas du tout, je l'ai complètement revu, voyez le fichier joint.

D'abord avec les noms définis comme ListeCardio :
Code:
=DECALER(BD_Tables!$B$2;;;NB.SI(BD_Tables!$A:$A;"*Cardio*");2)
La plage est définie dynamiquement sur les 2 colonnes B et C de la feuille "BD_Tables".

Ensuite ave le code de la feuille "Recherche", ici celui de ComboBox1 :
VB:
Private Sub ComboBox1_GotFocus()
ComboBox1 = "": ComboBox1_Change 'lance la macro
End Sub

Private Sub ComboBox1_Change()
Liste ComboBox1, [ListeCardio]
End Sub

Sub Liste(cb As ComboBox, R As Range)
Dim x$, tablo, i&, y$, a$(), n&
x = "*" & cb & "*" 'critère avec caractère générique
tablo = R 'matrice, plus rapide
For i = 1 To UBound(tablo)
    y = tablo(i, 1)
    If y Like x Then
        ReDim Preserve a(n)
        a(n) = y
        n = n + 1
    End If
Next
If n Then cb.List = a: cb.DropDown Else cb.Clear
End Sub
Enfin la formule en K9 :
Code:
=SIERREUR(RECHERCHEV(D9;ListeCardio;2;0);"Choisissez une intervention")
A+
 

Pièces jointes

  • Listes ComboBox(1).xlsm
    181.3 KB · Affichages: 7

Philonce

XLDnaute Nouveau
Bonjour,

si je regarde bien, tout mon formulaire est fonctionnel en fait ? Déjà d'avance, je vous remercie pour ce superbe travail qui me donne le résultat escompté.
J'ai cependant plusieurs questions car j'aimerais m'améliorer en Excel.

* Pourquoi avoir placé une recherchev plutôt qu'un index/Equiv ?
* Mon code de Cherche/Position/classement était donc inutile à ce que je vois ?
* Pour le code VBA, je ne le comprend absolument pas. Où pourrais-je l'apprendre ? Vous allez me répondre, sur ce forum :D Mais en particulier celui utilisé dans ce code ?

PS : Je n'ai plus rien à modifier dans mon fichier alors ? Vos modifications sont faire pour l'ensemble du fichier ?

Encore merci merci car j'ai énormément galéré pour faire ce que j'avais fait, mais sans vous je n'aurais pû le finaliser. Surtout que votre code est sûrement bien meilleur, plus rapide et plus efficace.
 

job75

XLDnaute Barbatruc
Avec le fichier (1) si l'on entre "ani" dans ComboBox1 on voit que ça ne va pas.

J'ai donc corrigé la fin de la macro Liste dans ce fichier (2) :
VB:
Sub Liste(cb As ComboBox, R As Range)
Dim x$, tablo, i&, y$, a$(), n&
x = "*" & cb & "*" 'critère avec caractère générique
tablo = R 'matrice, plus rapide
For i = 1 To UBound(tablo)
    y = tablo(i, 1)
    If y Like x Then
        ReDim Preserve a(n)
        a(n) = y
        n = n + 1
    End If
Next
If n = 0 Then ReDim a(0)
cb.List = a
cb.DropDown 'déroule la liste
End Sub
Le code n'a rien de bien compliqué, accrochez-vous pour comprendre cette macro en faisant des recherches sur le web pour les mots que vous ne comprenez pas.

Et si vous n'y arrivez pas posez vos questions ici.

Quant à RECHERCHEV c'est toujours plus simple que INDEX/EQUIV.

En effet vous n'avez plus rien à faire sur votre fichier.
 

Pièces jointes

  • Listes ComboBox(2).xlsm
    179.6 KB · Affichages: 2

job75

XLDnaute Barbatruc
Ah si encore une chose, avec les fichiers précédents la casse est respectée.

Si vous voulez qu'elle soit ignorée prenez ce fichier (3) :
VB:
Sub Liste(cb As ComboBox, R As Range)
Dim x$, tablo, i&, y$, a$(), n&
x = "*" & LCase(cb) & "*" 'critère en minuscules avec caractère générique
tablo = R 'matrice, plus rapide
For i = 1 To UBound(tablo)
    y = tablo(i, 1)
    If LCase(y) Like x Then
        ReDim Preserve a(n)
        a(n) = y
        n = n + 1
    End If
Next
If n = 0 Then ReDim a(0)
cb.List = a
cb.DropDown 'déroule la liste
End Sub
 

Pièces jointes

  • Listes ComboBox(3).xlsm
    180.5 KB · Affichages: 11

Philonce

XLDnaute Nouveau
Premièrement, merci pour ce très beau travail accomplis. Je suis reconnaissant car c'est ce que je cherchais. Ma base de données est dynamique donc je peux rajouter facilement des données ou en supprimer.
Mes listes sont déroulante et intuitive façon google.

Cela me semble parfait. Je ne comprend pas la différence entre le 2 et le 3. "La casse est respectée ou ignorée ??
 

patricktoulon

XLDnaute Barbatruc
bonsoir
si écrire dans ta combo2,3 ect ouvre la première c'est peut être par ce que tes name sont inclues aussi dans bd_table
inter sectionner des names ou des names avec des TS avec des formule index en plus ben tu n'est pas sorti de l’auberge
ben tu es chocolat mon ami
 

Discussions similaires

Réponses
28
Affichages
921
Réponses
2
Affichages
299