[Calc] Accumulation de résultats de simulation

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 01 mai 2011 01:08
Localisation : Casablanca (Maroc)

[Calc] Accumulation de résultats de simulation

Message 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
(11.98 Kio) Téléchargé 636 fois
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Répondre