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 :

afficher résultat dans textbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut afficher résultat dans textbox
    bonjour le forum !

    Je fais une recherche et les résultats sont affiché dans une autre feuille.

    J'aimerais savoir comment il serait possible d'afficher le résultat dans un textbox du userform ? (Car le recherche se lance à partir d'un textbox)

    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
    Private Sub CommandButton1_Click()
    Dim FoundCount As Double
    Dim rFoundB As Range, rFoundC As Range
    Dim rFoundD As Range, MyTextB As String
    Dim MyTextC As String, MyTextD As String
    Dim B As Range, C As Range, D As Range
    Dim rB As Range, rC As Range, rD As Range
    MyTextB = Me.txtfindB.Value
    txtresult.MultiLine = True
    Sheets("Sheet2").Range("A2:f65536").ClearContents
     
     
    If Trim(MyTextB) <> "*" Then
    With Worksheets("BT")
     Set rB = .Range("b1:b65536")
    End With
    Set rFoundB = rB.Resize(1, 1)
    Set B = rB.Find(MyTextB, After:=rFoundB, _
      LookIn:=xlValues, _
      Lookat:=xlPart)
    If Not B Is Nothing Then
     firstAddress = B.Address
    Do
    bcopy = False
    If (InStr(1, B.Offset(0, 1), Trim(MyTextC), vbTextCompare) > 0 _
        Or Trim(MyTextC) = "*" _
        Or Len(Trim(MyTextC)) = 0) And _
        (InStr(1, B.Offset(0, 2), Trim(MyTextD), vbTextCompare) > 0 _
        Or Trim(MyTextD) = "*" Or Len(Trim(MyTextD)) = 0) Then
       lr = Sheets("Sheet2").Cells(Rows.Count, "a").End(xlUp).Row + 1
        B.EntireRow.Copy Sheets("Sheet2").Rows(lr)
        FoundCount = FoundCount + 1
    End If
     
    Set B = rB.FindNext(B)
    Loop While Not B Is Nothing And B.Address <> firstAddress
    End If   ' not B is Nothing
    End If
    MsgBox FoundCount & " valeurs trouvés", vbInformation, "Transfert complété"
    'Sheets("Sheet2").Select
    End Sub

    merci encore une fois tout le monde !

  2. #2
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonsoir le forum,

    Moi, j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TonForm.TaTextBox.Value=TonResultat
    Bien-sûr, il faut adapter.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    vois-tu ce code je ne l'ai pas écrit, et je ne sais pas comment afficher sur plusieurs lignes dans la textbox.

    Si il y a 4 mots trouvés, le code copie la ligne et la colle dans la sheet2.
    il peut y avoir 2 résultat, comme il peut en avoir 8.

    je suis capable afficher 1seul résultat en ajoutant :
    mais je n'ai qu'une seule ligne et je devrais en avoir 4...

    je sais pas si je devrais utiliser la commande offset ?

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    A mon avis, tu ferais bien de remplacer ton TextBox par une zone liste (ListBox) sur ton UserBox et d'utiliser la méthode AddItem du listbox pour ajouter une ligne a chaque fois que tu trouves un résultat à ta recherche, puis au début d'une nouvelle recherche, la methode Clear pour vider ton ListBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ListBox.Clear 'vide la zone de liste
    ListBox1.AddItem = [Cellule ou ce trouve ton résultat].value
    Je n'ai pas trop le temps ce matin, si personne ne s'y est penché ou que tu n'as pas trouvé par toi même une solution, je regarderais ce soir.
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    En esperant avoir compris ce que tu cherche a faire, je n'ai pas testé faute de fichier adapté.

    J'ai commenté ce code pour que tu puisse le comprendre un peu mieux, voici quelques remarques sur le code en lui meme

    Les sont inutiles, par defaut vb regarde sur la form en cours

    Inutile d'utiliser un with pour une seule ligne de code

    Preferer
    pour selectionner une colonne complete

    Lors de l'utilisation de Find, inutile de lui definir After si c'est pour lui mettre la cellule du haut a gauche
    Citation Envoyé par Aide VBExcel - Find
    [...]Si vous ne spécifiez pas cet argument, la recherche commence après la cellule située dans le coin supérieur gauche de la plage.[...]
    Plutot que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Len(Trim(MyTextC)) = 0)
    Plus simplement
    J'ai mis 2 possibilités avec l'utilisation soit d'un textbox soit d'un combobox, si tu ne t'y retrouves pas, n'hésite pas je nettoierais en fonction de ton choix.

    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
    Private Sub CommandButton1_Click()
    Dim FoundCount As Double
    Dim rFoundB As Range, rFoundC As Range
    Dim rFoundD As Range, MyTextB As String
    Dim MyTextC As String, MyTextD As String
    Dim B As Range, C As Range, D As Range
    Dim rB As Range, rC As Range, rD As Range
     
    MyTextB = Me.txtfindB.Value 'j'utiliserais Trim ici une bonne fois pour toute MyTextB = Trim(Me.txtfindB.text)
    txtresult.MultiLine = True
    'On vide le contenu du txt
    txtresult.Text = ""
    'Si tu utilise un combobox
    ComboBox1.Clear
     
    'On vide le contenu des cellules de A2 jusqu'à la fin du tableau en colonne F
    'Sheets("Sheet2").Range("A2:f65536").ClearContents
    Sheets("Sheet2").Range("A2:F" & Rows.Count).ClearContents 'compatible avec Excel 2007 (qui a plus de 65536 lignes)
     
    If Trim(MyTextB) <> "*" Then
        'With Worksheets("BT")
        '    Set rB = .Range("b1:b65536")
        'End With
        'Set rB = Worksheets("BT").Range("b1:b65536") 'ou encore mieux si tu veux faire reference a une colonne complete
        Set rB = Worksheets("BT").Range("B:B")
     
        'Set rFoundB = rB.Resize(1, 1) '? 'ca correspond simplement a range("B1")
     
     
        Set B = rB.Find(MyTextB, LookIn:=xlValues, Lookat:=xlPart) 'Set B = rB.Find(MyTextB, After:=rFoundB, LookIn:=xlValues, Lookat:=xlPart)
        If Not B Is Nothing Then
            firstAddress = B.Address
           Do
           bcopy = False '??
           If (InStr(1, B.Offset(0, 1), Trim(MyTextC), vbTextCompare) > 0 _
               Or Trim(MyTextC) = "*" _
               Or Trim(MyTextC) = "") And _
               (InStr(1, B.Offset(0, 2), Trim(MyTextD), vbTextCompare) > 0 _
               Or Trim(MyTextD) = "*" Or Trim(MyTextD) = "") Then
                    'ici on renseigne la feuille 2
                    lr = Sheets("Sheet2").Cells(Rows.Count, "a").End(xlUp).Row + 1 'attention lr n'est pas declaré? il doit etre déclaré As Long
                    B.EntireRow.Copy Sheets("Sheet2").Rows(lr)
                    FoundCount = FoundCount + 1
     
                    'Je suppose qu'ici tu veux rajouter des entrée dans ton txt
                    If txtresult.Text <> "" Then txtresult.Text = txtresult.Text & vbCrLf 'On rajout un retour a la ligne si une entrée est deja presente
                    txtresult.Text = txtresult.Text & B.Value
     
                    '... j'utiliserais plutot utiliser un ComboBox
                    ComboBox1.AddItem B.Value
           End If
     
           Set B = rB.FindNext(B)
           Loop While Not B Is Nothing And B.Address <> firstAddress
        End If   ' not B is Nothing
    End If
     
    MsgBox FoundCount & " valeurs trouvés", vbInformation, "Transfert complété"
    'Sheets("Sheet2").Select
    End Sub
    En règle général il est bon d'indenter (mettre des tabulations) un code afin de mieux le comprendre et de repérer rapidement les points d'entrée et de sortie des différentes boucles.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    J'ai réussi à réglé mon problème et voici comment :

    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
    Private Sub CommandButton1_Click()
    Dim FoundCount As Double
    Dim rFoundB As Range
    Dim MyTextB As String
    Dim B As Range
    Dim rB As Range
    MyTextB = Me.txtfindB.Value
    txtresult.MultiLine = True
    Sheets("Sheet2").Range("A2:f65536").ClearContents
     
    '**********BBBBBBBBB*********
    If Trim(MyTextB) <> "*" Then
    With Worksheets("BT")
     Set rB = .Range("b1:b65536")
    End With
    Set rFoundB = rB.Resize(1, 1)
    Set B = rB.Find(MyTextB, After:=rFoundB, _
      LookIn:=xlValues, _
      Lookat:=xlPart)
    If Not B Is Nothing Then
     firstAddress = B.Address
     s = ""
    Do
    bcopy = False
    If (InStr(1, B.Offset(0, 1), Trim(MyTextC), vbTextCompare) > 0 _
        Or Trim(MyTextC) = "*" _
        Or Len(Trim(MyTextC)) = 0) And _
        (InStr(1, B.Offset(0, 2), Trim(MyTextD), vbTextCompare) > 0 _
        Or Trim(MyTextD) = "*" Or Len(Trim(MyTextD)) = 0) Then
       lr = Sheets("Sheet2").Cells(Rows.Count, "a").End(xlUp).Row + 1
        B.EntireRow.Copy Sheets("Sheet2").Rows(lr)
        FoundCount = FoundCount + 1
        s = s & Sheets("Sheet2").Cells(lr, "A").Text
        s = s & " - " & Sheets("Sheet2").Cells(lr, "B").Text
        s = s & "  " & Sheets("Sheet2").Cells(lr, "C").Text & " " & vbNewLine
        End If
    Set B = rB.FindNext(B)
    Loop While Not B Is Nothing And B.Address <> firstAddress
    If Len(Trim(s)) > 0 Then
    txtresult = s
    End If
    End If
    End If
     
    MsgBox FoundCount & " Valeurs trouvés", vbInformation, "Recherche complété"
     
    End Sub

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

Discussions similaires

  1. [XL-2007] Afficher résultat dans une TextBox
    Par didier51 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/01/2014, 18h18
  2. Afficher résultat dans un tabpanel?
    Par gmachi10 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 25/06/2009, 12h21
  3. afficher résultat dans des labels
    Par alicia26 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 02/09/2008, 19h29
  4. Afficher résultat dans un graphique
    Par gmachi10 dans le forum MATLAB
    Réponses: 7
    Dernier message: 30/07/2008, 15h13
  5. afficher dates dans textbox d'un Userform
    Par newsinfos dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/11/2007, 10h41

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