VBA faire une recherche sur plusieurs feuilles excel
COCOPSL
-
Le Pingou Messages postés 12640 Date d'inscription Statut Contributeur Dernière intervention -
Le Pingou Messages postés 12640 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un dossier avec plusieurs feuilles.
N'étant pas une pro des VBA, j'ai adapté un code vba pour rechercher la valeur inscrite en F2 de la feuille 1 que j'ai nommé "Recherche".
Il fonctionne parfaitement et m'emmène directement en sélectionnant la cellule ou se trouve la valeur. Jusque la, tout va bien.
En revanche, je souhaiterai qu'une msgBox s'ouvre quand il ne trouve pas la valeur ailleurs que dans F2. Et la je sèche. Il y a quelque-chose que je fais mal dans la boucle car je n'ai réussi qu'a avoir autant de message " la valeur cherchée n'existe pas !!" autant de fois que de feuilles, et dans le code ci-dessous, cela ne fonctionne pas.
J'ai aussi tenter de lancer la recherche par MsgBox mais je bloque au même endroit.
Ou je me complique la vie et il existe un code beaucoup plus simple.
Voici le code :
Sub Recherche()
Dim MaRecherche
Dim Ws As Worksheet
Dim c As Range
Dim Message As String, firstAddress As String
MaRecherche = Worksheets("Recherche").Range("F2").Value
Message = "La valeur cherchée n'existe pas !!!"
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
End If
End With
Next Ws
If c Is Nothing Then
Message
End If
End Sub
Je vous remercie pour l'aide que vous voudrez bien m'apporter.
J'ai un dossier avec plusieurs feuilles.
N'étant pas une pro des VBA, j'ai adapté un code vba pour rechercher la valeur inscrite en F2 de la feuille 1 que j'ai nommé "Recherche".
Il fonctionne parfaitement et m'emmène directement en sélectionnant la cellule ou se trouve la valeur. Jusque la, tout va bien.
En revanche, je souhaiterai qu'une msgBox s'ouvre quand il ne trouve pas la valeur ailleurs que dans F2. Et la je sèche. Il y a quelque-chose que je fais mal dans la boucle car je n'ai réussi qu'a avoir autant de message " la valeur cherchée n'existe pas !!" autant de fois que de feuilles, et dans le code ci-dessous, cela ne fonctionne pas.
J'ai aussi tenter de lancer la recherche par MsgBox mais je bloque au même endroit.
Ou je me complique la vie et il existe un code beaucoup plus simple.
Voici le code :
Sub Recherche()
Dim MaRecherche
Dim Ws As Worksheet
Dim c As Range
Dim Message As String, firstAddress As String
MaRecherche = Worksheets("Recherche").Range("F2").Value
Message = "La valeur cherchée n'existe pas !!!"
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
End If
End With
Next Ws
If c Is Nothing Then
Message
End If
End Sub
Je vous remercie pour l'aide que vous voudrez bien m'apporter.
Configuration: Windows / Chrome 98.0.4758.102
A voir également:
- Rechercher une valeur dans plusieurs feuilles excel
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Regrouper plusieurs feuilles excel en une seule - Guide
- Comment faire un livret avec des feuilles a4 - Guide
9 réponses
Bonjour,
Eh bien non, vous avez
Il manque MSGBOX devant Message.
Eh bien non, vous avez
If c Is Nothing Then
Message
End If
Il manque MSGBOX devant Message.
If c Is Nothing Then
MsgBox Message
End If
Bonjour,
J'ai testé votre code, modifier comme suit la parti : [If Then end If ]
J'ai testé votre code, modifier comme suit la parti : [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
Bonjour,
Alors dans se cas la valeur (MaRecherche) n'est pas présente sur chaque feuille.
Vous devez contrôler manuellement que la valeur est bien présente dans les feuilles...
Encore une fois, je l'ai testé avec des valeurs numériques et tout fonctionne correctement.
Mon fichier test: https://www.cjoint.com/c/LCbro5W4Wyn
Alors dans se cas la valeur (MaRecherche) n'est pas présente sur chaque feuille.
Vous devez contrôler manuellement que la valeur est bien présente dans les feuilles...
Encore une fois, je l'ai testé avec des valeurs numériques et tout fonctionne correctement.
Mon fichier test: https://www.cjoint.com/c/LCbro5W4Wyn
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
De ce fait j'en déduit que mon code selon fichier joint (poste 7) est correct, et que votre problème est résolu!
De ce fait j'en déduit que mon code selon fichier joint (poste 7) est correct, et que votre problème est résolu!
Bonjour Le Pingou,
Je vous remercie pour votre aide.
J'ai testé votre macro.
J'ai n'ai pas dû être claire dans mon explication.
La macro me sélectionne en effet la valeur cherchée (que j'ai mis dans la cellule F2 de la feuille "Recherche" en revanche quand la valeur n'existe pas, j'aimerai que le message " La valeur n'a pas été trouvé" s'affiche une seule fois, après avoir recherché dans toutes les feuilles. Et non 20 fois, si j'ai 20 feuilles, 40 fois si j'ai 40 feuilles.....etc. Et c'est ce que fait la votre comme la nôtre.
Je vous remercie pour votre aide.
J'ai testé votre macro.
J'ai n'ai pas dû être claire dans mon explication.
La macro me sélectionne en effet la valeur cherchée (que j'ai mis dans la cellule F2 de la feuille "Recherche" en revanche quand la valeur n'existe pas, j'aimerai que le message " La valeur n'a pas été trouvé" s'affiche une seule fois, après avoir recherché dans toutes les feuilles. Et non 20 fois, si j'ai 20 feuilles, 40 fois si j'ai 40 feuilles.....etc. Et c'est ce que fait la votre comme la nôtre.
Bonjour,
Alors voici le code qui devrait vous convenir:
Alors voici le code qui devrait vous convenir:
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 = "La valeur cherchée " & MaRecherche & " n'existe pas !!!"
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 & "Dans " & ne & " feuille/s "
End If
End Sub
Bonjour
Je viens de tester ce votre code mais il met le message quand bien même la valeur est présente sur une des feuilles
J'ai essayé en modifiant le code mais je n'ai pas trouvé la solution
Je viens de tester ce votre code mais il met le message quand bien même la valeur est présente sur une des feuilles
J'ai essayé en modifiant le code mais je n'ai pas trouvé la solution
Bonjour,
Non se n'est pas possible, l'indication est une seul fois à la fin pour autant qu'une valeur ou plus manques.
Merci de mettre votre fichier à disposition sur https://www.cjoint.com/ et poster le lien.
Voir mon fichier test: https://www.cjoint.com/c/LCdpvRTUPVn
Non se n'est pas possible, l'indication est une seul fois à la fin pour autant qu'une valeur ou plus manques.
Merci de mettre votre fichier à disposition sur https://www.cjoint.com/ et poster le lien.
Voir mon fichier test: https://www.cjoint.com/c/LCdpvRTUPVn
Je vous remercie mais c’est bien la boucle que j’ai mis à la fin et cela ne fonctionne pas.