Recherche dans feuille Excel
Bonjour,
voîlà mon petit problème, je souhaite chercher un MotClés associé à différent enseignant, que j'ai noté dans une feuille excel
N'arrivant pas à faire fonctionner la macro Ctrl-F, j'essaye de le faire avec un While mais toujours des erreurs, que je n'arrive pas à corriger. L'onjectif étant de rentrer les différents enseignant associé à ce motclé dans une listbox
Voîlà le code :
Sub Recherche_MotClés_Dans_Classeur_Excel(MotClés As String)
Dim Ligne As Integer
Dim Colonne As Integer
Dim Nb As Integer
Dim Ensei As String
Ligne = 2
MotClés = Mid(MotClés, 7)
With Workbooks("PFE.xlsx").Sheets("MotClés")
While MotClés <> .Range("A" & Ligne).Value
Ligne = Ligne + 1
Wend
If Ligne = 2 Then 'Traitement d'erreur
'A voir plus tard
Else
.Range("A" & Ligne).Select
Selection.End(xlToRight).Select
Nb = ActiveCell.Column
For i = 2 To Nb
Colonne = Asc("B") + i - 2
Ensei = .Range(Str(Colonne) & Ligne).Value 'Dans mon programme j'ai une erreur ici : Erreur définie par l'application ou par l'objet, erreur d'écriture donc, je crois mais je ne trouve pas
Usf_Ensei.LBo_Ensei.AddItem (Ensei)
Next i
End If
End With
End Sub
Bonjour,
Str() te transforme un nombre en une chaine. C'est dire 66 => "66"
Fais 'affichage / fenetre espions' et quand ça plante sélectionne Str(Colonne) & Ligne et fais un cliqué-glissé dans la fenetre espion pour visualiser le contenu de l'expression.
C'est Chr() que tu voulais.
Tu as cells(ligne,colonne) qui t'évite cette gymnastique.
Sinon essaie plutôt :
Sub test(MotClés As String)
Dim c As Range
UserForm1.ListBox1.Clear
Set c = [A:A].Find(MotClés, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
If c.Offset(, 1) <> "" Then
UserForm1.ListBox1.List = Application.Transpose(c.Offset(, 1).Resize(, Cells(c.Row, Columns.Count).End(xlToLeft).Column - 1).Value)
End If
Else
MsgBox "mot clé non trouvé"
End If
UserForm1.Show
End Sub
Je te remercie, ton find a éclairé ma journée, par contre je n'ai pas compris ta ligne :
UserForm1.ListBox1.List = Application.Transpose(c.Offset(, 1).Resize(, Cells(c.Row, Columns.Count).End(xlToLeft).Column - 1).Value)
Et j'ai modifié le codage du find car celui ci ne fonctionnais pas
Voîlà ce que ça donne :
Sub test(MotClés As String)
Dim c As Range
Dim Colonne As Integer
Colonne = 1
Usf_Ensei.LBo_Ensei.Clear
x = Workbooks("PFE.xlsx").Sheets("MotClés").[A:A].Find(What:=MotClés, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address 'J'ai utilisé cette méthode à partir de ce [url=http://www.excel-downloads.com/forum/63274-methode-find-en-vba.html]post[/url]
If Not x = "" Then
Set c = Range(x)
While c.Offset(0, Colonne) <> ""
Ensei = c.Offset(0, Colonne)
Usf_Ensei.LBo_Ensei.AddItem (Ensei)
'Usf_Ensei.LBo_Ensei.List = Application.Transpose(c.Offset(, 1).Resize(, Cells(c.Row, Columns.Count).End(xlToLeft).Column - 1).Value)
Colonne = Colonne + 1
Wend
Else
MsgBox "mot clé non trouvé"
End If
End SubRe,
UserForm1.ListBox1.List = Application.Transpose(c.Offset(, 1).Resize(, Cells(c.Row, Columns.Count).End(xlToLeft).Column - 1).Value)
Calcule la plage des mots clés et fourni la liste en 1 fois par son range (décaler la cellule du mot clé d'une colonne et l'agrandir du nombre de colonnes -1 de la ligne).
Et comme .List n'accepte qu'un range en colonne et que tu es en ligne j'ai ajouté un transpose().
LookIn:=xlFormulas : recherche dans la formule et non le résultat. Ne marchera plus si demain tu y mets des formules.
LookAt:=xlPart : recherche si la cellule contient et non strictement égale. Te retournera des valeurs que tu ne veux pas.
Un conseil : remet LookIn:=xlValues et lookat:=xlWhole
eric