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 :

Créer un bouton recherche et zone de texte pour une base de données excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut Créer un bouton recherche et zone de texte pour une base de données excel
    Bonjour à tous les membres du forum!

    J'ai un soucis, j'ai créer pour mon Tuteur une BDD sur excel contenant plus de 300 dossiers PDF. J'ai commencé à bidouiller des macros mais c'est la première fois que j'y touche, donc la je suis coincé. Je vous explique j'aimerais qu'à partir de la zone texte, ils puissent taper n'importe quel mots et seul les lignes contenant ce ou ces mots apparaissent. J'ai déjà un début de code et je peux vous fournir mon dossier.

    Merci et bonne après midi.

  2. #2
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Bonjour,
    voilà!

    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
        Rows("1:" & Rows.Count).EntireRow.Hidden = True
        On Error Resume Next
         'votre mot de recherche apparaît dans ligne suivante
     
        Cells.Find(What:="Votre mot", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
     
        If Err.Number Then
            On Error GoTo 0
            Exit Sub
        End If
     
        Selection.EntireRow.Hidden = False
     
        For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
            Cells.FindNext(After:=ActiveCell).Activate
            Selection.EntireRow.Hidden = False
        Next
    si vous voulez référer le mot que vous chercher à un textbox1 alors il faut remplacer cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Cells.Find(What:="Votre mot", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
    par cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Cells.Find(What:=textbox1.text, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Merci d'avoir répondu et de m'aider j'ai essayé le code et cela m'affiche erreur d'exécution 1004. Je dois l'avoir mal placé ou intégré?

  4. #4
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Avec quel version d'Excel travaillez-vous?

    Il faudrait aussi faire un print screen du code un fois clicker sur debug.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Je travail sous la dernière version d'excel j'essaie ça en rentrant ce soir.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je te propose une solution avec une ListBox pour la récupération des résultats. La ListBox est mise à jour au fur et à mesure de la saisie dans le TexBbox (évènement "Change"). La récupération du chemin du fichier se fait sur l'évènement "Click" de la ListBox. Dans mon code, les chemins des fichiers sans en colonne A de la feuille "Feuil1", à adapter. La plage est définie au lancement de la Form donc, la variable "Plage" est déclarée en tête de module :
    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
     
    Dim Plage As Range
     
    Private Sub UserForm_Initialize()
     
        'les adresses de fichiers sont en colonne A de la feuille "Feuil1", à adapter...
        With Worksheets("Feuil1")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
    End Sub
     
    Private Sub TextBox1_Change()
     
        Dim Tbl() As String
        Dim Cel As Range
        Dim Adr As String
        Dim I As Long
     
        Set Cel = Plage.Find(TextBox1.Text, , xlValues, xlPart)
     
        If Not Cel Is Nothing Then
     
            'mémorise l'adresse de la 1ère cellule
            Adr = Cel.Address
     
            'boucle pour récupérer toutes les occurences
            Do
     
                I = I + 1
     
                ReDim Preserve Tbl(1 To I)
                Tbl(I) = Cel.Value
     
                Set Cel = Plage.FindNext(Cel)
     
            Loop While Adr <> Cel.Address
     
        End If
     
        ListBox1.Clear
     
        'gère l'erreur du tableau non initialisé
        On Error Resume Next
        ListBox1.List = Tbl()
     
    End Sub
     
    Private Sub ListBox1_Click()
     
        Dim Fichier As String
     
        With ListBox1
     
            Fichier = .List(.ListIndex)
     
        End With
     
        MsgBox Fichier
     
    End Sub
    Hervé.

  7. #7
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Bonjour Theze
    dans ce cas précis il est vraie qu'une boucle do loop while et beaucoup mieux qu'une boucle for. +1


    mais pour répondre à sa demande
    Citation Envoyé par Jeremy2109 Voir le message
    ... et seul les lignes contenant ce ou ces mots apparaissent...
    je crois qu'il faut cacher tout les ligne au début du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.EntireRow.Hidden = True
    puis à chaque mot trouvé on affiche la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.EntireRow.Hidden = False

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Je n'arrive pas à mettre en application ce que vous m'avez données et comme je ne m'y connais pas du tout je ne vois pas d'où viens mon erreur serait il possible que vous me le fassiez directement sur mon fichier?
    Fichiers attachés Fichiers attachés

  9. #9
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Je ne sais pas si c'est cala que tu veux, tu peux essayé,
    dans ton userform2 taper un mot (qui se trouve dans la bbd) puis tout les ligne qui contiendera ce mot
    seront affiché, les autre seront masqué.

    voir fichier joint
    Fichiers attachés Fichiers attachés

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    C'est ca cela marche très bien. Sauf que j'aimerais si possible que ca s'affiche sur la page recherche et que les titres en haut TYPE, FORMAT, OUVRAGE... reste afficher?

  11. #11
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Il faut changer cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows("1:" & Rows.Count).EntireRow.Hidden = True
    pour cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows("6:" & Rows.Count).EntireRow.Hidden = True

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

Discussions similaires

  1. [ODBC] Comment stocker des grandes zones de textes dans une base Oracle / ODBC
    Par aurelienC dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/06/2012, 10h52
  2. Réponses: 3
    Dernier message: 21/06/2007, 01h10
  3. [Recherche] script gestion de mails dans une base de données
    Par emilie13 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 20/06/2007, 15h59
  4. JTextField, envoie du text a une base de données.
    Par niklette dans le forum Composants
    Réponses: 2
    Dernier message: 05/06/2006, 20h23
  5. Créer un index pour une Base de données
    Par john7 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/01/2005, 21h43

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