Accueil Fonctions Calc Menu Basic EDI OOo 1.x EDI OOo 2.x EDI LibO - OOo 3.x Affectation touche Affectation icône Etape par étape Macro débutant Fonctions Basic Dialogues OOo1-2 Dialogues LibO-OOo3 Quelques exemples Exemples dialogue Fonctions perso Définitions Recherche sur site


PROGRAMMATION BASIC. Macro débutant. Loto. Partie 3/10





Accès direct : Loto 1, Loto 2, Loto 3, Loto 4, Loto 5, Loto 6, Loto 7, Loto 8, Loto 9, Loto 10,



Ligne suivante:

oDocument=ThisComponent

Le fichier d'aide dit que ThisComponentadresse le composant actif de manière à ce que ses propriétés puissent être lues et définies. Pas clair. Disons dans notre cas qu'il s'agit du document actif sur lequel nous travaillons.

Ensuite:

oSheet=oDocument.Sheets.getByName("Feuille1")

oSheet est la Feuille1 des feuilles du document actif.

Voila l'indispensable pour débuter. Passons enfin à notre programme de loto.

En début de programme, ajoutons la ligne:

Dim NumBoule as Integer

Nous déclarons une variable nommée NumBoule dont les valeurs peuvent varier (as Integer) de -32768 à +32767, au format nombre entier. Ce qui dans notre cas est plus que suffisant. Si ces limites étaient dépassèes des erreurs seraient générées. Il existe bien d'autres types de formats de variables.

Attention. Les valeurs numériques utilisent le point décimal et non la virgule, même si l'affichage dans le tableur se fait avec des virgules.

Pour trouver un nombre aléatoire, nous nous servons de la fonction Rnd. Cette fonction génère un nombre aléatoire entre 0 et 1, comme par ex: 0,0048 ou 0,78945. Donc on multiplie par 49, on extrait la partie entière avec la fonction Int. Les résultats vont donc varier entre 0 et 48. On ajoute 1 au résultat pour faire varier de 1 à 49. Soit la ligne de macro :

NumBoule=Int(49*Rnd)+1

Cette formule est strictement identique à la formule =ENT(ALEA()*49)+1 que vous auriez écrit dans une cellule de la feuille de calcul. Ensuite écrivons :

oCell=oSheet.getCellByPosition(0,0)

On sélectionne une cellule désignée par (Colonne, Ligne). Ici A1, puis :

oCell.setValue(NumBoule)

On écrit la valeur NumBoule dans la cellule active.

Voici donc notre premier programme exploitable mais avec beaucoup de défauts.

Nota: Certains navigateurs (IE6) autorisent la sélection et le copier / coller de la zone des macros sans pour autant recopier les numéros de ligne. Un petit plus pour certains.

Loto001

  1. Sub Mon_Loto
  2. Dim NumBoule as Integer
  3.    Dim oDocument As Object, oSheet As Object, oCell As Object
  4.    oDocument=ThisComponent
  5.    oSheet=oDocument.Sheets.getByName("Feuille1")
  6.    NumBoule=Int(49*Rnd)+1
  7.    oCell=oSheet.getCellByPosition(0,0)
  8.    oCell.setValue(NumBoule)
  9.    '
  10.    NumBoule=Int(49*Rnd)+1
  11.    oCell=oSheet.getCellByPosition(1,0)
  12.    oCell.setValue(NumBoule)
  13.    '
  14.    NumBoule=Int(49*Rnd)+1
  15.    oCell=oSheet.getCellByPosition(2,0)
  16.    oCell.setValue(NumBoule)
  17. End Sub

Si vous avez bien suivi, vous n'avez aucune difficulté à comprendre ce listing. Ici on se limite à 3 numéros aléatoires qui seront affichés dans les cellules de A1 à C1. On peut bien entendu continuer, mais si on regarde bien, c'est beaucoup d'effort pour pas grand chose, puisqu'une simple formule =ENT(ALEA()*49)+1 dans les cellules concernées aurait suffit.

Notez les lignes 9 et 13. Les symboles apostrophe (équivalent de REM) font que ces lignes ne servent à rien, sauf à aérer le listing.

Vous pouvez demander l'aide par la touche F1. Si votre curseur se trouve sur un mot-clé (Dim par exemple), l'aide ira directement au mot-clé concerné.



 


 

Ce site n'est plus mis à jour. Merci aux nombreux visiteurs depuis 2003. Consultez le Wiki LibreOffice.
   

Le tableur Calc par l'exemple : christianwtd@free.fr
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France License.

  .

Site optimisé pour Firefox

Dernière modification : 29/08/2010 à 18h48


Déjà plusieurs visites sur ce site depuis quelque temps (au moins vous et moi)

Compteur non certifié