VBA buscar en varias hojas de Excel

COCOPSL -  
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
```

9 respuestas

  1. Le Pingou Mensajes publicados 12276 Fecha de registro   Estado Colaborador Última intervención   1 478
     
    Hola,
    Solo de paso, intenta esta corrección:
    If c Is Nothing Then
    MsgBox Message
    End If


    --
    Saludos.
    El Pingüino
    0
    1. COCOPSL
       
      Buenas noches.
      Le agradezco, pero es efectivamente el bucle que he puesto al final y no funciona.
      0
  2. Le Pingou Mensajes publicados 12276 Fecha de registro   Estado Colaborador Última intervención   1 478
     
    Hola,
    Bueno, no, te falta
    If 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
    0
    1. COCOPSL
       
      Hola!
      Lo siento…. ☺️
      También probé con MsgBox = « esta dato… » pero no funcionó.
      Así que voy a probar el tuyo.
      0
  3. Le Pingou Mensajes publicados 12276 Fecha de registro   Estado Colaborador Última intervención   1 478
     
    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
    0
    1. COCOPSL
       
      Hola,
      Con tu código, al igual que con el que probé, recibo el mensaje tantas veces como hojas…????
      0
  4. Le Pingou Mensajes publicados 12276 Fecha de registro   Estado Colaborador Última intervención   1 478
     
    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
    0
    1. COCOPSL
       
      Gracias por su respuesta.
      De hecho, el valor no se encuentra en cada hoja. El valor se encuentra en una de estas hojas y eso es todo. (por ejemplo: el valor 20 se encuentra una sola vez en mi carpeta que tiene 15 hojas).
      De ahí mi solicitud de ayuda.
      0
  5. Le Pingou Mensajes publicados 12276 Fecha de registro   Estado Colaborador Última intervención   1 478
     
    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
    0
  6. COCOPSL
     
    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.
    0
  7. Le Pingou Mensajes publicados 12276 Fecha de registro   Estado Colaborador Última intervención   1 478
     
    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
    0
  8. COCOPSL
     
    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
    0
  9. Le Pingou Mensajes publicados 12276 Fecha de registro   Estado Colaborador Última intervención   1 478
     
    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
    0