Je veux avoir un code qui mettra en évidence chaque mot qui a été recherché. J'ai déjà un code de ce type, sauf qu'après la ligne 30, tout commence à être souligné. Je vais ajouter des images pour plus de clarté. Je ne sais pas ce qui ne va pas avec mon code ou ce que je pourrais réparer.Mettre en surbrillance une recherche de Word dans VBA
Voici mon code.
Sub Highlight()
Application.ScreenUpdating = False
Dim Rng As Range
Dim cFnd As String
Dim xTmp As String
Dim x As Long
Dim m As Long
Dim y As Long
cFnd = ComboBox1.Value
y = Len(cFnd)
For Each Rng In Selection
With Rng
m = UBound(Split(Rng.Value, cFnd))
If m > 0 Then
xTmp = ""
For x = 0 To m - 1
xTmp = xTmp & Split(Rng.Value, cFnd)(x)
.Characters(Start:=Len(xTmp) + 1, Length:=y).Font.ColorIndex = 3
xTmp = xTmp & cFnd
Next
End If
End With
Next Rng
Application.ScreenUpdating = True
End Sub
Ceci est le code de recherche pour amener les résultats de recherche à la page montrée dans les images.
Sub FindOne()
Range("B19:J5000") = ""
Application.ScreenUpdating = False
Dim k As Integer, EndPasteLoopa As Integer, searchColumn As Integer, searchAllCount As Integer
Dim myText As String
Dim totalValues As Long
Dim nextCell As Range
Dim searchAllCheck As Boolean
k = ThisWorkbook.Worksheets.Count
myText = ComboBox1.Value
Set nextCell = Range("B20")
If myText = "" Then
MsgBox "No Address Found"
Exit Sub
End If
Select Case ComboBox2.Value
Case "SEARCH ALL"
searchAllCheck = True
Case "EQUIPMENT NUMBER"
searchColumn = 1
Case "EQUIPMENT DESCRIPTION"
searchColumn = 3
Case "DUPONT NUMBER"
searchColumn = 6
Case "SAP NUMBER"
searchColumn = 7
Case "SSI NUMBER"
searchColumn = 8
Case "PART DESCRIPTION"
searchColumn = 9
Case ""
MsgBox "Please select a value for what you are searching by."
End Select
For I = 2 To k
totalValues = Sheets(I).Cells(Rows.Count, "A").End(xlUp).Row
ReDim AddressArray(totalValues) As String
If searchAllCheck Then
searchAllCount = 5
searchColumn = 1
Else
searchAllCount = 0
End If
For qwerty = 0 To searchAllCount
If searchAllCount Then
Select Case qwerty
Case "1"
searchColumn = 3
Case "2"
searchColumn = 6
Case "3"
searchColumn = 7
Case "4"
searchColumn = 8
Case "5"
searchColumn = 9
End Select
End If
For j = 0 To totalValues
AddressArray(j) = Sheets(I).Cells(j + 1, searchColumn).Value
Next j
For j = 0 To totalValues
If InStr(1, AddressArray(j), myText) > 0 Then
EndPasteLoop = 1
If (Sheets(I).Cells(j + 2, searchColumn).Value = "") Then EndPasteLoop = Sheets(I).Cells(j + 1, searchColumn).End(xlDown).Row - j - 1
For r = 1 To EndPasteLoop
Range(nextCell, nextCell.Offset(0, 8)).Value = Sheets(I).Range("A" & j + r, "I" & j + r).Value
Set nextCell = nextCell.Offset(1, 0)
Next r
End If
Next j
Next qwerty
Next
Application.ScreenUpdating = True
Range("A1").Select
End Sub
Merci!
Donc, pour ce faire, je remplacerais simplement les parties 'Split' avec le code' InStr' que j'ai utilisé pour faire une recherche dans le classeur? Je vais poster cette partie du code ci-dessus dans une édition. –
La séparation n'a pas beaucoup de sens. Le code que j'ai posté ci-dessous montre comment utiliser 'Instr' pour récupérer les indices de chaînes des parties que vous voulez mettre en évidence. Utiliser 'InStr' pour rechercher une chaîne pour une large plage n'est pas efficace. Utilisez 'Find'. J'ai donné un lien vers un bon tutoriel pour cela. Cela peut être un peu difficile à utiliser, mais cela en vaut la peine car il s'exécute en C compilé plutôt qu'en VBA interprété. –