Recherche d' un chiffre, si non trouvé, la macro se relance

Henriett

XLDnaute Occasionnel
Bonjour,

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.

Cordialement,
 

Pièces jointes

  • Classeur1.xls
    29.5 KB · Affichages: 68
  • Classeur1.xls
    29.5 KB · Affichages: 71
  • Classeur1.xls
    29.5 KB · Affichages: 76

eriiic

XLDnaute Barbatruc
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
 

job75

XLDnaute Barbatruc
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
A+
 

Pièces jointes

  • Recherche nombre aléatoire(1).xls
    42 KB · Affichages: 62

Si...

XLDnaute Barbatruc
Re : Recherche d' un chiffre, si non trouvé, la macro se relance

salut

Si... tu veux qu'une cellule soit égale à 24, tu peux essayer (sans boucle)
Code:
Sub MacroAleatoire()
 Range("A1:D4").ClearContents
 Range("A1:D4").FormulaR1C1 = "=RANDBETWEEN(1,500)"
 Range("A1:D4").Value = Range("A1:D4").Value
 Cells(Int(Rnd * 3 + 1), Int(Rnd * 4 + 1)) = 24
End Sub
 

Henriett

XLDnaute Occasionnel
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 = [A1:D4].Find(24, LookIn:=xlValues) Feuil1
If Not c Is Nothing Then fini = True
Wend
End Sub
 

Henriett

XLDnaute Occasionnel
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.
 

eriiic

XLDnaute Barbatruc
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.

Déjà proposé au post 5 par Si...

eric
 

eriiic

XLDnaute Barbatruc
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.

eric
 

Henriett

XLDnaute Occasionnel
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 ?
 

eriiic

XLDnaute Barbatruc
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
eric
 

Henriett

XLDnaute Occasionnel
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"
 

Discussions similaires

Réponses
7
Affichages
566

Statistiques des forums

Discussions
312 379
Messages
2 087 761
Membres
103 661
dernier inscrit
fcleves