Question sur fonction ALEA avec MATRICE

Bonjour,

J'ai une grosse problématique d'utilisation de la fonction alea avec matrice. Attention, c'est un vrai casse tête...

  • je dois choisir un nombre entre 1 et 22 qui représente en faite un numéro de colonne (=ALEA.ENTRE.BORNES(1;22), ça c'est encore simple, mais la suite est plus complexe)
  • dans cette colonne choisie aléatoirement (ayant toute un nombre de ligne différent) il faut choisir aléatoirement un numéro de ligne et récupérer la valeur inscrite dans cette ligne aléatoire, pour cette colonne aléatoire)
  • il faut répéter l'exercice 4 fois pour le choix de colonne (sans que le même numéro de colonne ne soit choisi 2 fois), et 2 fois par colonne pour le choix de chaque ligne (sans que la valeur de chaque ligne n'ait déjà été choisie...).

Le fichier Excel est sans doute plus explicite, avec un exemple donné :

29aide-excel.xlsx (12.17 Ko)

Si vous pouvez m'aider, ce serait vraiment très très sympa.

Thibault

A faire en formules c'est la galère, par macro c'est très simple.

D'accord, mais n'étant pas développeur VBE, je ne sais pas faire de macro...

Pourriez-vous m'aider à faire ça S'il vous plait ?

A Adapter:

Sub toto()
'nous avons 24 colonnes avec des chiffres
'B2 prend aleaentrebornes(2,25)
colonne = Application.WorksheetFunction.RandBetween(2, 25)
Sheets("Alea a créer").Range("B2") = colonne
'on trouve la derniere ligne de la colonne en question
derniere = Sheets("Données").Cells(Rows.Count, colonne).End(xlUp).Row
'on remplit D2 et C2
Sheets("Alea a créer").Range("C2") = Sheets("Données").Cells(Application.WorksheetFunction.RandBetween(1, derniere), colonne)
Sheets("Alea a créer").Range("D2") = Sheets("Données").Cells(Application.WorksheetFunction.RandBetween(1, derniere), colonne)
'tant que C2 = D2 on reremplit D2
While Sheets("Alea a créer").Range("C2") = Sheets("Alea a créer").Range("D2")
    Sheets("Alea a créer").Range("D2") = Sheets("Données").Cells(Application.WorksheetFunction.RandBetween(1, derniere), colonne)
Wend
End Sub

Super, Merci, je vais tester ça

OK, ça fonctionne bien, et j'ai compris comment remplir les colonnes après D.

Merci pour la formation !

Le dernier point maintenant est de remplir toutes les lignes, tant qu'il y a quelques chose d'écrit dans la colonne A.

Je reuppload le fichier Excel avec la Macro pour que ce soit compréhensible.

erci d'avance

Il te suffit de faire une boucle while en testant les cellules cells(i,1) et en incrémentant le i

OK, merci, je vais regarder sur le forum comment on fait ça. C'est un sujet surement déjà traité

Merci

Bon, en fait, ce n'ets pas vraiment résolu car il y a un point très important que je n'ai pas trouvé :

il faut changer de ligne et effectuer le code sur une autre ligne à chaque fois. Faire une boucle ne suffit pas, sinon, la macro change le contenu n fois dans les mêmes cellules et non sur les n lignes du fichier

exemple : il faudrait modifier le B2 la dedans : Sheets("Alea a créer").Range("B2") = colonne

pour qu'il s'effectué en Bi puis Bi+1, etc.

Comment indique-t-on à la macro de changer de ligne et donc qu'il ne s'agit plus de B2, mais de B3, puis B4, etc. ?

Merci d'avance

For i = 1 to 5000
colonne = 1
 Sheets("Alea a créer").Range("B" & i) = colonne
Next i

non, ça ne fonctionne pas.

Je viens de modifer le code ainsi :

Sub tata()

' part de la ligne 2

i = 2

' part de la colonne A

j = 1

' Boucle tant colonne A non vide

Do While Cells(i, j).Value <> ""

' part de la colonne B

j = j + 1

'nous avons 23 colonnes avec des chiffres

'colonne prend aleaentrebornes(2,23)

colonne = Application.WorksheetFunction.RandBetween(2, 23)

' on inscrit le numéro de colonne en (i,j soit ligne 2, colonne 2 au premier passage)

Sheets("Alea a créer").Cells(i, j) = colonne

'on trouve la derniere ligne de la colonne en question

derniere = Sheets("Données").Cells(Rows.Count, colonne).End(xlUp).Row

'on remplit 2C

Sheets("Alea a créer").Cells(i, j + 1) = Sheets("Données").Cells(Application.WorksheetFunction.RandBetween(1, derniere), colonne)

'on remplit 2D

j = j + 1

Sheets("Alea a créer").Cells(i, j + 1) = Sheets("Données").Cells(Application.WorksheetFunction.RandBetween(1, derniere), colonne)

'tant que C2 = D2 on reremplit D2

Do While Sheets("Alea a créer").Cells(i, j + 1) = Sheets("Alea a créer").Cells(i, j)

Sheets("Alea a créer").Cells(i, j + 1) = Sheets("Données").Cells(Application.WorksheetFunction.RandBetween(1, derniere), colonne)

Loop

'on remplit E2

j = j + 1

Sheets("Alea a créer").Cells(i, j + 1) = Sheets("Données").Cells(Application.WorksheetFunction.RandBetween(1, derniere), colonne)

'tant que E2 = D2 ou C2 on reremplit E2

Do While Sheets("Alea a créer").Cells(i, j + 1) = Sheets("Alea a créer").Cells(i, j) Or Sheets("Alea a créer").Cells(i, j + 1) = Sheets("Alea a créer").Cells(i, j - 1)

Sheets("Alea a créer").Cells(i, j + 1) = Sheets("Données").Cells(Application.WorksheetFunction.RandBetween(1, derniere), colonne)

Loop

j = 1

i = i + 1

Loop

End Sub

le problème est que j'ai parfois (1 ligne sur 3) des case vides en colonne C D et E, au lieu d'être rempli, et ce, aléatoirement, comme si le programme se moquait un peu de moi...

Pourquoi ai-je des cases vides ?

Merci


avec le fichier, c'est peut-être plus simple à comprendre

Rechercher des sujets similaires à "question fonction alea matrice"