VBA buscar en varias hojas de Excel
COCOPSL
-
Le Pingou Mensajes publicados 12276 Fecha de registro Estado Colaborador Última intervención -
Le Pingou Mensajes publicados 12276 Fecha de registro Estado Colaborador Última intervención -
```vb
Sub Recherche()
Dim MaRecherche
Dim Ws As Worksheet
Dim c As Range
Dim Message As String, firstAddress As String
Dim valeurTrouvee As Boolean
MaRecherche = Worksheets("Recherche").Range("F2").Value
Message = "La valeur cherchée n'existe pas !!!"
valeurTrouvee = False
For Each Ws In Worksheets
With Ws
Set c = .Columns("A:KT").Find(What:=MaRecherche, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
valeurTrouvee = True
firstAddress = c.Address
.Select
.Range(c.Address).Select
Exit For
End If
End With
Next Ws
If Not valeurTrouvee Then
MsgBox Message
End If
End Sub
```
Sub Recherche()
Dim MaRecherche
Dim Ws As Worksheet
Dim c As Range
Dim Message As String, firstAddress As String
Dim valeurTrouvee As Boolean
MaRecherche = Worksheets("Recherche").Range("F2").Value
Message = "La valeur cherchée n'existe pas !!!"
valeurTrouvee = False
For Each Ws In Worksheets
With Ws
Set c = .Columns("A:KT").Find(What:=MaRecherche, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
valeurTrouvee = True
firstAddress = c.Address
.Select
.Range(c.Address).Select
Exit For
End If
End With
Next Ws
If Not valeurTrouvee Then
MsgBox Message
End If
End Sub
```
9 respuestas
-
Hola,
Solo de paso, intenta esta corrección:If c Is Nothing Then
MsgBox Message
End If
--
Saludos.
El Pingüino -
Hola,
Bueno, no, te faltaIf c Is Nothing Then
Message
End If
Falta MSGBOX delante de Message.If c Is Nothing Then
MsgBox Message
End If
--
Saludos.
El Pingüino -
Hola,
He probado su código, modifíquelo de la siguiente manera en la parte: [If Then end If]
If Not c Is Nothing Then firstAddress = c.Address .Select .Range(c.Address).Select Else MsgBox Message End If End With Next Ws End Sub
--
Saludos.
El Pingüino -
Hola,
Entonces en ese caso el valor (MaRecherche) no está presente en cada hoja.
Debes comprobar manualmente que el valor está presente en las hojas...
Una vez más, lo he probado con valores numéricos y todo funciona correctamente.
Mi archivo de prueba: https://www.cjoint.com/c/LCbro5W4Wyn
Saludos.
El Pingüino -
Hola,
Por lo tanto, deduzco que mi código según el archivo adjunto (puesto 7) es correcto y que su problema está resuelto.
--
Saludos.
El Pingüino -
Hola Pingüino,
Le agradezco por su ayuda.
He probado su macro.
No debí ser clara en mi explicación.
La macro efectivamente selecciona el valor buscado (que he puesto en la celda F2 de la hoja "Búsqueda" sin embargo, cuando el valor no existe, me gustaría que el mensaje "El valor no ha sido encontrado" se muestre solo una vez, después de haber buscado en todas las hojas. Y no 20 veces, si tengo 20 hojas, 40 veces si tengo 40 hojas.....etc. Y eso es lo que hace la suya como la nuestra. -
Hola,
Entonces aquí está el código que debería convenirte:Sub Recherche() Dim MaRecherche Dim Ws As Worksheet Dim c As Range Dim Message As String, firstAddress As String Dim NonExi As Boolean, ne As Integer MaRecherche = Worksheets("Recherche").Range("F2").Value NonExi = False: ne = 0 Message = "¡El valor buscado " & MaRecherche & " no existe!!!" For Each Ws In Worksheets With Ws Set c = .Columns("A:KT").Find(What:=MaRecherche, LookIn:=xlValues, LookAt:=xlPart) If Not c Is Nothing Then firstAddress = c.Address .Select .Range(c.Address).Select Else NonExi = True ne = ne + 1 End If End With Next Ws If ne <> 0 Then MsgBox Message & "En " & ne & " hoja/s " End If End Sub
--
Saludos.
El Pingüino -
Hola
Acabo de probar su código pero muestra el mensaje incluso cuando el valor está presente en una de las hojas
He intentado modificar el código pero no he encontrado la solución -
Hola,
No, no es posible, la indicación es solo una vez al final siempre que falte uno o más valores.
Gracias por poner su archivo a disposición en https://www.cjoint.com/ y publicar el enlace.
Ver mi archivo de test: https://www.cjoint.com/c/LCdpvRTUPVn
Saludos.
El Pingüino