Tableaux aléatoires

Bonjour à vous tous !!

Je viens chercher de l'aide car j'ai un projet à faire sur VBA mais je n'ai jamais utilisé cette technique pour la programmation et je vous avoue que je suis un peu perdu.

Je vous ai mis l'énoncé en pièces jointes.

J'ai bien réussi à faire la première partie en créant ma Userform ainsi que mon bouton démarré. De plus j'ai aussi validé par défaut le groupe-fixe, et vérifié que l'utilisateur entrait bien une valeur numérique.

Mais c'est a ce moment là que les choses se compliquent je ne vois pas comment remplir les tableaux de la seconde partie, en effet ceux ci doivent se remplir en fonction du nombre de groupes précédemment entré...

C'est la partie pour remplir aléatoirement les cases en fonction du tp que je ne comprends pas ...

Merci de votre aide, j'espère que vous allez me donner envie de continuer à utiliser VBA parce que la je commence à être dépité..

Bonjour Pierre, bonjour le forum,

T'es gonflé toi !Tu envoies carrément ton devoir au lieu d'envoyer ton fichier avec ce que tu prétends avoir déjà fait. Attends je vais regarder dans un miroir si par hasard il n'y aurait pas écrit pigeon sur mon front...

Effectivement celui-ci n'était pas joint autant pour moi ...

Bonjour,

ce classeur ne fonctionne pas.

Impossible de lancer le USF à partir du bouton. (pas de réaction)

Impossible de supprimer le bouton (plante Excel)

Présence d'"ectoplasme" de boutons présents dans la fenêtre des objets de la feuille.

Remède préconisé :

Ouvrir un nouveau classeur et y faire glisser le USF

Dans la Feuille1 insérer un bouton "ActiveX" pour lancer le USF

- La propriété coché du CheckBox ne se détermine pas avant de lancer l'USF mais dans sa propriété Value de la fenêtre de propriété.

Il faut déjà charger le nombre saisi dans une variable avant de construire une macro, mais une macro unique pour réaliser 3 tableaux différents dans 3 feuilles différentes là c'est trop fort pour moi !

[Edit] : Je pense que la macro unique ne considère que la mise en forme. l'enregistreur de macro te donnera le code pour le quadrillage.

Il faudra d'abord saisir les entêtes de ligne et de colonne dans chaque feuille en fonction de ta variable nombre.

Ensuite dans chaque feuille dans le UsedRange appliquer le format enregistré.

Le fichier joint réalise à ma manière ce qui est demandé, après... Il est pas prouvé que tu ne doives pas adapter à ce que tu comprends...

Ensuite pour le tirage aléatoire... [Edit] Pfui...! C'est pas de la macro de pédé ! Hein... T'es sur que c'est un TP pour débutant ?

A+

17projet-vg.xlsm (29.22 Ko)

Bonsoir,

Oui voilà c'est ça... Je comprend pas pourtant le miens s'ouvre bien..

Ton fichier est très intéressant, je ne connaissais pas la combine pour que rien ne s'affiche lorsque l'on tape sur des lettres.. Pour ma part j'avais juste créé une alerte "veuillez entrer une valeur numérique" si l'utilisateur entre des lettres.

Pour la suite je pense partir sur une fonction random par colonne, puis éviter les doublons dans les lignes.

Le premier tableau semble assez simple c'est une suite ou quelque chose du genre...

Groupe 1 : Séance 1 TP1 Groupe 2 : Séance 1 TP2 Groupe 3 : Séance 1 TP3

Groupe 1 : Séance 2 TP2 Groupe 2 : Séance 2 TP3 Groupe 3 : Séance 1 TP4

Groupe 1 : Séance 3 TP3 Groupe 2 : Séance 3 TP4 Groupe 3 : Séance 1 TP5

Et ainsi de suite on doit donc aisément trouver une logique à cela.

Enfin pour le tout dernier tableau étudiants je vais partir sur quelque chose du genre : je remplis tout les tp1 aléatoirement, puis tout les tp2 et ainsi de suite.

Il faut encore là veiller aux doublons entre lignes et colonnes mais je ne sais pas trop comment vérifier ca.

Nous avons commencés l'algorithmique il y a quelques semaines et auparavant rien du tout.. Nous sommes en département éléctrique et c'est bizarre car il n'y a pas forcément de lien mais c'est pour utiliser VBA ... tu comprends mieux ma détresse alors

Bonjour,

Oui le premier tableau est assez simple. En revanche pour les 2 autres tableaux ils sont montés sur la base de "carrés latins" (faire un recherche sur ce terme dans Google et Wikipédia...)

C'est un peu la même mécanique que pour des grilles de sudoku...

Malgré mes recherches je n'ai pas trouvé le moindre embryon de code pour résoudre ça en VBA. J'ai mis quelques intervenants émérites (sur différents forums) pour réfléchir sur ce coup, mais pour l'instant on sèche. Il y a quelques pistes de réflexion en combinant le VBA et des formules Excel, mais ça ne répond pas vraiment à la question : C'est du bricolage.

Tu as aussi vite fait de le faire à la main !

A+

Oui c'est exactement ce à quoi je pensais, les grilles de sudokus, cela semble être grossièrement le même principe. Je vais m'atteler à faire le premier tableau et je vous retiens au courant d'ici peu ! Bonne soirée à vous.

