Fonction Random selon critères

pingouinal

XLDnaute Occasionnel
Bonjour,

J'ai un fichier qui montre des noms dans une colonne A et des pays dans une colonne B. J'ai besoin de tirer au sort un nom. Avec VBA, j'ai utilisé randomize et ça marche très bien. Par contre lorsque que je veux tirer au sort un nom en fonction d'un pays, je bloque complètement sur la méthode à utiliser.

Est-il possible d'inclure un ou plusieurs critères dans la macro Randomize?
J'ai esssayer en passant par des filtres mais je n'ai pas réussi car la sélection randomize ne tient pas compte de ce filtre, elle choisit dans toute la colonne A.

Je ne sais pas si c'est très clair, je peux fournir un échantillon (vu la taille du fichier original, ça ne passera pas ^^) si besoin est.

D'avance merci pour votre aide.
 

job75

XLDnaute Barbatruc
Re : Fonction Random selon critères

Bonjour pingouinal,

La propriété Name des CheckBox est le nom du pays mais effectivement les espaces ne sont pas autorisés, il faut écrire pour le Name Corée_du_sud.

Cela ne pose pas de problème véritable, il suffit de modifier un peu le code :

Code:
[COLOR="Red"]Dim Nom$[/COLOR]
'---------
Set Hasard_Pays = ActiveSheet.Range("C" & MyValue)
[COLOR="Red"]Nom = Replace(Hasard_Pays.Value, " ", "_")[/COLOR]
If Controls([COLOR="Red"]Nom[/COLOR]) = False Then GoTo 1
MsgBox "Le fichier tiré au sort est le : " & Hasard_Pays.Offset(0, -1)

A+
 

Gruick

XLDnaute Accro
Re : Fonction Random selon critères

Bonjour,

La nuit porte conseil, j'ai rêvé en italique, ce qui m'a donné une idée.
Sans changer grand chose à ma première macro, j'ai simplement décidé de mettre en italique les pays choisis pour le tirage au sort, et de faire le test là dessus, ensuite de remettre tout "normal".
Cela évite aussi les problèmes de noms composés.

Gruick
 

Pièces jointes

  • HasardG+.xls.zip
    16.4 KB · Affichages: 32

pingouinal

XLDnaute Occasionnel
Re : Fonction Random selon critères

Bonsoir le forum,

J'ai réussi à faire mon tirage au sort selon deux critères, mais j'ai encore un problème : si aucune réponse ne peut être trouvée, la macro tourne en boucle à l'infini. Je voudrais avec un message qui me dit qu'aucun résultat ne peut être trouvé et que la macro s'arrête.

Je mets ci-dessous le morceau de code utilisé :

Randomize
1 MyValue = Int(((Range("B65536").End(xlUp).Row) - 11) * Rnd) + 12

Set Hasard_G = Worksheets("Data").Range("E" & MyValue)
If Controls(Hasard_G) = False Then GoTo 1
Set Hasard_P = Worksheets("Data").Range("N" & MyValue)
If Controls(Hasard_P) = False Then GoTo 1

D'avance merci à tous ceux qui pourront m'aider...
 

pingouinal

XLDnaute Occasionnel
Re : Fonction Random selon critères

Re bonjour tout le monde,

Tant que j'y suis, j'aimerais faire une autre modification à cette macro.
Le résultat du tirage au sort apparaît dans un userform et j'aimerais ajouter un bouton qui me donne un autre résultat avec les mêmes critères (dans l'optique où le premier résultat ne me convienne pas).
Je bloque sur deux points :

- je n'arrive pas à relancer la fonction random depuis le userform final, je dois le fermer et relancer la fonction depuis le userform où je sélectionne les critères
- quand je relance la fonction random (idéalement sans revenir par le userform de critères), j'aimerais éviter les doublons dans les propositions. Mais comme c'est une fonction random, je ne sais pas si on peut tenir compte des résultats déjà proposés et les enlever de la recherche suivante.

Voilà, j'espère avoir été clair dans mes explication et je vous remercie par avance pour votre aide.
 

pingouinal

XLDnaute Occasionnel
Re : Fonction Random selon critères

Bonsoir le forum,

Je bloque toujours sur cette fonction random qui tourne en boucle quand rien ne correspond aux critères choisis.

Est-ce que quelqu'un aurait une idée de comment la stopper si elle ne trouve rien?

D'avance merci.
 

jeanpierre

Nous a quitté
Repose en paix
Re : Fonction Random selon critères

Bonsoir pingouinal et les amis du fil,

Si ta macro boucle, c'est qu'il manque un test quelque par.

Ou alors un Do Loop infernal....

Sans voir ta macro et ce qu'elle doit faire, pas facile de te répondre.

Un petit fichier exemple et représentatif de ton souci, en t'assurant qu'il reproduit bien le même problème serait idéal pour te répondre.

Bonne soirée.

Jean-Pierre
 

pingouinal

XLDnaute Occasionnel
Re : Fonction Random selon critères

Bonsoir Jean-Pierre,

Voici un exemple de fichier comme celui que j'utilise. L'original faisant 5 Mo, je l'ai beaucoup allégé, mais le problème reste le même, à savoir si je choisis des critères que ne trouvent pas de résultat (type A en France par exemple) la macro va éternellement recommencer.

D'avance merci pour ton aide.
 

Pièces jointes

  • Classeur2.zip
    16.8 KB · Affichages: 37
  • Classeur2.zip
    16.8 KB · Affichages: 31
  • Classeur2.zip
    16.8 KB · Affichages: 34

pingouinal

XLDnaute Occasionnel
Re : Fonction Random selon critères

Bonjour Jean-Pierre et le forum,

