<?xml
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Formations logiciels libres - 2i2l</title>
	<link>https://www.2i2l.fr/</link>
	<description>Agr&#233;gateur de comp&#233;tences et organisme de formation
2i2L est un organisme de formation. Nous formons principalement sur OpenStreetMap, OverPass, Leaflet, OpenLayers, QGIS, QGIS-Server, Python pour QGIS, GRASS GIS, PostGis, pgRouting, OSRM, OSMAnd, LimeSurvey, R et Rstudio, Calc pour les statistiques, OpenData, OpenRefine, Gimp, Inkscape, Scribus, Blender, CloudCompare, FreeCAD, Moodle, Drupal, DokuWiki, MediaWiki, Wikip&#233;dia, MySQL &amp; MariaDB, PostGreSQL, Python pour les scripts, Python Scientific, GNU+Linux, emacs, Apache OpenOffice, LibreOffice, Macros bureautiques, Collabora, Only Office, Sympa, Ardour, Audacity, MAO, KDEnlive, ShotCut, OpenShot, Cinelerra, VLC, FFmpeg, OBS Studio, XIBO, Matomo,... tous distribu&#233;s sous licences libres.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.2i2l.fr/spip.php?id_rubrique=61&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>Formations logiciels libres - 2i2l</title>
		<url>https://www.2i2l.fr/local/cache-vignettes/L144xH56/2i2l_trim-67178.png?1744384737</url>
		<link>https://www.2i2l.fr/</link>
		<height>56</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>Introduction aux macros et au BASIC</title>
		<link>https://www.2i2l.fr/introduction-aux-macros-et-au-basic</link>
		<guid isPermaLink="true">https://www.2i2l.fr/introduction-aux-macros-et-au-basic</guid>
		<dc:date>2008-06-10T14:16:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Emmanuel</dc:creator>



		<description>&lt;p&gt;LibreOffice Calc macro&lt;/p&gt;

