Faire une recherche dans excel

Résolu
Bonjour à tous,

Je possède des données qui s'étendent de A1: D36 000 (4 colonnes et 36 000 lignes) avec dans la colonne
A - nom de commune
B - code postal de la commune
C- code postal du département
D- Le code de la zone Robien

J'ai besoin de faire une recherche par nom de commune pour savoir ensuite quel est le code postal de la commune, le code postal du département et le code de la zone Robien (colonne B,C,D).
Pour cela j'utilise la fonction excel recherchev et ça marche bien. Or ce que je souhaite faire maintenant c'est de pouvoir faire une recherche qui m'affiche tous les noms de communes qui commencent par les lettres qui ont été saisis.

Pouvez vous m'aider svp!
Merci

3 réponses

  1. A savoir que j'utilise Excel 2007
    0
    1. Bonsoir

      Quand tu dis

      "Or ce que je souhaite faire maintenant c'est de pouvoir faire une recherche qui m'affiche tous les noms de communes qui commencent par les lettres qui ont été saisis. "

      tu voudrais afficher toutes les communes qui commencent pa la lettre "L" par exemple et les afficher où ?? dans une boite de dialogue??

      Au plaisir
      0
    2. Bonsoir G_33

      Merci pour l'interet que tu portes a mon "probleme".
      Peux importe ou est ce que je vais afficher les commune commencant par P. Il faut juste quelles apparaissent ;)
      qu'est ce que tu penses qu'il serait le mieux.
      Merci d'avance et bonne soirée
      0
    3. Contributeur
      excusez moi de vous avoir dérangé avec ma proposition
      0
    4. Bonjour

      Alors je peux te proposer ce code que j'ai fait pour une appli identique à la tienne
      Dans une feuille tu crées un bouton et tu affectes ce code
      Private Sub CommandButton1_Click()
      Load UserForm1
      UserForm2.Show
      End Sub


      tu vois qu'a ce stade il faut creer un Userform avec une Zone de texte que tu nommeras
      "ZtxtCP"
      une Listbox que tu nommeras
      "ListboxVilles"

      et tu associes le code qui suit à la zonede texte "ZtxtCP"
      Private Sub ZtxtCP_Change()
      'cf : http://www.commentcamarche.net/forum/affich-14847865-recherche-semi-auto-dans-excel
      Dim Tablo
      Dim Tablo_1
      Dim lettre As String, test As String
      Dim cptr As Integer, cptr_tablo As Integer, derLig As Integer
      
      lettre = UCase(ZtxtCP.Value)
      If lettre = "" Then Exit Sub
      ReDim Tablo(0)
      ReDim Tablo_1(0)
      ListboxVilles.Clear
      derLig = Sheets("Nom_DE_TA_FEUILLE").Range("A" & Rows.Count).End(xlUp).Row
      With Sheets("Nom_DE_TA_FEUILLE")
          For cptr = 1 To derLig
              test = .Cells(cptr, 1)
               If .Cells(cptr, 1) Like lettre & "*" Then' cherche la lettre
                  Tablo(cptr_tablo) = .Cells(cptr, 1) ' capte le contenu de la cellule A
                  Tablo_1(cptr_tablo) = .Cells(cptr, 2) 'capte le contenu de la cellule B
                  cptr_tablo = cptr_tablo + 1
                  ReDim Preserve Tablo(cptr_tablo)
                  ReDim Preserve Tablo_1(cptr_tablo)
              End If
      Next
      End With
      For cptr_tablo = LBound(Tablo) To UBound(Tablo)
          aaa = Tablo(cptr_tablo) & " - " & Tablo_1(cptr_tablo) ' concatene les données
          ListboxVilles.AddItem aaa ' les données sont affichées dans le Listbox
      Next
      End Sub
      


      Bonne continuation
      0
    5. C'est un code trouvé sur comment ça marche fait par michel_m que j'ai adapté pour la conactenation du résultat
      0
  2. Contributeur
    Bonjour,

    Une piste avec seulement le nom de communes ( la recherche cible de plus en plus suivant le nombre de lettres inscrites)
    https://www.cjoint.com/?3KothUizTEx

    pour les autres renseignements, ce n'est pas bien compliqué (mais pas avec recherchev!!)

    donc, donne un extrait de ta base (500 ou 1000 lignes)
    pour joindre une pièce
    mettre le classeur sans données confidentielles en pièce jointe sur
    https://www.cjoint.com/ 
    puis copier l'adresse du lien et la coller dans le message de réponse 


    0
    1. Contributeur
      Bonjour Goran

      Ci joint proposition avec le classeur que tu m'as communiqué sur yahoo mail
      boulot intéressant compte tenu des 36000 communes !
      https://www.cjoint.com/?3KqiLAxDVAh

      nota: dans la feiulles "communes, j'ai nommé deux plage: localité (colonne A)et base_fr (colonnes B-D)

      Michel
      0
      1. Contributeur
        le classeur étant protégé par mdp
        voici les codes
        dans le module feuille "recherche (où il y a le textbox"
        Private Sub TextBox1_Change()
             Lettre = UCase(TextBox1.Value)
             Selectionner_communes
        End Sub

        zt dans un modules standard
        Public Lettre As String
        
        Sub Selectionner_communes()
            Dim Tcomm(), T_base(), T_out()
            Dim Critere As String
            Dim Nbre As Long, Lig As Long, Cpt As Long
            
        '------initialisations
             Range("C5:F37000").Clear
             If Lettre = "" Then GoTo Fin
             Critere = Lettre & "*"
             
            With Sheets("communes")
                  'mémorise en RAM les données des communes
                  T_comm = Application.Transpose(Range("localite").Value) 'liste des localités
                  T_base = Range("base_fr").Value 'liste des codes, départements, zone robien
                  'nombre de communes répondant au critere
                  Nbre = Application.CountIf(Range("localite"), Critere)
             End With
        '-----recherche
             If Nbre = 0 Then GoTo Vide: 'pas de communes répondant au critère
             'mémorise tableau des communes répondant au critère
             ReDim T_out(1 To Nbre, 1 To 4)
             Cpt = 1
             For Lig = 1 To UBound(T_comm)
                  If T_comm(Lig) Like Critere Then
                       T_out(Cpt, 1) = T_comm(Lig) 'commune
                       T_out(Cpt, 2) = T_base(Cpt, 1) 'code commune
                       T_out(Cpt, 3) = T_base(Cpt, 2) 'code departement
                       T_out(Cpt, 4) = T_base(Cpt, 3) 'zone Robien
                       Cpt = Cpt + 1
                       If Cpt > Nbre Then Exit For 'sortie si le nbre est atteint
                  End If
             Next
             
        '------restitution
           Application.ScreenUpdating = False
           With Sheets("Recherche").Range("C5").Resize(Nbre, 4)
             .Value = T_out
             .Borders.Weight = xlThin
             End With
         Exit Sub
         
         '-----gestion erreurs
        Vide:
             MsgBox "aucune commune commendant par " & Lettre & " dans la liste ", vbExclamation
        Exit Sub
        
        Fin:
        End Sub
        
        0
      2. Merci michel pour ton aide! ca marche tres bien!
        voici le fichier en question.
        le mdp est robien

        http://www.cjoint.com/confirm.php?cjoint=0Kqs7xkSn7m
        0
      3. Contributeur
        bonjour
        classeur modifié suite à mes étourderies habituelles et rectifié ton tableau des codes insee et départements ( les 9 premiers départements); ajouté un bouton de remise à zéro
        Avec mes excuses
        https://www.cjoint.com/?3KsjhptPSyr
        0