Souci sur la macro

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
 
C

cutbill1234

Guest
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
 
C

CBernardT

Guest
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
 
C

cutbill1234

Guest
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
 
C

CBernardT

Guest
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
 
C

cutbill1234

Guest
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

  • yop.zip
    9 KB · Affichages: 17
C

CBernardT

Guest
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
 
C

cutbill1234

Guest
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 ??
 

Discussions similaires

Réponses
2
Affichages
107
Réponses
7
Affichages
334
Réponses
2
Affichages
269

Statistiques des forums

Discussions
312 321
Messages
2 087 266
Membres
103 502
dernier inscrit
talebafia