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 8/10





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


Ca y est , vous avez digéré la méthode de tri ? Il y en a d'autres... Il y en a même une intégrée faisant appel aux fonctions API. Il s'agit de la fonction com.sun.star.table.TableOrientation.ROWS (Rows pour lignes).

Je suppose que vous vous demandez si des échanges ont bien eu lieu. Comment le savoir ? Soit en suivant les variables en mode étape par étape ou peut-être plus simplement en affichant le nombre d'échanges effectués en fin de programme. C'est ce que nous allons faire en utilisant la fonction MsgBox() qui va faire apparaître une boite simple avec les informations que nous aurons choisies.

Donc, en reprenant notre listing précédent, nous allons ajouter quelques instructions. Entre les lignes 3 et 4 :

Dim Txt as String
Dim NmbEchanges as Integer

String c'est pour désigner une chaine de caractères, donc du texte.

Entre les lignes 50 et 51, entrons l'instruction de comptage:

NmbEchanges= NmbEchanges + 1

A chaque échange, le compteur sera incrémenté de 1. Et enfin, il va falloir entrer l'instruction de résultat. L'idéal est de n'afficher ce résultat que si au moins un échange a été effectué.

A quel endroit insérer ces instructions ? 2 possibilités : à la fin du sous-programme Tirage, ou à la fin du programme lui-même, juste avant l'instruction Exit Sub (ligne 23). C'est la solution que nous choisirons. Nous insérons donc :

If NmbEchanges>0 Then
   Txt = NmbEchanges & " échanges effectués."
   MsgBox(Txt)
Endif

Explications : Si le nombre d'échanges est supérieur (>) à zéro, alors on affiche le résultat. On prépare le texte dans la variable Txt, on inscrit le nombre d'échanges et on ajoute un texte de compréhension. Enfin la fonction MsgBox affiche le résultat.

Notez le rôle du symbole &. Il n'additionne pas comme le symbole +, mais ajoute à la suite.

 

Vous l'avez peut-être constaté, une curiosité du Basic OpenOffice.org. On mélange les genres sans trop de soucis. Ici on ajoute une variable Integer (NmbEchanges) et une variable String ("échanges effectués"). C'est normalement interdit.

Voici donc notre listing à nouveau modifié.

Conseil : Sauvegardez vos différents listing avec de nouveaux noms à chaque modification des listing présentés ici.

Loto006

  1. Sub Mon_Loto
  2.    Dim Lig as integer, Col as Integer
  3.    Dim i as Integer, a as Integer, OK as Boolean, Echange as Boolean, Provisoire as Integer
  4.    Dim Txt as String
  5.    Dim NmbEchanges as Integer
  6.    Dim NumBoule(1 to 10) as Integer
  7.    Dim oDocument As Object, oSheet As Object, oCell As Object
  8.    '
  9.    oDocument = ThisComponent
  10.    oSheet = oDocument.Sheets.getByName("Feuille1")
  11.    '
  12.    i = 0
  13.    Do
  14.       i = i + 1
  15.       Gosub Tirage
  16.    Loop While i10
  17.    Gosub Tri
  18.    ' Ecriture
  19.    Lig=0:i=0
  20.    For Col=0 to 9
  21.       i = i + 1
  22.       oCell = oSheet.getCellByPosition(Col,Lig)
  23.       oCell.setValue(NumBoule(i))
  24.    Next Col
  25.    If NmbEchanges>0 Then
  26.       Txt = NmbEchanges & " échanges effectués."
  27.       MsgBox(Txt)
  28.    Endif
  29.    Exit Sub 'Sortie de la macro
  30.    '
  31. Tirage:
  32.    NumBoule(i)= Int(49*Rnd)+1
  33.    ' Test vérification numéro non tiré précédement
  34.    If i>1 Then
  35.       Do
  36.          OK = True
  37.          For a = 1 to i-1
  38.             If NumBoule(a)=NumBoule(i) Then
  39.                NumBoule(i) = Int(49*Rnd)+1 'Retirage
  40.                OK=False: Exit For
  41.             Endif
  42.          Next a
  43.       Loop Until OK=True
  44.    Endif
  45. Return
  46. Tri:
  47.    ' Tri à bulles
  48.    Do
  49.       Echange=False
  50.       For a=1 to 9
  51.          If NumBoule(a)>NumBoule(a+1) Then
  52.             Provisoire = NumBoule(a)
  53.             NumBoule(a) = NumBoule(a+1)
  54.             NumBoule(a + 1) = Provisoire
  55.              Echange=True
  56.              NmbEchanges= NmbEchanges + 1
  57.          Endif
  58.       Next a
  59.    Loop Until Echange=False
  60.    Return
  61. End Sub

 

Ca marche ? Bien sûr ! Sinon, vous avez dû faire une erreur. Pour la suite, si l'affichage de cette boite d'infos vous géne, vous pouvez la supprimer, mais le mieux est peut-être de transformer la ligne MsgBox en commentaires, uniquement en plaçant le symbole apostrophe en début de lignes. Ainsi vous pourrez rétablir rapidement cette fonction.



 


 

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é