IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Moteur de recherche à l'aide de vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    travailleur
    Inscrit en
    Juillet 2018
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : travailleur

    Informations forums :
    Inscription : Juillet 2018
    Messages : 76
    Par défaut Moteur de recherche à l'aide de vba
    Bonjour à tous,

    Je regarde pour faire un userform qui me permettra de chercher plus facilement des références dans un fichier contenant des milliers d'entrées.

    J'ai commencé à me faire un fichier test pour tester ça avec mon faible niveau et je viens ici pour reposer des questions.

    Le but est de venir faire une recherche dans les colonnes C et I. Les résultats viennent s'afficher au fur et à mesure dans la listbox 1 et les titres des colonnes dans la listbox 2.

    Je voudrais utiliser les combobox pour affiner la recherche. J'ai 2 premières questions concernant celles-ci. Je viens récupérer pour la première les différences entrées dans la colonnes A pour pouvoir faire un choix mais est-il possible de retirer "Magasin B"? Peut-on avoir de base un case vide?

    Je continue à bosser sur le reste.

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonsoir,

    Ceci n'est pas une BD. Il faut créer une colonne Magasin


    Boisgontier

  3. #3
    Membre confirmé
    Homme Profil pro
    travailleur
    Inscrit en
    Juillet 2018
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : travailleur

    Informations forums :
    Inscription : Juillet 2018
    Messages : 76
    Par défaut
    Citation Envoyé par boisgontierjacques Voir le message
    Bonsoir,

    Ceci n'est pas une BD. Il faut créer une colonne Magasin


    Boisgontier
    Le fichier original ne peut pas être modifié dans sa structure.

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,


    Fait avec un pgm générique.
    Il suufit de copier/coller la BD en A1
    La recherche se fait dans toutes les colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    Option Compare Text
    Dim TblBD(), Choix(), NomTableau, NbCol, ChoixCombo()
    Private Sub UserForm_Initialize()
      NomTableau = "tableau1"
      NbCol = Range(NomTableau).Columns.Count      ' adapter
      TblBD = Range(NomTableau).Resize(, NbCol + 1).Value
      For i = 1 To UBound(TblBD): TblBD(i, NbCol + 1) = i: Next i
      ReDim Choix(1 To UBound(TblBD))
      For i = LBound(TblBD) To UBound(TblBD)
         NbCol = Range(NomTableau).Columns.Count
         For k = 1 To NbCol: Choix(i) = Choix(i) & TblBD(i, k) & "|": Next k
         Choix(i) = Choix(i) & i  ' no ligne BD
      Next i
      Me.ListBox1.List = TblBD
      EnteteListBox
      ChoixCombo = ListeMotsTab(Range(NomTableau))
      Me.ComboBox1.List = ListeMotsTab(Range(NomTableau))
      Me.ComboTri.List = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))  ' Ordre tri
    End Sub
     
    Private Sub TextBox1_Change()
      If Me.TextBox1 <> "" Then
         mots = Split(Me.TextBox1, " ")
         tbl = Choix
         For i = LBound(mots) To UBound(mots)
           tbl = Filter(tbl, mots(i), True, vbTextCompare)
         Next i
         n = UBound(tbl) + 1
         If n > 0 Then
           ReDim Tbl2(LBound(tbl) To n + 1, 1 To NbCol + 1)
           For j = LBound(tbl) To UBound(tbl)
             a = Split(tbl(j), "|")
             For k = 0 To NbCol - 1: Tbl2(j, k + 1) = a(k): Next k
             Tbl2(j, k + 1) = a(k)
           Next j
           Me.ListBox1.List = Tbl2
          Else
           Me.ListBox1.Clear
          End If
        Else
          Me.ListBox1.List = TblBD
        End If
    End Sub
     
     
    Sub EnteteListBox()
      NbCol = Range(NomTableau).Columns.Count
      x = Me.ListBox1.Left + 8
      Y = Me.ListBox1.Top - 12
      For i = 1 To NbCol
        Set lab = Me.Controls.Add("Forms.Label.1")
        lab.Caption = Range(NomTableau).Offset(-1).Cells(1, i)
        lab.Top = Y
        lab.Left = x
        x = x + Int(Range(NomTableau).Columns(i).Width * 0.9)
        temp = temp & Int(Range(NomTableau).Columns(i).Width * 0.9) & ";"
      Next
     
      Me.ListBox1.ColumnCount = NbCol + 1
      temp = Left(temp, Len(temp) - 1)
      Me.ListBox1.ColumnWidths = temp
    End Sub
     
    Private Sub ComboTri_click()
      Dim tbl()
      colTri = Me.ComboTri.ListIndex
      tbl = Me.ListBox1.List
      TriMultiCol tbl, LBound(tbl), UBound(tbl), colTri
      Me.ListBox1.List = tbl
    End Sub
     
    Private Sub b_raz_Click()
      Me.TextBox1 = ""
    End Sub
     
    Private Sub ComboBox1_Click()
      Me.TextBox1 = Me.TextBox1 & " " & ComboBox1
    End Sub
     
    Private Sub B_result_Click()
      Set f2 = Sheets("résultat")
      f2.Cells.ClearContents
      a = Me.ListBox1.List
      f2.[A2].Resize(UBound(a) + 1, UBound(a, 2) + 1) = a
      c = 0
      For c = 1 To NbCol
         f2.Cells(1, c) = Range(NomTableau).Offset(-1).Item(1, c)
      Next
      f2.Cells.EntireColumn.AutoFit
    End Sub
     
    Private Sub ComboBox1_Change()
     If Me.ComboBox1.ListIndex = -1 Then
       Me.ComboBox1.List = Filter(ChoixCombo, Me.ComboBox1.Text, True, vbTextCompare)
       Me.ComboBox1.DropDown
      Else
     
      End If
    End Sub
    Private Sub ListBox1_Click()
      enreg = Me.ListBox1.Column(NbCol) + Range(NomTableau).Row - 1
      Rows(enreg).Select
    End Sub

    Boisgontier
    Fichiers attachés Fichiers attachés

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Version sans tableau


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Set f = Sheets("bd")        ' à adapter
      NomTableau = "Tableau1"
      Set Rng = f.Range("A2:H" & f.[A65000].End(xlUp).Row)          ' à adapter
    Boisgontier
    Fichiers attachés Fichiers attachés

  6. #6
    Membre confirmé
    Homme Profil pro
    travailleur
    Inscrit en
    Juillet 2018
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : travailleur

    Informations forums :
    Inscription : Juillet 2018
    Messages : 76
    Par défaut
    Bonsoir,

    Cela fonctionne impeccablement et j'ai pu l'adapter sur mon fichier final.
    Il me reste 2 questions. Est-il possible de s'affranchir des accents en plus des majuscules ?
    J'ai trouvé ton code sur ça mais je n'arrive pas à l'intégrer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function sansAccent(chaine)
       codeA = "ÉÈÊËÔéèêëàçùôûïî"
       codeB = "EEEEOeeeeacuouii"
       temp = chaine
       For i = 1 To Len(temp)
        p = InStr(codeA, Mid(temp, i, 1))
        If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
       Next
       sansAccent = temp
    End Function
    Est-il également possible de ne pas afficher certaines colonnes dans le formulaire de recherche car celles-ci n'apportent rien dans la recherche?

    Merci pour tout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour réaliser un moteur de recherche en Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/01/2009, 12h12
  2. Probleme vba pour moteur de recherche ACCESS
    Par sylvaindenisbe dans le forum Modélisation
    Réponses: 1
    Dernier message: 10/05/2007, 14h30
  3. [Vba,RecordSet,SQL]Moteur de recherche plus rapide?!
    Par omegabahamut dans le forum Access
    Réponses: 2
    Dernier message: 25/02/2007, 21h18
  4. Besoin d'aide sur un pseudo moteur de recherche
    Par Jim_Nastiq dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/04/2006, 17h43
  5. [SQL] Aide pour un moteur de recherche
    Par Death83 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 26/10/2005, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo