• Initiateur de la discussion Initiateur de la discussion cutbill1234
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C

cutbill1234

Guest
Bonjour à tous,

j'aimerais savoir ce qui ne va pas dans la macro (merci Michel). En effet lorsque la recherche a trouvé ma valeur, lorsque je click sur le "OUI" ou "NON" du message " Voulez vous continuer la recherche ? ", je reviens sur la feuille ou se trouve mon bouton (feuile 1). J'aimerais qu'une fois la valeur trouvé elle reste sur la cellule.

Voici la macro :

Sub CommandButton2_Click()
Dim countTot As Long
Dim counter As Long
Dim strSearchString As String
Dim ws As Object
Dim foundCell As Variant
Dim loopAddr As Variant
Dim returnValue As String


strSearchString = InputBox(Prompt:="Saisir la valeur à chercher.", Title:="Recherche")

If strSearchString = "" Then Exit Sub

For Each ws In Worksheets
countTot = countTot + Application.CountIf(ws.UsedRange, "=" & strSearchString)
Next ws

If countTot = 0 Then
returnValue = MsgBox(" La valeur " & strSearchString & " n'est pas enregistrée ", vbOKOnly, " Message ")
Else
counter = 0
For Each ws In Worksheets
With ws
.Activate
Set foundCell = .Cells.Find(What:=strSearchString, LookIn:=xlValues, LookAt:=xlPart)

If Not foundCell Is Nothing Then
loopAddr = foundCell.Address
Do
counter = counter + 1
foundCell.Activate
returnValue = MsgBox(" La valeur " & strSearchString & " est enregistrée " & countTot & " fois " & vbLf & _
" Voulez vous continuer la recherche ? ", vbYesNo, "Message")
If returnValue = vbNo Then Exit For
Set foundCell = .Cells.FindNext(After:=foundCell)
Loop While Not foundCell Is Nothing And _
foundCell.Address <> loopAddr
End If
End With

Next ws

End If

Sheets(1).Select

End Sub
 
Bonjour bernard,

En effet cala marche mais comment faire pour que lorsque je suis sur la seule et unique réponse ou bien la dernière (s'il y en avait trois par exemple) pour que " Voulez vous continuer la recherche ? " ne soit plus présent et que le vbYesNo soit remplacé par un vbOKOnly.

D'avance merci.

Stéphane
 
Re Stephane

Si j'ai bien compris le code devient :

Sub CommandButton2_Click()
Dim countTot As Long
Dim counter As Long
Dim strSearchString As String
Dim ws As Object
Dim foundCell As Variant
Dim loopAddr As Variant
Dim returnValue As String

strSearchString = InputBox(Prompt:="Saisir la valeur à chercher.", Title:="Recherche")
If strSearchString = "" Then Exit Sub
For Each ws In Worksheets
countTot = countTot + Application.CountIf(ws.UsedRange, "=" & strSearchString)
Next ws
If countTot = 0 Then
returnValue = MsgBox(" La valeur " & strSearchString & " n'est pas enregistrée ", vbOKOnly, " Message ")
Else
counter = 0
For Each ws In Worksheets
With ws
.Activate
Set foundCell = .Cells.Find(What:=strSearchString, LookIn:=xlValues, LookAt:=xlPart)
If Not foundCell Is Nothing Then
loopAddr = foundCell.Address
Do
counter = counter + 1
foundCell.Activate
If counter = countTot Then
returnValue = MsgBox("Dernière valeur !", vbOKOnly, "Message")
Else
returnValue = MsgBox(" La valeur " & strSearchString & " est enregistrée " & countTot & " fois " & vbLf & _
" Voulez vous continuer la recherche ? ", vbYesNo, "Message")
If returnValue = vbNo Then Exit For
Set foundCell = .Cells.FindNext(After:=foundCell)
End If
Loop While Not foundCell Is Nothing And foundCell.Address <> loopAddr
End If
End With
Next ws
End If
End Sub

Cordialement

CBernardT
 
Re Bernard,

Le principe est bon, mais il y a quelque chose qui cloche, en effet lorsque je click sur le "OK" de la dernière valeur, Excel me renvoi sur la dernière feuille à la cellule A1 (c'est comme ci il refaisait une recherche), alors qu'il devrait justement rester sur cette dernière valeur trouvée.

D'avance merci

Stéphane
 
Re

Refait un copier coller strict de la macro de mon dernier post car sur ma bécane tout à l'air dêtre parfait.
Une fois cliqué sur OK de dernière valeur, on est sur cette dernière valeur quelle que soit la feuille.

A+

CBernardT
 
Re

En fait ce qui se passe c'est lorsque je suis sur la dernière valeur je tape "OK" et j'ai le message "la valeur est enregistré x fois, voulez vous continuer la recherche?" qui réapparait de nouveau. En tout cas c'est ce que ça me fait sur mon fichier que j'ai mis en pièce jointe.

Merci

Stephane
 

Pièces jointes

Re

Yop la ça marche ! hi hi

Rajoutes un exit sub en fin de condition.

Do
counter = counter + 1
foundCell.Activate
If counter = countTot Then
returnValue = MsgBox("Dernière valeur !", vbOKOnly, "Message")

Exit Sub

Else

Salut

CBernardT








A+

CBernardT
 
Merci Bernard, cela marche à merveille.

Mais j'ai encore une petite querstion (désolé). J'aimerais que si il n'a qu'une valeur avoir un message me disant que la valeur n'est enregistré qu'une fois avec juste le OK. Je trouve que c'est mieux que d'avoir pour une seule réponse le message "dernière valeur".
Puis je mettre ceci :

If countTot = 1 Then
returnValue = MsgBox(" La valeur " & strSearchString & " est enregistrée 1 fois ", vbOKOnly, " Message ")

le problème c'est que ça ne marche pas dans ma macro, pourquoi ??
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
10
Affichages
539
Réponses
4
Affichages
586
Retour