Faire une recherche dans excel

Résolu
goran_84 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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. goran_84 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
     
    A savoir que j'utilise Excel 2007
    0
    1. G_33
       
      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. goran_84 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
       
      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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      excusez moi de vous avoir dérangé avec ma proposition
      0
    4. G_33
       
      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. G_33
       
      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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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. goran_84
       
      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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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