XL 2013 Génération de carrés latins incomplets

Brain Box

XLDnaute Nouveau
Bonsoir à tous les membres du forum ! :)

Je viens questionner le savoir de la communauté Excel, car je dois bien avouer que mon objectif est trop élevé pour mon humble niveau.

Je vous explique mon problème : je souhaiterais réaliser des carrés latins incomplets équilibrés via macro VBA.
Pour faire simple, le carré latin est un tableau de n lignes et n colonnes, dans lequel un chiffre ne peut être présent qu'une seule fois par ligne/colonne, à l'instar d'un jeu de sudoku ! Les chiffres sont tirés dans un ordre aléatoire pour chaque carré latin, sans doublon donc.

Si la création d'un carré latin complet sans doublons est déjà un exercice en soit, ma demande porte sur la création d'une macro permettant de construire des carrés "incomplets", c'est à dire que chaque ligne ne contiendra que x chiffres parmi l'ensemble de l'intervalle du carré !

Un exemple : un carré latin d'ordre 3 complet donne -->
123
231
312

Un carré latin incomplet avec 2 sélections parmi 3 donne par exemple -->
12
23
31

J'espère que c'est clair pour vous :)

Je vous joins un fichier Excel où vous pourrez trouver les quelques broutilles que j'ai commencé à coder, mais je bloque à construire un carré complet alors de là à faire un incomplet... Vous me suivez !
Etant un peu novice en VBA, je me suis inspiré de bout de codes piochés de-ci de-là sur Internet (dont ce forum évidemment :p), vous êtes bien sur libres de tout effacer si cela vous arrange !
Egalement, et je ne sais pas si cela est possible, je préférerai une programmation procédurale plutôt qu'orientée objet, car je ne maîtrise absolument pas l'orientée objet et si jamais je veux modifier à la marge la macro, ca va être compliqué...

Merci à tous !
 

Pièces jointes

  • Fichier excel.xls
    33.5 KB · Affichages: 50
  • Fichier excel.xls
    33.5 KB · Affichages: 57

Dranreb

XLDnaute Barbatruc
Re : Génération de carrés latins incomplets

Bonjour.

Bon ben ce sera (un tout petit peu) orienté objet quand même.
Il faut que vous intégriez la notion. Parce que lorsque vous dialoguez avec Excel c'est toujours via des objets.
Une expression objet ça ne doit pas vous faire peur: ça n'est finalement qu'un pointeur, c'est à dire une variable contenant une adresse, laquelle pointe vers la structure des données d'un exemplaire d'un objet d'un certain type.

Je ne me suis pas encore occupé des valeurs à omettre. Il me faudrait un peu plus de règles à ce sujet.
 

Pièces jointes

  • CarréLatinBrainBox.xls
    67.5 KB · Affichages: 60

Brain Box

XLDnaute Nouveau
Re : Génération de carrés latins incomplets

Bonjour Dranreb !

Je suis fasciné par la facilité avec laquelle tu as résolu le problème du carré latin complet ! Je viens de regarder le code quelques minutes, je dois bien avouer que je suis complètement dépassé par ce que tu as écrit !
Je n'ai rien contre la programmation orientée objet ceci dit, mais puisque j'apprends le VBA "sur le tas" comme on dit, c'est encore un peu nébuleux pour moi pour le moment.

Concernant les valeurs à omettre, de quelles précisions as-tu besoin ?
Je vais essayer d'expliquer rapidement et simplement ma démarche : l'idée du carré latin dans le cadre d'expérimentations est de permettre de réaliser des tests dans un ordre aléatoire pour réduire les biais liés à l'ordre des tests. Cependant, lorsque les carrés ont un ordre trop élevé, il est soit coûteux soit chronophage de faire faire l'ensemble des tests. On cherche alors des carrés dits "incomplets", mais néanmoins équilibrés, pour réduire le nombre de tests par individu. En d'autres termes, on peut aussi parler de "plan d'expérience".

Pour pouvoir construire des carrés latins incomplets, il est nécessaire de disposer de plusieurs informations :
- Tout d'abord l'ordre, c'est à dire l'intervalle dans lequel le nombre aléatoire devra être tiré ;
- Ensuite le nombre de "blocs", qui sont une unité de mesure, et qui se traduisent concrètement dans Excel par le nombre de lignes (exemple : une ligne = 1 individu)
- Puis le nombre de solutions testées au sein de l'intervalle (exemple : 3 parmi 4)
- Enfin, pour garantir un carré "équilibré", toutes les valeurs au sein de l'intervalle doivent être tirées le même nombre de fois au global, réparties entre les différents blocs

Pour revenir à mon exemple donné plus haut :
1) J'ai un carré d'ordre 3 --> Le tirage aléatoire sort un chiffre compris en tre 1 et 3
2) Je dispose de 3 blocs (car le nombre de blocs doit être supérieur ou égal à l'ordre du carré)
3) Je souhaite tester 2 hypothèses parmi les trois sur chaque bloc
4) Le tirage doit faire ressortir une utilisation équilibrée de chacune des valeurs de mon intervalle

Résultat :
12
31
23
--> Chaque valeur apparaît le même nombre de fois, il n'y a pas de doublons en lignes ou en colonnes, l'ordre d'apparition est aléatoire.
 

Discussions similaires

Réponses
15
Affichages
773
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch