Cohabitation de 2 combobox

Fermé
Tybotaniste - 10 févr. 2022 à 21:22
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 - 11 févr. 2022 à 17:06
Bonjour,

Pour le contexte, Je travaille dans l'environnement et travaille sur un projet perso qui permet de rédiger ses relevés naturalistes et visualiser les particularités des espèces renseignées.

Je n'ai pas de problème pour construire la base de données et les relations entre espèces et particularité (RECHERCHEV).

En revanche, j'aimerai faciliter la saisie en proposant une saisie semi-automatique via une combobox.

je n'ai absolument aucune connaissance en VBA et n'y comprend d'ailleurs pas grand choses, pour ce faire j'ai donc farfouillé sur les forums et regarder des vidéos sur YT.

J'ai réussi à configurer une combobox qui reprend la liste des départements, je trouve ça tout à fait approprié et j'essaye d'en insérer une 2eme qui me propose les noms des espèces et c'est là que je pèche.

J'ai cru comprendre que le code que j'ai rentré est adapté pour 1 combobox mais pas pour 2.

voilà ce que j'ai fait:

Option Compare Text
Dim ws As Worksheet, list_Départements
Private Sub ComboBox1_Change()
If Me.ComboBox1 <> "" And IsError(Application.Match(Me.ComboBox1, list_Départements, 0)) Then
Me.ComboBox1.List = Filter(list_Départements, Me.ComboBox1.Text, True, vbTextCompare)
Me.ComboBox1.DropDown
End If
ActiveCell.Value = Me.ComboBox1.Value

Dim ws As Worksheet, list_sp
Private Sub ComboBox2_Change()
If Me.ComboBox2 <> "" And IsError(Application.Match(Me.ComboBox2, list_sp, 0)) Then
Me.ComboBox2.List = Filter(list_sp, Me.ComboBox2.Text, True, vbTextCompare)
Me.ComboBox2.DropDown
End If
ActiveCell.Value = Me.ComboBox2.Value

End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ActiveCell.Offset(1).Select

End Sub


Private Sub ComboBox2__KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ActiveCell.Offset(1).Select


End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("B1")) Is Nothing And Target.Count = 1 Then
Set ws = Sheets("LISTES")
list_Départements = Application.Transpose(ws.Range("A1:A" & ws.Range("A102").End(xlUp).Row).Value)
Me.ComboBox1.List = list_Départements
Me.ComboBox1.Top = Target.Top
Me.ComboBox1.Left = Target.Left
Me.ComboBox1.Width = Target.Width
Me.ComboBox1.Height = Target.Height
Me.ComboBox1.Value = Target.Value
Me.ComboBox1.Visible = True
Me.ComboBox1.Activate

Else
Me.ComboBox1.Visible = False
End If

If Not Intersect(Target, Range("A5:A1005")) Is Nothing And Target.Count = 1 Then
Set ws = Sheets("LISTES")
list_sp = Application.Transpose(ws.Range("D2:D" & ws.Range("D179637").End(xlUp).Row).Value)
Me.ComboBox2.List = list_sp
Me.ComboBox2.Top = Target.Top
Me.ComboBox2.Left = Target.Left
Me.ComboBox2.Width = Target.Width
Me.ComboBox2.Height = Target.Height
Me.ComboBox2.Value = Target.Value
Me.ComboBox2.Visible = True
Me.ComboBox2.Activate

Else
Me.ComboBox2.Visible = False
End If

End Sub


En gros :
- ComboBox1 = list_Départements = la liste des départements
- ComboBox2 = list_sp = la liste des espèces

c'est 2 listes se trouvent dans la feuille "LISTES"

Je suis désolé pour les cheveux que vous allez peut-être vous arracher en voyant ça ...

J'ai prit le temps de faire des recherches sur ce sujet, si je me permet de poster c'est que je n'ai pas trouvé/compris la solution.

Merci à vous pour votre pédagogie.

Merci à vous pour votre temps

Merci à vous pour votre aide.

Configuration: Windows / Firefox 96.0

12 réponses

f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
11 févr. 2022 à 07:04
Bonjour,

Le code que vous mettez a dispo est comme vous l'avez ecrit?
Curieux que ca tourne pour combobox1

Un fichier exemple serait le bienvenu pour vous aidez

Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com

Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
0
Bonjour,

Le code ci dessus est une tentative, le code initiale est :

Option Compare Text
Dim ws As Worksheet, list_Départements
Private Sub ComboBox1_Change()
If Me.ComboBox1 <> "" And IsError(Application.Match(Me.ComboBox1, list_Départements, 0)) Then
Me.ComboBox1.List = Filter(list_Départements, Me.ComboBox1.Text, True, vbTextCompare)
Me.ComboBox1.DropDown
End If
ActiveCell.Value = Me.ComboBox1.Value

End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ActiveCell.Offset(1).Select

End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B1")) Is Nothing And Target.Count = 1 Then
Set ws = Sheets("LISTES")
list_Départements = Application.Transpose(ws.Range("A1:A" & ws.Range("A102").End(xlUp).Row).Value)
Me.ComboBox1.List = list_Départements
Me.ComboBox1.Top = Target.Top
Me.ComboBox1.Left = Target.Left
Me.ComboBox1.Width = Target.Width
Me.ComboBox1.Height = Target.Height
Me.ComboBox1.Value = Target.Value
Me.ComboBox1.Visible = True
Me.ComboBox1.Activate

Else
Me.ComboBox1.Visible = False

End If

End Sub


et la ComboBox1 fonctionne très bien, j'ai essayé de copier/coller en changeant les références, mais avec le succès qu'on lui connais.

Voilà le fichier sans ce bidouillage de la ComboBox2 (pas de données sensibles, que de la données publiques) : https://www.cjoint.com/c/LBlgxQKsriw

Merci beaucoup :)
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
Modifié le 11 févr. 2022 à 07:41
Re,
Je recupere le fichier et regarde la chose

Pouvez expliquer ce que vous attendez car au depart, vous n'en dites rien

Suite:

Y a pas de combobox2!
J'ai le code de depart mais nada
0
En fait j'aimerai que dans les cases A5:A1005 une combobox s'ouvre et me propose les espèces présentes dans la feuille "LISTES" en colonne D. J'aimerai un saisie semi-automatique comme pour la case département en B2.

Effectivement vu que le code ne fonctionnait pas pour la combobox2, je tout supprimé en pensant que j'étais en train de faire n'importe quoi.

Merci pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
Modifié le 11 févr. 2022 à 08:38
Re,
Ok, sauf erreur de ma part, avec des validations de donnees (ruban, donnees ......) pas besoin de code VBA vu que vous utilisez des formlues, sauf si vous avez d'autres choses en tete.

Je fais le code

Au fait,
n'importe quoi, pas francais
C'est: que porte la personne de petite taille

Suite:

Probleme avec validation de donnees, recherche trop longue (177000 lignes) et pas possible de mettre une lettre de depart.
Combobox rapide et choix premiere lettre
0
Oui j'aurai du être plus explicite :

Pourquoi je n'ai pas fait une liste déroulante ?
- Parce que la RECHERCHEV nécessite qu'il n'y ai pas d'erreur de saisie. Je me suis dit que ça serait plus facile d'avoir une suggestion de la liste des espèces.
- Parce qu''il y a environ 177 000 espèces donc une liste déroulante serait un enfer à utiliser, surtout si je migre ce tableau excel sur téléhpone ou tablette de terrain par la suite. La ComboBox me permet également de faire une recherche via une partie du nom de l'espèce (ex: si j'indique juste "annua", me serons présentés toutes les espèces contenant "annua"), pratique en cas de trou de mémoire partiel (ce qui arrive assez souvent)

En revanche je n'ai pas compris la suite de votre message :

Au fait,
n'importe quoi, pas francais
C'est: que porte la personne de petite taille

