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 :

VBA Excel Recherche dans une liste


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2016
    Messages : 4
    Par défaut VBA Excel Recherche dans une liste
    Bonjour,
    Je désire effectuer une recherche dans une colonne comportant une partie du mot, les données seront retranscrits dans une autre feuille
    j'ai donc ceci qui fonctionne

    mais je désirerai l'insérere dans un userform avec zone de texte, il me faut donc remplacer "*NANTAIS*" par ma zone de texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveCell.Text Like "*NANTAIS*" Then
    mais je ne trouve pas la solution
    Merci pour votre aide
    Cordialement

    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
    EffaceFeui6
    Sheets("Cuisine").Select
    Range("B1").Select
    Do While ActiveCell.Value <> ""
     
    If ActiveCell.Text Like "*NANTAIS*" Then  'recherche une partie du mot NANTAIS dans la cellule
      REFRE = ActiveCell.Value
      REFRECH = ActiveCell.Offset(0, 1).Value
     
    Sheets("Feuil6").Select   'ouvrir la feuille pour retranscrire les données
    Range("A1").Select
     
    Do While ActiveCell.Value <> ""
        ActiveCell.Offset(1, 0).Select
        Loop
        ActiveCell.Value = REFRE
        ActiveCell.Offset(0, 1).Value = REFRECH
     
    End If
    Sheets("Cuisine").Select
        ActiveCell.Offset(1, 0).Select
        Loop
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 417
    Par défaut
    Bonjour,

    Une façon de faire est que l'UserForm appelle la routine que vous avez faite (à améliorer):
    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
    '--- dans le module
    Option Explicit
     
    Public Sub CherchTxt(sTxt As String)
        Dim REFRE As Variant, REFRECH As Variant
        Sheets("Cuisine").Select
        Range("B1").Select
        If sTxt = "" Then Exit Sub
        sTxt = "*" & sTxt & "*"
        Do While ActiveCell.Value <> ""
            If ActiveCell.Text Like sTxt Then 'recherche partie du mot dans la cellule
                REFRE = ActiveCell.Value
                REFRECH = ActiveCell.Offset(0, 1).Value
                Sheets("Feuil6").Select 'ouvrir la feuille pour retranscrire les données
                Range("A1").Select
                Do While ActiveCell.Value <> ""
                    ActiveCell.Offset(1, 0).Select
                Loop
                ActiveCell.Value = REFRE
                ActiveCell.Offset(0, 1).Value = REFRECH
            End If
            Sheets("Cuisine").Select
            ActiveCell.Offset(1, 0).Select
        Loop
    End Sub
     
    Public Sub ShowUF()
        UserForm1.Show
    End Sub
     
    '--- dans l'UserForm
    Private Sub CommandButton1_Click()
        CherchTxt Me.TextBox1.Value
    End Sub
    Cordialement.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2016
    Messages : 4
    Par défaut
    Bonsoir

    Grand merci pour la réponse et la rapidité

    c'est super cela fonctionne parfaitement

    Encore grand merci

    Félicitation bonne soirée

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Ouh la!

    Si tant est que le code est efficient, il n'en reste pas moins qu'il n'est pas très "propre"

    Pas de déclaration de variable, des Select et ActiveCell à tout va.
    Pire. Do While ... utilisé pour ce genre de méthode...

    Juste en appliquant l'aide en ligne pour la méthode Find et un tant soit peu une variable Tableau.

    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
    Option Explicit
     
    Public Sub Discussion_REFRE()
     
    Dim dernl As Long
    Dim c As Range
    Dim firstaddress As String
    Dim tablo() As Variant
    Dim n As Long
     
    With Worksheets("Cuisine")
        dernl = .Cells(.Rows.Count, 2).End(xlUp).Row
        With .Range("B1:B" & dernl)
            Set c = .Find("NANTAIS", LookIn:=xlValues, lookat:=xlPart)
            If Not c Is Nothing Then
                firstaddress = c.Address
                Do
                    n = n + 1
                    ReDim Preserve tablo(1 To n)
                    tablo(n) = c.Value
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstaddress
            End If
        End With
    End With
     
    If Not c Is Nothing Then Set c = Nothing
     
    Worksheets("Feuil6").Range("A1").Resize(UBound(tablo)).Value = Application.WorksheetFunction.Transpose(tablo)
     
    End Sub

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Mieux.

    S'il s'agit d'un tableau structuré, alors modifier le champ de recherche par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With Worksheets("Cuisine")
        With .Range("Tableau1[Nom]")
    Attention!
    Tu es nouveau (nous l'avons tous été), et développer ainsi est pour le moins légitime.
    Sil n'y en avait qu'un, mon message est qu'il est utile, voire fondamental, surtout à ses débuts, de prendre de bonnes habitudes, notamment par la rigueur.
    La technique s'acquière progressivement ensuite
    (Consulte mon billet à ce sujet).

    Je te souhaite une bonne continuation et te dis à bientôt.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une autre solution avec une fonction (GetArray) qui renvoie une table à une dimension et ne contenant que les chaînes contenant le mot cherché (pas de sensibilité à la casse)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function GetArray(RangeColumn As Range, Optional ContainedString As String)
      ' Arguments
      '  RangeColumn       Plage de cellule d'une colonne
      '  [ContainedString] Chaîne à filtrer, si vide la fonction renvoie la liste non filtrée 
      Dim tbl() As Variant
      tbl = Application.Transpose(RangeColumn.Value)
      GetArray = Filter(tbl, ContainedString, True, vbTextCompare)
    End Function
    Exemple d'utilisation du renvoi d'une liste filtrée.
    • Le tableau structuré se nomme T_Citation
    • La colonne a renvoyer comme liste à une dimension se nomme "Texte"
    • La liste à renvoyer doit contenir le mot Cheval (pas de sensibilité à la casse)

    Lignes 9 à 12, alimentation de la liste du contrôle nommé ListBox1 et affichage du UserForm (UserForm1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub TestGetArray()
      Dim oList As ListObject
      Dim rng As Range
      Dim Table() As String
      Set oList = Range("T_Citation").ListObject
      Set rng = oList.ListColumns("Texte").DataBodyRange
      Table = GetArray(rng, "Cheval") ' Retour de la liste filtrée
      ' Envoie la table dans le ListBox 
      With UserForm1
      .ListBox1.List = Table
      .Show
      End With
      Set oList = Nothing: Set rng = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Problème pour rechercher dans une liste excel avec vba
    Par hop51 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/03/2013, 19h00
  2. Réponses: 1
    Dernier message: 06/05/2007, 17h42
  3. [VBA-Excel] Effectuer une recherche dans une liste view
    Par Miles Raymond dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/11/2006, 17h21
  4. [VBA excel] Récupérer dans une liste box le resultat d'un AutoFilter
    Par thibaut2 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/10/2006, 17h06
  5. Réponses: 2
    Dernier message: 07/07/2006, 10h00

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