Lancer la meme macro mais avec condition differente

Bonsoir à tous.

Une petite aide serai la bienvenue

Comme dit dans le sujet je voudrais lancer une macro pour générer des nombres àleatoire qui vont de 1 à 67.

pour ceci j'utilise ce code

Private Sub generer1_Click()

Dim plage As Range, cel As Range, alea As Double

Set plage = Range("C6:G6")

plage.Value = ""

If plage.Count > 67 Then Exit Sub

Randomize

For Each cel In plage

1 alea = WorksheetFunction.RandBetween(1, 67)

If Application.CountIf(plage, alea) Then GoTo 1 Else cel = alea

Next

là ou ça devient ennuyant c'est pour les conditions

j'ai ajouté ce code

If [J6] <> [D6-C6] Then

Call generer1_Click

End If

L'ennuie c'est que je dois le répéter plusieurs fois: 8 fois au total avec des conditions différentes.

Au bout de 3 fois excel m'écris erreur 28 pile insuffisante.

Est ce que j'en demande trop à Excell ou le code est mal écris et dans ce cas la y'aurait il moyen de le simplifier

Merci pour votre aide

Bonsoir,

Et ce code tu la ajouté ou?

tout va ensemble. en clair juste apres " next "du premier code j'y ajoute le deuxieme et puis apres "end if " je le reecris mais avec des condition differentes

Et tu n'as pas l'impression que ton code s'appelle lui-même indefinement ?

j'avais pas pensé à ca. comment ca peux se resoudre. mais d'un autre coté quand je marque ce supplément de code avec les conditions qu'une seule fois ca marche tres bien.

je peux même l'écrire 2 fois de suite

c'est à partir de la troisième qu'il me marque l'erreur.

Ben a chaque appel ta pile d'appel gandit ..et au bout d'un moment cela deborde;)

est ce qu'il une solution pour éviter que ça déborde

Ben tu fais en sorte que le code ne s'auto-appelle pas..

Crée une procedure separée..

Verifie aussi tes conditions de lancement sois sur de ne pas partir dans une boucle infinie...

je sais pas comment faire ca

c'est un peu pour ca que je suis la

Ben tu met tout ton code initial dans une nouvelle procedure

sub Maprocedure
...ton cod3
End sub

Et tu appelle cette pocedure dans ta procedur initialz

Sub generer1_Click()

While [J6] <> [D6-C6] 
Maprocedure
Wend
End sub

ok je vais tester ca

merci de ton aide

non ca fonctionne toujours pas

je tecris le code modifié je me suis peut etre planté quelque par

Private Sub generer1_Click()

Dim plage As Range, cel As Range, alea As Double

Set plage = Range("C6:G6")

plage.Value = ""

If plage.Count > 50 Then Exit Sub

Randomize

For Each cel In plage

1 alea = WorksheetFunction.RandBetween(1, 50)

If Application.CountIf(plage, alea) Then GoTo 1 Else cel = alea

Next

If [J6] <> [D6-C6] Then

Call generer1_Click

End If

End Sub

Private Sub generer2_Click()

While [K6] <> [E6-C6]

Call generer2_Click

Wend

End Sub

Bonjour kinny1250, (pierre.jy)

kinny1250

à mon avis ce petit bout de code est train de prendre un chemin beaucoup trop compliqué !

La "récursivité" est à utiliser avec grande précaution (surtout avec des langages interprétés - comme Excel)...

Même si le traitement récursif est souvent plus proche de la pensée humaine, un ordinateur n'est pas encore capable de penser aussi intuitivement que nous (fort heureusement d'ailleurs )

il faut donc quand même penser (un peu) ordinateur et lui donner un moyen de se rendre compte qu'(il tourne en rond sinon

pierre.jy a écrit :

et au bout d'un moment cela deborde


Venons en maintenant à ton sujet :

Décris ce que tu cherches à faire (en terme humain)

Je veux écrire des nombres aléatoire dans les cellules de .. à .. et vérifier que blabla et etc...

ou mieux encore

met un bout de fichier exemple en PJ

