Je recherche une macro qui pourrait rechercher un chiffre dans une feuille excel, et qui au cas où elle ne le trouverait pas, relancerait une macro qui crée des chiffres aléatoires, et qui ensuite recherche le chiffre cherché, et si le chiffre recherché n' est pas trouvé, la macro ( créant des chiffres aléatoires et recherchant un chiffre ) se relancerait automatiquement, jusqu' à ce que le chiffre recherché soit trouvé.
J' ai déjà créé la macro qui créé aléatoirement des chiffres.
Je joint un fichier qui rendra mon problème un peu plus facile à comprendre. J' ai écrit une mini explication dans VB.
Re : Recherche d' un chiffre, si non trouvé, la macro se relance
Bonjour,
Si c'est sur la plage [A1: D4] qu'il faut rechercher alors :
Code:
Sub MacroRecherche()
Dim fini As Boolean, c As Range
While Not fini
MacroAleatoire
Set c = [A1:D4].Find(24, LookIn:=xlValues)
If Not c Is Nothing Then fini = True
Wend
End Sub
mais ta MacroAleatoire fait un peu n'importe quoi...
eric
Re : Recherche d' un chiffre, si non trouvé, la macro se relance
Bonjour,
Cette unique macro dans le fichier joint :
Code:
Sub RechercheNombreAleatoire()
Dim n As Integer
n = 24 'à adapter
With [A1:D4] 'à adapter
.ClearContents
While .Find(n, , xlValues, xlWhole) Is Nothing
.Formula = "=1+INT(500*RAND())"
Wend
.Value = .Value 'supprime les formules
.Find(n).Select 'sélection facultative
End With
End Sub
Re : Recherche d' un chiffre, si non trouvé, la macro se relance
Bonsoir,
Je ré-ouvre ce sujet car j' aimerais apporter une précision en plus aux macros que vous m' aviez donné. Est-il possible de rajouter dans l' une de ces macros ( ou toutes ) le nom de la feuille dans laquelle la recherche doit être effectuée ?
Par exemple, en modifiant la macro d' eriiic :
Sub MacroRecherche()
Dim fini As Boolean, c As Range
While Not fini
MacroAleatoire
Set c = [A14].Find(24, LookIn:=xlValues) Feuil1
If Not c Is Nothing Then fini = True
Wend
End Sub
Re : Recherche d' un chiffre, si non trouvé, la macro se relance
Bonsoir,
Merci Eric.
Code:
Sub MacroRecherche()
Dim fini As Boolean, c As Range
While Not fini
MacroAleatoire
Set c = [A1:D4].Find(24, LookIn:=xlValues)
If Not c Is Nothing Then fini = True
Wend
End Sub
J' aimerais aussi modifier cette macro de manière à ce que, si après avoir été "relancé" automatiquement 300 fois, le chiffre 24 n' est toujours pas apparu, alors la macro recherchera un autre chiffre que 24.
Une fois que cet autre chiffre donné sera trouvé, la macro enregistrera, et fermera également le fichier.
Re : Recherche d' un chiffre, si non trouvé, la macro se relance
Bonjour,
ta logique est illogique...
Si tu veux une série de 10 nombres aléatoires avec au moins 1 fois 24, tires tes 10 nombres et s'il est absent tu colles le 24 au hasard sur un des 10.
Quelle sera la différence ? Que tu fasses 1 ou 300 tirages, les autres nombres ne seront pas plus aléatoires.
Re : Recherche d' un chiffre, si non trouvé, la macro se relance
Bonjour,
C'est tout autant aléatoire, bref...
La boucle :
Code:
Sub MacroRecherche()
Dim fini As Boolean, c As Range, cpt as long
While Not fini
MacroAleatoire
Set c = [A1:D4].Find(24, LookIn:=xlValues)
cpt= cpt+1
If Not c Is Nothing or cpt=300 Then fini = True
Wend
End Sub
Et comme autre nombre prendre celui en A1 par exemple.
Re : Recherche d' un chiffre, si non trouvé, la macro se relance
Reboujour,
Merci Eric. La macro marche bien, après avoir été relancé 300 fois sans résultat elle s' arrête comme voulu. Serait-il possible d' ajouter dans la macro que si il n' y a aucun résultat, alors au lieu de rechercher 24, la macro recherchera 30 par exemple, et si il y a un résultat, alors elle s' arrêtera et enregistrera le fichier ?
Re : Recherche d' un chiffre, si non trouvé, la macro se relance
Tu peux faire comme ça :
Code:
Sub MacroRecherche()
Dim fini As Boolean, c As Range, cpt as long, nb as long
nb=24
While Not fini
MacroAleatoire
Set c = [A1:D4].Find(nb, LookIn:=xlValues)
cpt= cpt+1
if ctpt=300 then nb=30
If Not c Is Nothing or cpt=600 Then fini = True
Wend
End Sub
Re : Recherche d' un chiffre, si non trouvé, la macro se relance
Re,
Merci.
J' ai essayé ça, mais ça ne marche pas :
Code:
Sub MacroRecherche()
Dim fini As Boolean, c As Range, cpt As Long
While Not fini
MacroAleatoire
Set c = [AB2:AB246].Find(24, LookIn:=xlValues)
cpt = cpt + 1
If Not c Is Nothing Or cpt = 300 Then Macro1= True
Wend
End Sub
Si au bout de 300 relances, aucun résultat, alors la macro lance une autre macro.
J' ai remplacé "fini" par "macro1"