Tri à un critère, code pour textbox1

Bonjour

je développe un formulaire pour interroger une base de données. Pour la section logiciels commerciaux, il est possible de faire un tri par nom d'employé et je voudrais associer, à la sélection d'un employé, son poste (colonne F, Texbox1) et son code d'utilisateur (colonne I, TextBox2). La colonne I reste à référencer...

Le code pour la ListBox fonctionne, mais je n'arrive pas à intégrer au code l'info pour la textbix 1 et 2.

Merci de votre aide ou toute piste de solution.

Extrait du code:

Dim BD(), F, ColVisu(), Ncol

Private Sub CommandButton3_Click()
Unload Me
End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub UserForm_Initialize()

   Me.Top = Application.Top
   Me.Left = Application.Left

Set F = Sheets("bdl")
   BD = F.Range("A2:n" & F.[A65000].End(xlUp).Row).Value
   ColVisu = Array(5)    ' colonnes à visualiser
   Ncol = UBound(ColVisu) + 1

   '--- combobox Employé trié
   Set d = CreateObject("Scripting.Dictionary")
   d("*") = ""
   For i = LBound(BD) To UBound(BD)
    d(BD(i, 7)) = ""
   Next i
   Temp = d.keys
   Tri Temp, LBound(Temp), UBound(Temp)
   Me.ComboBox3.List = Temp
   Me.ComboBox3.ListIndex = 0

   '-- en têtes de colonne ListBox
For Each k In ColVisu
Set Lab = Me.Controls.Add("Forms.Label.1")
     Lab.Caption = F.Cells(1, k)
     Lab.Top = y
     Lab.Left = x
     x = x + F.Columns(k).Width * 0.75
     tempCol = tempCol & F.Columns(k).Width * 0.75 & ";"
   Next
   tempCol = Left(tempCol, Len(tempCol) - 1)
   Me.ListBox2.ColumnCount = UBound(ColVisu) + 1
   Me.ListBox2.ColumnWidths = tempCol
  Affiche

  End Sub
  Sub Affiche()
  Dim Tbl()
  Employé = Me.ComboBox3
  n = 0
  For i = 1 To UBound(BD)
    If BD(i, 7) Like Employé Then
        n = n + 1: ReDim Preserve Tbl(1 To Ncol, 1 To n)
        c = 0
        For Each k In ColVisu: c = c + 1: Tbl(c, n) = BD(i, k): Next k
    End If
  Next i
  If n > 0 Then
     Me.ListBox2.Column = Tbl
     Me.Label1.Caption = Me.ListBox2.ListCount & " Ligne(s)"
  Else
     Me.ListBox2.Clear
     Me.Label1.Caption = ""
  End If
End Sub
  Private Sub ComboBox3_click()
   Affiche
End Sub

Bonjour

...et je voudrais associer, à la sélection d'un employé, son poste (colonne F, Texbox1) et son code d'utilisateur (colonne I, TextBox2).

Colonne F de quelle feuille ?

Colonne I de quelles feuille : les 3 feuilles, elles sont vides...

Bye !

Bonsoir,

Essayer ce code :

Private Sub ComboBox3_click()
    Dim cell As Range

    With Feuil3
        Set cell = .Columns("G").Find(Me.ComboBox3)
        If Not cell Is Nothing Then
            Me.TextBox1 = .Cells(cell.Row, "F")
            Me.TextBox2 = .Cells(cell.Row, "I")
        End If
    End With

    Affiche
End Sub

NB : concernant ces instructions de positionnement,

     x = x + F.Columns(k).Width * 0.75
     tempCol = tempCol & F.Columns(k).Width * 0.75 & ";"

Le taux de points par pixel n'est pas toujours égal à 0,75, notamment quand la taille des polices est agrandie sous Windows (110 % par exemple au lieu de 100%)

Bonsoir,

Hum! Je pense que vous vous êtes trompé de Topic, il doit s'agir de celui-ci

https://forum.excel-pratique.com/viewtopic.php?f=2&t=104186

>Hum! Je pense que vous vous êtes trompé de Topic, il doit s'agir de celui-ci

Non! Le code du programme présenté est bien celui du lien!

Ceuzin

Bonjour à tous,

Bonjour gmb, ceuzin et thev,

Déjà, merci pour l'intérêt porté à mon sujet.

Pour gmb, il s'agit de la feuille 3, la BDL inscrit dans le code. Et je vous assure que les feuilles ne sont pas vide!

Ceuzin a raison de référer à Boisjontier, site que je chéris autant qu'Excel-Pratique. Il reste qu'il n'est pas incorrect de ne pas toujours citer la source! Je n'ai aucune prétention à la maîtrise du VBA, c'est d'ailleurs pourquoi je fais souvent appel à ce très généreux forum.

Thev, j'essaie votre code, et vous reviens.

Merci encore.

A+

Bonjour

merci thev, le code fonctionne super bien.

J'aimerais qu'à l'ouverture du fichier qu'il n'y est que l'userform de visible, mais sans affecter tout Excel et/ou les autres fichiers ouverts.

Est-ce possible?

Le problème avec l'Application.Visible = False, c'est que l'application Excel devient totalement invisible...

Private Sub Workbook_Open()
Application.Visible = False
End Sub

Merci

Bonjour,

Essayer ceci :

Private Sub Workbook_Open()
    ThisWorkbook.Windows(1).Visible = False
End Sub

Bonjour

AHHH, au secours, j'ajout du code ThisWorkbook.Windows(1).Visible = False a tout bousillé!

J'ai retiré le code, et maintenant le fichier (page d’accueil) est grisé et les boutons de commandes ne fonctionnent plus: erreur d'exécution: La méthode 'Sheet de l'objet'_Global' a échoué...

Bref, au secours....

capture

Bonjour,

Il suffit de mettre l'instruction inverse pour revenir à la situation initiale :

Private Sub Workbook_Open()
    ThisWorkbook.Windows(1).Visible = True
End Sub

Bonjour thev

avec le code que vous m'avez fournir, il me manque l'* dans le ComboBox 3 afin d'avoir un filtre complet des données, un peu comme dans celui-ci que l'on retrouve dans l'Userform1.

Private Sub ComboBox1_Change()
'   '--- combobox Emplois trié
  Set F = Sheets("bd")
   BD = F.Range("A2:E" & F.[A65000].End(xlUp).Row).Value
   Set D = CreateObject("Scripting.Dictionary")
   D("*") = ""
   For i = LBound(BD) To UBound(BD)
    If BD(i, 1) = ComboBox1.Value Then D(BD(i, 2)) = ""
   Next i
   Temp = D.keys
   Tri Temp, LBound(Temp), UBound(Temp)
   Me.ComboBox2.List = Temp
   Me.ComboBox2.ListIndex = 0
End Sub

J'ai fait plusieurs tentatives, mais je bute constamment à des erreurs!

Merci

Bonsoir,

J'avoue ne pas bien comprendre car ce n'est pas moi qui vous ai fourni le code de filtrage.

Mais bon, voici un code un peu plus optimisé qui devrait convenir.

Bonjour thev

désolé pour la confusion, le code de filtrage n'est qu'un exemple, je parlais de ceci:

Merci encore pour votre aide précieuse.

Message par thev » 20 janv. 2018, 14:03

Bonsoir,

Essayer ce code :

CODE : TOUT SÉLECTIONNER

Private Sub ComboBox3_click()

Dim cell As Range

With Feuil3

Set cell = .Columns("G").Find(Me.ComboBox3)

If Not cell Is Nothing Then

Me.TextBox1 = .Cells(cell.Row, "F")

Me.TextBox2 = .Cells(cell.Row, "I")

End If

End With

Affiche

End Sub

Bonsoir,

D'après ce que je comprends, ci-jointe nouvelle version.

Bonjour thev.

Merci pour l'optimisation du code. C'est grande ment apprécié.

Pour l'userform3, je n'ai pas vraiment besoin détaller la liste des noms et des codes dans la ListBox, mais je suis très très content de cet extra. Je vais pourvoir m'en servir pour d'autres projet.

Merci encore et à bientôt.

Bonsoir,

Pour terminer, version avec liste unique triée des logiciels avec le filtre (*)

merci infiniment de votre générosité et votre temps.

Rechercher des sujets similaires à "tri critere code textbox1"