(cf. https://forum.excel-pratique.com/annonces/explications-et-regles-a-respecter-t13.html point 6)

Merci pour vos réponse et désolé de ne pas répondre plutôt.

Si je n'ai pas mis de fichier joint c'est que j'en suis seulement à faire des essais.

Je vais donc préparer mon fichier et le mettrai avec des expliquation plus claire.

Merci à tous et à bientôt.

comme dit plutôt, j'ai commencer à faire ma petite application. je la joins en pièce jointe

voila comme elle se présente: Pour info il s'agit de générer des cartes pour un jeu ( clash royal pour être plus précis)

En feuille 2 : les cartes en ma possession avec un numéro qu'il leur est attribué ainsi que leur point de capacité

En feuille 1 : les resultat du générateur

je dois générer des cartes en fonction de la valeur de C14.

Lorsque celle si est trouvée une deuxième condition ( valeur F14 supérieure a F15) entre en jeu mais elle devra prendre en compte la première

Lorsque les deux premières sont trouvées une troisième condition (valeur G14 supérieure a G15 )intervient est devra prendre en compte les 2 premières

En clair à claque nouvelle condition les précédente doivent être pris en compte. si vous voulez essayez changer les valeur de F16 et G16 a Zéro.

En espérant avoir été clair. Merci pour votre aide est surtout pour votre patiente

Merci pour votre aide et surtout pour votre patiente

11clash-royal-1.xlsm (39.68 Ko)
kinny1250 a écrit :

non ca fonctionne toujours pas

je tecris le code modifié je me suis peut etre planté quelque par

Private Sub generer1_Click()

Dim plage As Range, cel As Range, alea As Double

Set plage = Range("C6:G6")

plage.Value = ""

If plage.Count > 50 Then Exit Sub

Randomize

For Each cel In plage

1 alea = WorksheetFunction.RandBetween(1, 50)

If Application.CountIf(plage, alea) Then GoTo 1 Else cel = alea

Next

If [J6] <> [D6-C6] Then

Call generer1_Click

End If

End Sub

Private Sub generer2_Click()

While [K6] <> [E6-C6]

Call generer2_Click

Wend

End Sub

Bonsoir,

Ben oui tu t'est planté ... ta procedure Gener2_Click s'appelle toujours elle même ... abandonne cette idée de récursivité..!!!

Bonjour le fil

En ce qui me concerne, je pose l'éponge.

La réalisation devient trop mathématique pour moi. La programmation des jeux (ou solveur dans ce genre) est beaucoup plus compliqué que ce que tu as l'air d'imaginer...

Désolé pour l'abandon et bon courage !

Salut Kinny,

Salut l'équipe,

à défaut de savoir si ma macro ira au bout de ton calcul, la combinaison de tes conditions étant un facteur que je maîtrise pas, voici un début de solution.

J'ai évidemment mis sous commentaires les conditions qui, dans l'état actuel de ton fichier ne seraient jamais réalisées, le comparateur en ligne 15 étant déjà à zéro...

Par prudence, j'ai mis un compteur iStop qui provoque la sortie de boucle si aucune solution n'était trouvée après 30.000 essais!!

Do
    Range("A5:A12").ClearContents
    iLig = 4
    While [A12] = ""
        alea = Int(Rnd * 53) + 1
        If Not Application.CountIf(plage, alea) Then
            iLig = iLig + 1
            Cells(iLig, 1) = alea
        End If
    Wend
    '
    iOK = 1
    If [c14] <= [3.74] Or [c14] >= [4.25] Then iOK = 0
    If [F14] < [f15] Then iOK = 0
    If [G14] < [G15] Then iOK = 0
    'If [J14] < [J15] Then iOK = 0
    'If [K14] < [K15] Then iOK = 0
    'If [L14] < [L15] Then iOK = 0
    'If [Q14] < [G15] Then iOK = 0
    'If [R14] < [R15] Then iOK = 0
    'If [S14] < [S15] Then iOK = 0
    'If [U14] < [U15] Then iOK = 0
    iStop = iStop + 1
Loop Until iOK = 1 Or iStop = 30000

A toi à adapter tout ça!

A+

13clashroyal.xlsm (41.20 Ko)

Merci beaucoup pour votre temps.

Je testerai ce code ce soir.

Est ferai un retour très vite.

Encore un énorme merci

ça marche super sans rien modifier ni adapter.

merci à tous pour votre aide

Rechercher des sujets similaires à "lancer meme macro condition differente"