Suite:

Probleme avec validation de donnees, recherche trop longue (177000 lignes) et pas possible de mettre une lettre de depart.
Combobox rapide et choix premiere lettre
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
11 févr. 2022 à 09:32
Re,

Au fait,
C'est de l'humour, cherchez un peu

Suite:
liste de validation:
_pas avoir de code VBA vu que vous n'avez que des formules pour remplir les autres cellules.
_inconveniens: trop longue a chargee a cause des 177000 lignes
pas possible de mettre la premiere lettre pour n'avoir que les noms commencent par cette lettre
en choix

Combobox:
_chargement rapide
_si vous mettez la premiere lettre de ce que vous cherchez, vous n'aurez que les noms commencent par cette
lettre en choix

Dans votre cas, je viens de voir que vos plantes ne sont pas classees par ordre alphabetique
Donc recherche premiere lettre pas possible

Pour infos personnelles, les plantes a choisir par cellule ne devraient pas seulement correspondre au departement?
0
Effectivement, je n'ai pas classée les espèces dans l'ordre alphabétique, mais elles peuvent l'être, l'ordre n'a pas d'importance dans la liste.

La liste correspond à tous les végétaux de France (Dom-Tom compris), il y a environ 3000 espèces par régions, ça poserai plus de problème qu'autre chose de faire une liste par région :
- Doublon entre région
- Impossible de découvrir une nouvelles plantes (ce qui peut-être le cas notamment pour les espèces exotiques envahissantes)
- Source de donnée non standardisée

En tout cas merci pour votre temps
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
11 févr. 2022 à 10:55
Re,

Fichier modifie: https://www.transfernow.net/en/dltransfer?utm_source=20220211bY01BjuY

J'ai protege les cellules avec formules, sans mot de passe, pour eviter les erreurs a l'insu de votre plein gre
0
Un grand merci pour le temps passé.

J'ai quelques questions tout de même :
- Je ne comprends pas le fonctionnement de la liste semi-automatique :
- si je tape "najas" c'est bon, il me propose tous les "najas" de la liste, si je tape "marina" c'est bon, il me propose toutes les espèces contenant "marina".
- En revanche si je tape "poa", il ne me propose rien, si je tape "annua" c'est bon, il me propose une sélection d'espèces contenant "annua", mais pas "Poa annua" (sans doute une sélection non-exhaustive pour plus de praticité)

- Comment ne pas afficher la ComboBox en A14
- J'avais également un bout de code qui me permettait d'adapter automatiquement la largeur des cellule en fonction des informations à l'intérieur, celui-ci ne fonctionne plus
- Je trouve très intéressant cette protection de cellule, comment avez-vous fait?

En tout cas un merci beaucoup à vous
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
11 févr. 2022 à 12:05
Re,

la liste semi-automatique :
Il semblerait qu'il y ait un soucis avec le "fonctionnement" combobox
Comment ne pas afficher la ComboBox en A14
Il y a un probleme des que la recherche n'a pas de correspondance.
Gerer la combobox par du VBA devrait resoudre la chose

celui-ci ne fonctionne plus
oups, je l'ai enleve quand j'ai fais des modif. Recuperez le code dans le fichier que vous m'avez envoye
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
Modifié le 11 févr. 2022 à 17:10
Re,

Y a une erreur de ma part dans le code remplissage combobx2. J'ai fait un copier/coller de combobox1 et vous n'avez pas la totalite de la colonne plante a cause du transpose qui est limite en taille.
D'ailleur, il faudrait faire de meme pour combobox1 car pas utile
Il faut remplacer la ligne list_sp par la ligne list_sp= ci-dessous

If Not Intersect(Target, Range("A5:A1005")) Is Nothing Then
        Set ws = Sheets("LISTES")
        list_sp = ws.Range("D2:D" & ws.Range("D" & ws.Rows.Count).End(xlUp).Row).Value

Je suis sur une solution pour paler au probleme combobox qui reste en rade sur cellule
0