J'ai écrit un bout de code qui fonctionne pour les groupes fixes.

Sub Groupes_Fixes()
'
' Groupes_Fixes Macro
'
Dim Nb_TP As Integer
Dim Num_TP As Integer

Nb_TP = Application.WorksheetFunction.CountA(Range("A:A"))

For i = 1 To Nb_TP
    For j = 1 To Nb_TP
        If i + j - 1 > Nb_TP Then Num_TP = ((i + j - 1) / Nb_TP - Int((i + j - 1) / Nb_TP)) * Nb_TP Else Num_TP = i + j - 1
        Cells(i + 1, j + 1).Value = Num_TP
    Next
Next

'
End Sub

Si je lance çà depuis la feuille groupes fixes çà fonctionne parfaitement.

Dans la logique les variables i et j sont incrémentées pour faire avance les lignes puis les colonnes.

La formule est une "bidouille" utilisant la partie entière pour retomber sur le bon numéro de TP !

Bonsoir,

J'ai galéré un bon bout de temps mais je suis arrivé à quelque chose de pas trop mal.

Bon je t'accorde que l'algo est un peu lent surtout avec un nombre de groupes supérieur à 7... (potentiellement plusieurs minutes !)

En fait il faudrait tout programmer en module de classe pour accélérer encore le traitement, mébon...

D'ailleurs il n'est pas recommandé de dépasser 9 car au delà mon paramétrage des itérations est peut-être un peu juste : j'ai utilisé 10^4 et 10^5, en fait il faudrait sans doute un 3ème palier à 10^6...

Les tirages se font ligne par ligne, ce qui évite d'avoir à valider les lignes. Cependant peut-être qu'en faisant les tirages cellule par cellule on arriverait à améliorer le temps de traitement pour les nombres supérieurs à 9.

Sinon tous les problèmes semblent résolus pour les tableaux. Si tu as des problèmes de compréhension... Tu demandes !

Edit : Voici une statistique du temps moyen de traitement (en secondes) selon le choix du nombre (après augmentation du nombre d'itérations à 10^7 !)

stat

A+

12projet-vg1.xlsm (31.62 Ko)

Bonjour,

Galopin je tiens à te remercier car ta feuille est vraiment sensas'. J'ai pu la tester et effectivement c'est bien ce qui était attendu.

J'ai rendu mon projet hier matin et finalement mon prof s'est rendu compte que le travail demandé était bien trop difficile pour notre niveau. J'ai donc rendu la feuille avec seulement le tableau groupe fixe qui se rempli tout seul. J'avais complété le fichier que tu m'avais envoyé.

Même si j'ai rendu mon projet j'ai bien envie de comprendre le fonctionnement de ce que tu m'as envoyé car tout n'est pas très clair pour moi....

Tout d'abord à quoi servent les "%" que tu mets après les lettres parfois ? par exemple "i%" ou "k%" ?

Ensuite tu parles de 10 ^ 4, 10 ^ 5 puis de matrices... Pourquoi ça ?

En faite c'est les commentaires qui manquent :p c'est vrai que pour comprendre le déroulement ca facilite, surtout quand il y a autant de variables inconnues pour moi !

En tout cas ton travail est top, ca ma permis de bien comprendre la première partie que j'ai rendu. Encore merci du temps que tu m'as accordé et de ta patience !!!!

bonsoir,

% dans les déclarations remplace "as Integer"

$ dans les déclarations remplace "as String"

& dans les déclarations remplace " As Long"

(il n'existe pas de symbole pour "As Boolean")

Ce qui permet de faire des déclaration un peu plus compactes...

Private Sub LoadTablo(i%)
Dim c%, tablo, Lig%, NL%, NbEssaie&, MaxiT&, ValideLigne As Boolean

Dans cet exemple i% signifie que la procédure attend un paramètre de type Integer (Le numéro de feuille)

Ce qui permet de savoir en même temps de quel tableau il s'agit,

10 ^ 4 c'est 10 puissance 4 : le nombre d'essais possibles pour une même ligne avant de recommencer tout le tableau...

et Matrice qui est déclarée en tête du module (avec NGrp) est une variable spéciale : un Array.

Un Array est une variable un peu particulière qui contient un "tableau" de valeur. Ici une série de valeur.

Ce type de variable est fondamentale en VBA et permet une programmation puissante...

Si NGrp contient 5 alors la macro InitMatrice contient à chaque appel Les 5 chiffres d'une ligne complète sans doublon.

Bon, cette macro est un algorithme un peu sophistiqué. Il y a d'autres possibilités moins absconse...mais plus longues pour faire la même chose.

La macro TesteLigne (mal nommée...) vérifie que pour chaque élément d'une Matrice(ligne), la colonne correspondante ne contient pas de doublon.

Habituellement j'évite de faire trop de commentaires, je trouve que ça nuit bien souvent à la compréhension...

Le programme commenté en pièce jointe.

Voir ici une conversation sur ce theme : Je n'ai pas encore eu le temps d'analyser la dernière proposition de Ferrand qui est très rapide (instantanée !) même sur des carrés de 15x15 !

A+

8projet-vg1.xlsm (37.89 Ko)
Rechercher des sujets similaires à "tableaux aleatoires"