-
&lt;a href="https://www.2i2l.fr/les-macros-libreoffice-ou-apache-openoffice" rel="directory"&gt;Les macros LibreOffice ou Apache OpenOffice&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Les macros permettent d'automatiser simplement des s&#233;quences de commandes, mais aussi de programmer des comportements complexes et sp&#233;cifiques. Trois exemples pour comprendre, du tr&#232;s simple au (relativement) compliqu&#233;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ce tutoriel est propos&#233; sous Calc, mais les macros sont utilisables de fa&#231;on &#233;quivalente avec les autres outils de la suite bureautique LibreOffice / Apache OpenOffice. Toutefois, l'enregistreur de macros n'est apparemment disponible qu'avec Calc et Writer.&lt;/p&gt;
&lt;hr class=&#034;spip&#034; /&gt;
&lt;p&gt;Nous proposons cette formation professionnelle : &lt;a href='https://www.2i2l.fr/formation-libreoffice-macro-programmer-pour-automatiser-des-taches' class=&#034;spip_in&#034;&gt;Formation aux macros tableur avec LibreOffice Calc&lt;/a&gt;&lt;/p&gt;
&lt;hr class=&#034;spip&#034; /&gt;&lt;h2 class=&#034;spip&#034;&gt;Une macro simple : automatiser des s&#233;quences de commandes&lt;/h2&gt;
&lt;p&gt;Principe : &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; appliquer un style pr&#233;cis, le &#034;&lt;i&gt;gras rouge soulign&#233;&lt;/i&gt;&#034;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; aller dans le menu &lt;i&gt;Outils&lt;/i&gt; / &lt;i&gt;Macros&lt;/i&gt; / &lt;i&gt;Enregistrer une macro&lt;/i&gt;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; appara&#238;t un bouton &#034;Terminer l'enregistrement&#034;. Tout ce qui est fait jusqu'&#224; la pression du bouton est enregistr&#233;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; sur une case contenant du texte, &#034;mettre le fond en rouge&#034;, &#034;souligner&#034; (Ctrl+U), &#034;mettre en gras&#034; (Ctrl+G), puis &#034;Terminer l'enregistrement&#034;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; on peut alors enregistrer la macro, dans un module pr&#233;cis, et lui attribuer un nom,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; pour ex&#233;cuter la macro sur une nouvelle case, faire &lt;i&gt;Outils&lt;/i&gt; / &lt;i&gt;Macros&lt;/i&gt; / &lt;i&gt;Ex&#233;cuter la macro&lt;/i&gt;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; enfin, s&#233;lectionner les modules o&#249; la macro est enregistr&#233;e, puis la macro. &#199;a devrait marcher.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Premier pas en BASIC : afficher un texte dans une bo&#238;te de dialogue&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;Une macro est un morceau de code en langage BASIC, qui a pour but d'ex&#233;cuter une t&#226;che pr&#233;cise&lt;/i&gt;. On ne s'en rend pas compte quand on utilise l'enregistreur, mais le r&#233;sultat est le m&#234;me (l'enregistreur se contente de g&#233;n&#233;rer automatiquement le code BASIC correspondant &#224; la s&#233;quence donn&#233;e par l'utilisateur).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Programmation d'une macro tr&#232;s simple&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Faire &lt;i&gt;Outils&lt;/i&gt; / &lt;i&gt;Macros&lt;/i&gt; / &lt;i&gt;G&#233;rer les macros&lt;/i&gt; / &lt;i&gt;LibreOffice Basic...&lt;/i&gt; (ou &lt;i&gt;OOo Basic...&lt;/i&gt;),
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; dans la barre en haut &#224; gauche (l&#224; o&#249; est le focus), donner un nom &#224; la macro et s&#233;lectionner &#034;Nouveau&#034;. Noter le classement en module,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; cela ouvre l'IDE (&lt;i&gt;Integrated Development Environment&lt;/i&gt; ou Environnement de d&#233;veloppement int&#233;gr&#233;) pour faire des macros. La syntaxe est :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;Sub NomMacro &lt;espace vide&gt; End Sub&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les commentaires commencent par REM ou ' et permettent de saisir des informations qui ne seront pas interpr&#233;t&#233;es. Cela est indispensable pour permettre de suivre le d&#233;roulement du programme pour un programmeur.&lt;/p&gt;
&lt;p&gt;Programmer l'exemple suivant :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;Sub MaMacro MsgBox &#034;Hello World!&#034;, 16, &#034;Hello!&#034; End Sub&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;i&gt;MsgBox&lt;/i&gt; : fonction pour afficher une bo&#238;te de dialogue, trois arguments :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le texte &#224; afficher dans la bo&#238;te,&lt;/li&gt;&lt;li&gt; le type de la bo&#238;te, somme de puissance de 2 (ici, 16 = bo&#238;te d'alerte),&lt;/li&gt;&lt;li&gt; le titre de la bo&#238;te.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;On enregistre, puis on valide tout. &lt;br class='autobr' /&gt;
Ensuite, faire &lt;i&gt;Outils&lt;/i&gt; / &lt;i&gt;Macros&lt;/i&gt; / &lt;i&gt;Ex&#233;cuter la macro&lt;/i&gt;. On choisit alors la macro qui est class&#233;e dans le module que l'on a demand&#233; au d&#233;but. Cela devrait marcher.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Automatiser l'appel de la macro avec un bouton dans le menu&lt;/strong&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Faire &lt;i&gt;Outils&lt;/i&gt; / &lt;i&gt;Macros&lt;/i&gt; / &lt;i&gt;G&#233;rer les macros&lt;/i&gt;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; assigner,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; choisir l'onglet &lt;i&gt;Menus&lt;/i&gt; et rajouter une entr&#233;e pour la macro que l'on veut. Tester.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Automatiser l'appel de la macro avec un raccourci clavier&lt;/strong&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Faire &lt;i&gt;Outils&lt;/i&gt; / &lt;i&gt;Personnaliser...&lt;/i&gt;, &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; aller dans l'onglet &#034;Clavier&#034;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Automatiser l'appel de la macro avec un bouton sur la feuille&lt;/strong&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Aller dans l'onglet &#8220;Contr&#244;les de formulaire&#8221;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; dessiner un bouton,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; faire un clic droit, puis &#8220;Contr&#244;le&#8221;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; assigner la macro &#224; &#034;Pendant le d&#233;clenchement&#034;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; cliquer sur l'ic&#244;ne &#8220;(D&#233;s)activer le mode Conception&#8221;,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; enfin cliquer sur le bouton pour tester.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Programmation BASIC : un jeu du nombre myst&#233;rieux.&lt;/h2&gt;
&lt;p&gt;Principe du jeu : l'ordinateur calcule un nombre entre 0 et X (X au choix). En un nombre limit&#233; de coups (param&#233;trable), l'humain doit deviner le num&#233;ro, l'ordinateur ne lui disant que &#034;le nombre myst&#233;rieux est sup&#233;rieur &#224; celui-l&#224;&#034; ou &#034;le nombre myst&#233;rieux est inf&#233;rieur &#224; celui-l&#224;&#034; (ou &#034;Perdu&#034; ou &#034;Gagn&#233;&#034;).&lt;/p&gt;
&lt;p&gt;Nous aurons besoin de deux macros. &lt;strong&gt;Une macro pour initialiser la partie&lt;/strong&gt; (tirant au sort un nombre en fonction de la difficult&#233; donn&#233;e, remettant le compteur de coups restants au maximum). Pour cela, nous aurons besoin (cf. le document joint) :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; en position C1, la difficult&#233; (le X de &#034;entre 0 et X&#034;),
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; en position C2, le nombre d'essais autoris&#233;s,
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; en position C3, le nombre myst&#233;rieux, calcul&#233; par l'ordinateur (dans un vrai jeu, on ne l'affichera pas, &#233;videmment),
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; en position C4, le nombre de coups restants, r&#233;initialis&#233; en d&#233;but de partie.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La seconde macro v&#233;rifiera une entr&#233;e de l'utilisateur&lt;/strong&gt;, la comparera avec le nombre myst&#233;rieux, affichera le r&#233;sultat en cons&#233;quence. Elle devra aussi g&#233;rer la victoire ou la d&#233;faite du joueur (les deux conduisant &#224; une r&#233;initialisation du jeu, c'est-&#224;-dire &#224; un rappel de la premi&#232;re macro).&lt;br class='autobr' /&gt;
Nous aurons besoin, en position D7, de la proposition du joueur.&lt;/p&gt;
&lt;p&gt;Nous assignerons chaque macro &#224; un bouton sur la grille.&lt;/p&gt;
&lt;p&gt;La premi&#232;re macro doit &#234;tre &#233;tudi&#233;e soigneusement et expliqu&#233;e par l'enseignant. La deuxi&#232;me devrait &#234;tre plus facile, m&#234;me si elle fait beaucoup plus de choses. Notez que le code est comment&#233; et indent&#233; pour plus de lisibilit&#233;. Copi&#233; dans l'&#233;diteur BASIC de LibreOffice / Apache OOo, le code est automatiquement color&#233; en fonction de la syntaxe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Premi&#232;re macro : initialisation&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;Sub JNM ' Le jeu du nombre myst&#233;rieux : initialisation ' D&#233;claration des variables : Dim MaVariable as Type ' Le nombre myst&#233;rieux, un entier Dim iNombMyst as Integer ' Les acc&#232;s aux documents / cases du tableau : des objets Dim oDocument As Object, oSheet As Object, oNM As Object, oDiff As Object, oRestant As Object ' On r&#233;cup&#232;re le contexte du document actuel et de la feuille1 ' c'est le genre de ligne &#224; copier-coller oDocument=ThisComponent oSheet=oDocument.Sheets.getByName(&#034;Feuille1&#034;) ' On r&#233;cup&#232;re les param&#232;tres dans les cases de la feuille oDiff=oSheet.getCellByPosition(2,0) ' On calcule le nombre myst&#233;rieux iNombMyst = Int(Rnd * oDiff.getValue()) ' On le stocke dans une case, mais chut ! ne pas le dire &#224; l'utilisateur. oNM=oSheet.getCellByPosition(2,2) oNM.setValue(iNombMyst) ' Coups restants : (r&#233;)initialisation oRestant=oSheet.getCellByPosition(2,3) ' Ici, on encha&#238;ne les commandes pour gagner de la place ' c'est &#233;quivalent &#224; : ' oEssai = oSheet.getCellByPosition(2,1) ' On r&#233;cup&#232;re l'objet en case C2 ' iEssai = oEssai.getValue() ' on r&#233;cup&#232;re la valeur de l'objet pr&#233;c&#233;dent ' oRestant.setValue(iEssai) ' on l'assigne en case C4 oRestant.setValue(oSheet.getCellByPosition(2,1).getValue()) ' On r&#233;utilisera cette astuce par la suite pour &#233;viter d'avoir &#224; manipuler trop de variables End Sub&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Deuxi&#232;me macro : un tour de jeu&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;Sub Jouer ' Une partie de nombre myst&#233;rieux. Dim iNombMyst as Integer, iProp as Integer Dim oRestant as Object, oDocument As Object, oSheet As Object ' On r&#233;cup&#232;re le contexte du document actuel et de la feuille1 oDocument=ThisComponent oSheet=oDocument.Sheets.getByName(&#034;Feuille1&#034;) ' On r&#233;cup&#232;re les param&#232;tres dans les cases de la feuille ' Nombre de coups restants oRestant=oSheet.getCellByPosition(2,3) ' Nombre myst&#233;rieux iNombMyst=oSheet.getCellByPosition(2,2).getValue() iProp=oSheet.getCellByPosition(3,6).getValue() ' D&#233;but du test : ' on enl&#232;ve un coup oRestant.setValue(oRestant.getValue() - 1) ' on compare ce que l'utilisateur a mis avec le nombre myst&#233;rieux If iProp = iNombMyst Then MsgBox &#034;Vous avez gagn&#233; !!&#034;, 1, &#034;Gagn&#233; :)&#034; ' On r&#233;initialise JNM ElseIf iProp &lt; iNombMyst Then MsgBox &#034;Le nombre myst&#233;rieux est plus grand que &#231;a&#034;, 1, &#034;&#034; if oRestant.getValue() = O Then MsgBox &#034;Plus de coups restants, vous avez perdu&#034;, 1, &#034;Perdu :(&#034; ' On r&#233;initialise le jeu en appelant la macro pr&#233;c&#233;dente JNM EndIf Else ' Plus qu'un choix possible... MsgBox &#034;Le nombre myst&#233;rieux est plus petit que &#231;a&#034;, 1, &#034;&#034; if oRestant.getValue() = O Then MsgBox &#034;Plus de coups restants, vous avez perdu&#034;, 1, &#034;Perdu :(&#034; ' On r&#233;initialise le jeu en appelant la macro pr&#233;c&#233;dente JNM EndIf EndIf End Sub&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://www.2i2l.fr/IMG/ods/jnm.ods" length="8611" type="application/vnd.oasis.opendocument.spreadsheet" />
		

	</item>



</channel>

</rss>
