XL 2016 Lancement Macro

jeromeN95

XLDnaute Impliqué
Bonsoir à tous,
je n'arrive pas à finir ma macro.

Principe :
Lancer un Userform pour faire une recherche de correspondance entre un code postal et une ville
Ci-joint fichier

Quand clique en C7 de la feuille "Choix"
Lance Userform
Résultat si clique sur VALIDER à mettre en C7 Ville et E7 code postal
Puis sélectionne C8 de la feuille "Choix"


J'aimerais également pouvoir faire une recherche dans l'autre sens :
Quand clique en E7, lance l'Userform
on renseigne le nom de la ville et le code postal et trouver.


Si une bonne âme pouvais m'aider….

D'avance merci.
Jérôme
 

Pièces jointes

  • code postale choix.xlsm
    932.3 KB · Affichages: 14

Dranreb

XLDnaute Barbatruc
Bonsoir.
Avec deux ComboBox et quelques pièces de ma fourniture "ComboBox liées et contrôles associés"
Attention: Quelque codes postaux correspondent à plusieurs villes. Il faut alors choisir laquelle.
 

Pièces jointes

  • Temp.xlsm
    952.2 KB · Affichages: 6

patricktoulon

XLDnaute Barbatruc
re
de plus perso je vais a l'économie
je te propose un seul combobox dans le quel tu peux taper soit des lettre soit des numero

mais attention tout de même
filter filtre la présence et non le debut !!!!!!!!!
donc les codes postals seront bon qu'a partir de 3 chiffres environ
j'avais donné a jacques me semble t il un code filtre ( filter include,filter exclude , commence par , xlpart)

mais pour l'heure voici ton model avec filter et une seul combo
 

Pièces jointes

  • choix ville ou code postal Vpat.xlsm
    922.1 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
re
et si tu veux vraiment tout les "COMMENCE PAR combo.value "
change l'evenement change listetwo par celle ci
VB:
Private Sub listetwo_Change()
    Dim tablo, I&, tablo2, a&
    tablo = Filter(liste, Me.listetwo.Text, True, vbTextCompare)
    ReDim tablo2(UBound(tablo))
    For I = LBound(tablo) To UBound(tablo)
        If IsNumeric(listetwo.Value) Then
            If Left(Split(tablo(I), ": ")(1), Len(listetwo.Value)) = listetwo.Value Then
                tablo2(a) = tablo(I): a = a + 1
            End If
        Else
            If Left(Split(tablo(I), " :")(0), Len(listetwo.Value)) = listetwo.Value Then
                tablo2(a) = tablo(I): a = a + 1
            End If
        End If
    Next
    listetwo.List = tablo2
    Me.listetwo.DropDown
End Sub

Alors OUI !! je filtre avec filter et refiltre avec test left
pourquoi?
et bien par ce qu'avec ta liste relativement longue, si je teste le left directement dans la liste complete j'ai donc un temps de latence (avant re dessin sur combobox) beaucoup plus long
voila ;)


je ne te dis pas comment mettre que les villes ou les codes postals je pense que tu va comprendre tout seul ;) ;)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pour la procédure ajoutée, d'accord, elle est un peu pointue. Mais les autres procédures de l'UserForm, ça va, non ?
Mais j'ai en préparation un autre système qui, à part les instructions déclaratives dans la UserForm_Initialize ne requièrera plus aucune programmation du tout dans l'UserForm, puisqu'il prendra même en charge les CommandButton.
 

patricktoulon

XLDnaute Barbatruc
re
oui pour moi ca va et tout lecteur un minimum expérimentés
j'en ai une autre dans la tete aussi qui reprends l'idée de base que j'ai donné mais avec les deux combo séparée
je pense pas que ce soit la difficulté du procédé (il y a diverses façons d'y arriver) mais la rapidité du repaint userform qui pause problème avec cette longue liste on le vois bien avec son premier exemple
après perso je sais pas si la recherche intuitive est de mise on a juste besoins des correspondance ville/ code
mais j'aime bien ton code ca va m'amuser pendant un moment a le décortiquer
 

Dranreb

XLDnaute Barbatruc
Pour les lignes de code dans l'UserForm, voir la page d'aide de cette ressource.
La programmation de service n'est pas à étudier.
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 944
Membres
101 849
dernier inscrit
florentMIG