Pour régler mon problème (le premier au moins ^_^') j'ai penser dire à la macro que si au bout de X tentatives elle n'a rien trouvé qui correspondait aux critères sélectionnés, elle m'affiche un message disant qu'il n'y a pas de solution possible.
Mais je ne sais pas comment écrire cela dans VBA. Est-ce au moins réalisable?

D'avance merci à ceux qui prendront le temps de m'aider.
 

pingouinal

XLDnaute Occasionnel
Re : Fonction Random selon critères

Bonsoir le forum,

Vu que ma première tentative n'avait pas l'air réalisable, j'ai pensé à autre chose, mais j'aurais besoin de votre aide.

Je voudrais que sur le userform qui s'ouvre (celui dans lequel j'ai les choix de critères) une textbox m'affiche le nombre de résultats possibles en fonction des critères sélectionnés (par exemple dans le fichier que j'ai attaché un peu plus haut si je choisis type B et pays Japon, il m'affiche 3).
L'idéal serait bien sûr que l'affichage de cette textbox s'actualise directement à chaque changement de critères.
Et si le nombre de résultat possible est 0, bloquer le bouton choisir.

D'avance merci à tous ceux qui pourront m'aider.
 

job75

XLDnaute Barbatruc
Re : Fonction Random selon critères

Bonsoir pingouinal, le fil,

Je suis tout à fait désolé pingouinal, mais je n'ai jamais vu passer vos derniers messages, sinon bien sûr j'aurais répondu ! Dans ce cas il aurait fallu me prévenir par message privé...

Quand on clique sur le bouton "Tirer au sort "de l'USF (CommandButton1), la macro boucle quand aucune CheckBox n'est cochée.

J'ai remédié à cette situation en étudiant au préalable les valeurs de toutes les CheckBoxes.

Fichier joint.

Bonne nuit.
 

Pièces jointes

  • Test.xls
    46.5 KB · Affichages: 58
  • Test.xls
    46.5 KB · Affichages: 57
  • Test.xls
    46.5 KB · Affichages: 58
Dernière édition:

job75

XLDnaute Barbatruc
Re : Fonction Random selon critères

Bonjour pingouinal, le fil, le forum,

En rédigeant mon précédent messages, je n'avais pas vu pingouinal que vous aviez envoyé un nouveau fichier et j'utilisais l'ancien...

Voici donc le nouveau complété, en tenant compte de vos demandes.

1) Les tirages au sort se font dans la macro tirage_au_sort du Module1, car elle est est appelée en cliquant sur un bouton dans chaque USF.

Si un résultat, c'est à dire une ligne de la feuille, n'est pas trouvée au bout de 2000 tirages (c'est rapide), la macro s'arrête avec un message. La variable Public erreur est mémorisée pour servir dans l'USF1.

2) Le code de l'USF2 est un peu plus difficile à comprendre. En effet en cliquant sur le bouton Autre nom, on crée une collection (déclarée Static pour être mémorisée) des noms trouvés sans doublons.

La macro tirage_au-sort est appelée au maximum 100 fois à chaque clic sur le bouton Autre nom.

A+
 

Pièces jointes

  • pingouinal.zip
    19 KB · Affichages: 15
  • pingouinal.zip
    19 KB · Affichages: 18
  • pingouinal.zip
    19 KB · Affichages: 13
Dernière édition:

pingouinal

XLDnaute Occasionnel
Re : Fonction Random selon critères

Bonjour Job75,

Ce n'est pas la peine de s'excuser pour le retard dans la réponse. C'est un forum, pas un service payant. :D
En tous cas, merci pour le fichier, je viens de le tester rapidement (je vérifierai plus en profondeur après le boulot) et ça a l'air de fonctionner très très bien à la fois si les critères ne trouvent pas de résultat et aussi si je veux un autre résultat sans revenir au premier userform avec en plus le message disant quand tous les choix ont été proposés.

Merci beaucoup pour cela. :)

Par contre il me reste une petite question vis à vis de mon message d'hier soir.
C'est maintenant optionnel mais je me demandais si il était possible d'ajouter cette fameuse textbox (ou autre chose) dans mon premier userform me disant le nombre de résultats possibles en fonction des critères sélectionnés.
Je pense que ça doit être réalisable, mais je ne vois pas du tout par où commencer. Donc je serais preneur d'un début de piste.

Encore merci pour cette aide précieuse.
 

job75

XLDnaute Barbatruc
Re : Fonction Random selon critères

Re pingouinal,

Effectivement j'avais oublié cette demande performante et facile à satisfaire : il suffit de parcourir la colonne B et sa voisine C en testant les contrôles correspondants.

La macro NombreResu est dans l'USF1, elle est déclanchée par tout clic sur une CheckBox, ainsi qu'à l'ouverture de l'USF1.

Le bouton Résultats est activé ou désactivé suivant le résultat affiché en TextBox1.

Du coup, dans l'USF2 c'est bien plus simple pour arrêter la recherche des nouveaux noms.

J'en ai profité pour apporter une autre amélioration : si on clique sur la croix pour fermer l'USF2, l'USF1 est unloadé, ce qui n'était pas le cas avant (il restait masqué).

Edit : compte tenu de la désactivation du bouton Résultats, j'ai supprimé le test des 2000 tirages et la variable erreur...

A+
 

Pièces jointes

  • pingouinal.zip
    19 KB · Affichages: 19
  • pingouinal.zip
    19 KB · Affichages: 13
  • pingouinal.zip
    19 KB · Affichages: 13
Dernière édition:

Discussions similaires

Réponses
40
Affichages
1 K
M
Réponses
6
Affichages
508

Statistiques des forums

Discussions
312 612
Messages
2 090 230
Membres
104 453
dernier inscrit
benjiii88