Page 1 sur 1

[Calc] Accumulation de résultats de simulation

Publié : 01 avr. 2012 21:08
par alhazred
Bonjour à tous,

Une toute petite macro sans prétention pour répondre à la situation suivante: vous avez composé une feuille qui utilise des fonctions ALEA() ou ALEA.ENTRE.BORNES(x;y) pour simuler un processus aléatoire (par exemple tirage de dés) et donner un résultat. Bien sûr, si on recalcule la feuille (par F9 ou ctrl-maj-F9 ou menu Outils > Contenu des cellules > Recalculer), ce résultat change, et vous aimeriez enregistrer les résultats successifs pour utilisation ultérieure, que vous soyez statisticien ou Maître du Donjon...

Code : Tout sélectionner

Sub Main
	flag=ThisComponent.IsAutomaticCalculationEnabled
	ThisComponent.EnableAutomaticCalculation false
	'le calcul ne se fera que sur commande

	Const result="A1" 'adresse  de la cellule contenant le résultat
	Const col=2 'colonne de stockage, ici colonne C
	Const row=0 'ligne de début de stockage, ici ligne1
	
	theSheet=ThisComponent.sheets.GetByName("Feuille1")
	theResullt=theSheet.GetCellRangeByName(result)
	
	For i=0 To 999 'nombre de résultats à accumuler - 1
		ThisComponent.CalculateAll 'faire une nouvelle simulation
		theSheet.GetCellByPosition(col,row+i).value=theResult.value
		'si le résultat est une chaîne de caractères, utiliser .string à la place de .value		
	Next i

	'Restauration du calcul automatique
	ThisComponent.EnableAutomaticCalculation flag
End Sub
Un exemple d'utilisation: on lance trois dés (normaux, de 1 à 6); on peut s'intéresser au total des points portés (cellule D2), ou bien au nombre de valeurs différentes apparues (E2), ou encore à leur ensemble (sans répétition, H2)
Accumulation.ods