Bonjour le forum!
je suis débutant depuis peu en vba. J'ai une macro de recherche en UserForm à faire et j'avance assez lentement. Ce forum m'aide énormément mais là pour mon problème du jour, je n'ai pas trouvé la solution![Frown :( :(](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Voici un aperçu de mon UserForm avec indication des noms des champs (carément moche, il y a eu un bug dans les couleurs lol)
http://imageshack.us
le code de recherche fonctionne :
1 - je sélectionne dans une ListeBox (LB1) la feuille dans laquelle je veux effectuer ma recherche;
2 - je rentre dans une TextBox (TB1) du texte ou nombres à chercher, un truc quoi
selon des critères définis dans le code;
3 - automatiquement, tous les résultats possibles se listent dans une 2e ListBox (LB2)
c'est maintenant que je cale :
4 - j'aimerais afficher en couleur de fond d'une "image" de la UserForm, ici appelée NRJ la couleur de fond de la cellule correspondant au résultat de recherche sélectionnée dans LB2
voici mon code :
Private Sub UserForm_Initialize()
Dim i As Integer
Dim SName As String
UF1.LB1.Clear
For i = 2 To Worksheets.Count
SName = Sheets(i).Name
UF1.LB1.AddItem SName
If i = 6 Then Exit Sub
Next i
If UF1.LB1.ListCount <> 0 Then UF1.LB1.ListIndex = 0
End Sub
Private Sub TB1_Change()
Dim l As Double
Dim n As Integer
Dim vc As String
Dim vs As String
Dim IndexSheet As Integer
c = 3
n = 0
vs = LCase(UF1.TB1.Text)
UF1.LB2.Clear
UF1.LB3.Caption = "Aucun élément trouvé"
IndexSheet = 2 + UF1.LB1.ListIndex
If UF1.TB1.TextLength < 1 Then
Exit Sub
Else
For l = 2 To Sheets(IndexSheet).Cells(65536, c).End(xlUp).Row
If IsNumeric(Sheets(IndexSheet).Cells(l, c)) Then
vc = Str(Sheets(IndexSheet).Cells(l, c))
Else
vc = LCase(Sheets(IndexSheet).Cells(l, c))
End If
If Not InStr(1, vc, vs) = 0 Then
UF1.LB2.AddItem l & " : " & Sheets(IndexSheet).Cells(l, c).Value
n = n + 1
End If
Next l
End If
If n > 0 Then UF1.LB2.ListIndex = 0
If n = 0 Then UF1.LB3.Caption = "Aucun élément trouvé"
If n = 1 Then UF1.LB3.Caption = "Un élément trouvé"
If n > 1 Then UF1.LB3.Caption = n & " éléments trouvés"
End Sub
Private Sub NRJ_Change() 'voilà c'est ici qu'il faudrais que j'arrive en fonction de ma ligne sélectionné en LB2 à récupérer une info sur la couleur de la cellule, mais tout ce que j'ai fais jusqu'à présent me retourne rien ou du noir
, voici en commentaire deux lignes utiles je pense
' Color = Cells(l, c).Interior.ColorIndex
' NRJ.BackColor = color
End Sub
bon j'espère que c'est pas trop confu tout ça, n'hésitez pas à me poser des questions
et merci à l'avance
je suis débutant depuis peu en vba. J'ai une macro de recherche en UserForm à faire et j'avance assez lentement. Ce forum m'aide énormément mais là pour mon problème du jour, je n'ai pas trouvé la solution
Voici un aperçu de mon UserForm avec indication des noms des champs (carément moche, il y a eu un bug dans les couleurs lol)
http://imageshack.us
le code de recherche fonctionne :
1 - je sélectionne dans une ListeBox (LB1) la feuille dans laquelle je veux effectuer ma recherche;
2 - je rentre dans une TextBox (TB1) du texte ou nombres à chercher, un truc quoi
3 - automatiquement, tous les résultats possibles se listent dans une 2e ListBox (LB2)
c'est maintenant que je cale :
4 - j'aimerais afficher en couleur de fond d'une "image" de la UserForm, ici appelée NRJ la couleur de fond de la cellule correspondant au résultat de recherche sélectionnée dans LB2
voici mon code :
Private Sub UserForm_Initialize()
Dim i As Integer
Dim SName As String
UF1.LB1.Clear
For i = 2 To Worksheets.Count
SName = Sheets(i).Name
UF1.LB1.AddItem SName
If i = 6 Then Exit Sub
Next i
If UF1.LB1.ListCount <> 0 Then UF1.LB1.ListIndex = 0
End Sub
Private Sub TB1_Change()
Dim l As Double
Dim n As Integer
Dim vc As String
Dim vs As String
Dim IndexSheet As Integer
c = 3
n = 0
vs = LCase(UF1.TB1.Text)
UF1.LB2.Clear
UF1.LB3.Caption = "Aucun élément trouvé"
IndexSheet = 2 + UF1.LB1.ListIndex
If UF1.TB1.TextLength < 1 Then
Exit Sub
Else
For l = 2 To Sheets(IndexSheet).Cells(65536, c).End(xlUp).Row
If IsNumeric(Sheets(IndexSheet).Cells(l, c)) Then
vc = Str(Sheets(IndexSheet).Cells(l, c))
Else
vc = LCase(Sheets(IndexSheet).Cells(l, c))
End If
If Not InStr(1, vc, vs) = 0 Then
UF1.LB2.AddItem l & " : " & Sheets(IndexSheet).Cells(l, c).Value
n = n + 1
End If
Next l
End If
If n > 0 Then UF1.LB2.ListIndex = 0
If n = 0 Then UF1.LB3.Caption = "Aucun élément trouvé"
If n = 1 Then UF1.LB3.Caption = "Un élément trouvé"
If n > 1 Then UF1.LB3.Caption = n & " éléments trouvés"
End Sub
Private Sub NRJ_Change() 'voilà c'est ici qu'il faudrais que j'arrive en fonction de ma ligne sélectionné en LB2 à récupérer une info sur la couleur de la cellule, mais tout ce que j'ai fais jusqu'à présent me retourne rien ou du noir
' Color = Cells(l, c).Interior.ColorIndex
' NRJ.BackColor = color
End Sub
bon j'espère que c'est pas trop confu tout ça, n'hésitez pas à me poser des questions
et merci à l'avance