<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Blogs - pijaku</title>
		<link>https://www.developpez.net/forums/blogs/383341-pijaku/</link>
		<description>Developpez.com, le Club des Développeurs et IT Pro</description>
		<language>fr</language>
		<lastBuildDate>Thu, 30 Apr 2026 03:34:07 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.jpg</url>
			<title>Forum du club des développeurs et IT Pro - Blogs - pijaku</title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/</link>
		</image>
		<item>
			<title><![CDATA[L'Objet DialogSheet, une alternative aux Userforms - Partie 2]]></title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6290/l-objet-dialogsheet-alternative-aux-userforms-partie-2/</link>
			<pubDate>Tue, 02 Oct 2018 07:45:08 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">________________________________________________________<br />
<br />
Ce billet est la suite de <a href="https://www.developpez.net/forums/blogs/383341-pijaku/b6286/lobjet-dialogsheet-alternative-aux-userforms-partie-1/" target="_blank"><font color="#0000CD"><u>cette première partie</u></font>.</a><br />
<br />
Nous avions, dans cette première partie, fini de remplir notre liste de liste modifiable fixe.<br />
Réglons notre zone d'édition :<br />
<br />
<b>Clic droit / format de contrôle sélectionner Entier :</b><br />
Ceci, juste afin de tester l'une des possibilités (nombreuses) offertes par l'Objet DialogSheet et les contrôles de formulaire (cf ci-dessous).<br />
<img src="https://www.developpez.net/forums/attachments/p416689d1538464948/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/10-contr-textbox.png/" border="0" alt="Nom : 10 Contr&#244;le Textbox.png
Affichages : 1683
Taille : 30,8 Ko"  style="float: CONFIG" /><br />
<br />
<br />
<br />
Voilà, nous en avons terminé avec la préparation.<br />
Ne reste que la partie VBA et code de cette boite de dialogue.<br />
Faisons donc réagir nos boutons...<br />
<br />
<ol class="decimal"><li style=""><b>Clic droit sur le bouton OK/Affecter une macro :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416692d1538464948/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/11-bouton-ok-affecter-macro.png/" border="0" alt="Nom : 11 Bouton OK Affecter macro.png
Affichages : 290
Taille : 13,6 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Changer (ou pas) le nom de la macro :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416696d1538464949/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/12-renommer-macro.png/" border="0" alt="Nom : 12 renommer macro.png
Affichages : 290
Taille : 29,1 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Dans l'éditeur VBA :</b> <br />
<img src="https://www.developpez.net/forums/attachments/p416698d1538464951/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/13-macro.png/" border="0" alt="Nom : 13 Macro.png
Affichages : 257
Taille : 70,2 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Placez ce code :</b><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> Bouton_Ok_Click<span class="br0">&#40;</span><span class="br0">&#41;</span>
 <span style="color: #0000ff;">Dim</span> Fruit <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
&nbsp;
   <span style="color: #0000ff;">With</span> Sheets<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Dialogue1&quot;</span><span class="br0">&#41;</span>
      <span style="color: #0000ff;">With</span> .Shapes<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Zone combin&eacute;e 4&quot;</span><span class="br0">&#41;</span>.ControlFormat
         <span style="color: #0000ff;">If</span> .ListIndex &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>
            Fruit = .List<span class="br0">&#40;</span>.ListIndex<span class="br0">&#41;</span>
         <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
      <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
      <span style="color: #0000ff;">With</span> .Shapes<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Zone d'&eacute;dition 5&quot;</span><span class="br0">&#41;</span>
         <span style="color: #0000ff;">If</span> .TextFrame.Characters.Count &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>
            MsgBox <span style="color: #FF0000;">&quot;Commander d'urgence : &quot;</span> &amp; .TextFrame.Characters.Text &amp; <span style="color: #FF0000;">&quot; &quot;</span> &amp; Fruit
         <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
      <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li></ol><br />
Vous disposez maintenant d'une boîte de dialogue fonctionnelle.<br />
<br />
Pour terminer, nous allons masquer un peu tout cela, juste pour l'esthétique de votre classeur.<br />
<ol class="decimal"><li style=""><b>Masquer la feuille : clic droit/Masquer :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416702d1538464951/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/14-masquer.png/" border="0" alt="Nom : 14 Masquer.png
Affichages : 304
Taille : 11,2 Ko"  style="float: CONFIG" /><br /></li><li style=""><b>Insérer un bouton dans la Feuil1 (par exemple)</b><br /></li><li style=""><b>Affecter une macro à ce bouton :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416705d1538464952/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/15-bouton-commande.png/" border="0" alt="Nom : 15 Bouton Commande.png
Affichages : 296
Taille : 27,8 Ko"  style="float: CONFIG" /><br /></li><li style=""><b>Dans l'éditeur VBA placer ce code :</b><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:120px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> Bouton_Commande_Click<span class="br0">&#40;</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">With</span> DialogSheets<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Dialogue1&quot;</span><span class="br0">&#41;</span>
      .Shapes<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Zone combin&eacute;e 4&quot;</span><span class="br0">&#41;</span>.ControlFormat.ListIndex = <span style="color: #cc66cc;">0</span>
      .Shapes<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Zone d'&eacute;dition 5&quot;</span><span class="br0">&#41;</span>.TextFrame.Characters.Text = <span style="color: #FF0000;">&quot;&quot;</span>
      .Show
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li></ol><br />
<br />
Ne nous reste plus qu'à tester.<br />
<ol class="decimal"><li style=""><b>Clic sur le bouton :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416708d1538464953/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/16-.png/" border="0" alt="Nom : 16 Essai.png
Affichages : 305
Taille : 19,4 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Choisir une valeur dans la zone de liste et saisir n'importe quoi (sauf un entier) dans la zone d'édition :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416709d1538464954/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/17-mauvaise-saisie.png/" border="0" alt="Nom : 17 mauvaise saisie.png
Affichages : 324
Taille : 22,6 Ko"  style="float: CONFIG" /><br />
Notre MsgBox s'affiche bien.<br /></li><li style=""><b>Mais un message d'Excel apparaît :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416710d1538464955/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/18-message-excel-incorrecte.png/" border="0" alt="Nom : 18 Message Excel Valeur incorrecte.png
Affichages : 469
Taille : 22,3 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Et nous empêche de quitter :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416712d1538464955/bases-donnees/autres-sgbd/tables-systemes-extraction-structure-d-base/19-retour-boite-dialogue-azerty-select.png/" border="0" alt="Nom : 19 retour boite de dialogue AZERTY select.png
Affichages : 413
Taille : 14,0 Ko"  style="float: CONFIG" /></li></ol><br />
<br />
Cette alternative aux Userforms n'est pas évidente à coder. Nous avons, en effet, davantage l'habitude des contrôles ActiveX.<br />
Mais, une fois maîtrisée, cela permet de se passer de moultes lignes de code rendues inutiles...<br />
<br />
<a href="https://excel.developpez.com/faq/?page=ObjFormulaire" target="_blank"><font color="#0000CD"><u>A lire ...</u></font></a><br />
<a href="https://support.microsoft.com/fr-fr/help/291073/how-to-use-the-forms-controls-on-a-worksheet-in-excel" target="_blank"><u><font color="#0000CD">A lire également.</font></u></a><br />
<br />
La création de telles boîtes peut-être entièrement réalisée en VBA : <a href="http://www.xldynamic.com/source/xld.CDT.html" target="_blank"><font color="#0000CD"><u>exemple</u></font></a><br />
<br />
A++</blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6290/l-objet-dialogsheet-alternative-aux-userforms-partie-2/</guid>
		</item>
		<item>
			<title><![CDATA[L'Objet DialogSheet, une alternative aux Userforms - Partie 1]]></title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6286/l-objet-dialogsheet-alternative-aux-userforms-partie-1/</link>
			<pubDate>Tue, 02 Oct 2018 07:19:22 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">_________________________________________________<br />
<br />
Bonjour,<br />
<br />
Ce billet sera en deux parties en raison du nombre limité d'images par message.<br />
<br />
Ayant découvert cet objet récemment, je me permet de venir vous décrire comment s'en servir.<br />
<br />
Il s'agit donc d'un type de feuille particulier vous permettant de créer un formulaire de saisie type boîte de dialogue.<br />
<br />
Voici, tout en images, un exemple de création.<br />
<br />
<ol class="decimal"><li style=""><b>Insérer la feuille de Dialogue :</b><br />
Pour cela, clic droit sur un des onglets de feuille existante et choisissez : Insérer<br />
<img src="https://www.developpez.net/forums/attachments/p416650d1538463589/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/01-ins-rer.png/" border="0" alt="Nom : 01 Ins&#233;rer.png
Affichages : 251
Taille : 9,9 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Choisir : Boite de dialogue Microsoft Excel 5.0 :</b><br />
puis cliquer sur OK<br />
<img src="https://www.developpez.net/forums/attachments/p416654d1538463590/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/02-ins-rer-boite-dialogue.png/" border="0" alt="Nom : 02 Ins&#233;rer boite de dialogue.png
Affichages : 323
Taille : 33,7 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Voici votre feuille de dialogue créée :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416658d1538463591/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/03-boite-dialogue.png/" border="0" alt="Nom : 03 Boite de dialogue.png
Affichages : 264
Taille : 3,0 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Exécutons là, pour voir :</b><br />
Pour se faire, clic droit dans le fond de la boîte et cliquer sur Exécuter la boîte de dialogue.<br />
<img src="https://www.developpez.net/forums/attachments/p416662d1538463592/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/04-ex-cuter-boite-dialogue.png/" border="0" alt="Nom : 04 Ex&#233;cuter la boite de dialogue.png
Affichages : 216
Taille : 7,1 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Votre boite s'affiche comme ceci :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416664d1538463593/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/05-boite-ex-cut-e.png/" border="0" alt="Nom : 05 Boite ex&#233;cut&#233;e.png
Affichages : 252
Taille : 16,2 Ko"  style="float: CONFIG" /><br />
Bon. <br />
C'est bien joli, mais, comme ça, on ne peut pas en faire grand chose...<br />
Ajoutons donc des contrôles!<br />
<br /></li><li style=""><b>Onglet développeur, menu Insérer :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416666d1538463594/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/06-1-d-veloppeur-ins-rer.png/" border="0" alt="Nom : 06 1 D&#233;veloppeur Ins&#233;rer.png
Affichages : 222
Taille : 63,4 Ko"  style="float: CONFIG" /><br />
<br />
Note : nous n'avons accès qu'aux contrôles de formulaire, pas aux ActiveX.<br />
<br /></li><li style=""><b>Insérons donc :</b><br />
<ul><li style="">2 Etiquettes :<br />
<img src="https://www.developpez.net/forums/attachments/p416668d1538463595/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/06-2-ins-rer-label.png/" border="0" alt="Nom : 06 2 Ins&#233;rer Label.png
Affichages : 249
Taille : 28,5 Ko"  style="float: CONFIG" /></li><li style="">1 zone d'édition :<br />
<img src="https://www.developpez.net/forums/attachments/p416670d1538463597/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/06-3-zone-dedition.png/" border="0" alt="Nom : 06 3 zone dedition.png
Affichages : 567
Taille : 28,8 Ko"  style="float: CONFIG" /></li><li style="">1 zone de liste déroulante fixe modifiable :<br />
<img src="https://www.developpez.net/forums/attachments/p416674d1538463598/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/06-4-zone-liste-deroulante-fixe-modifiable.png/" border="0" alt="Nom : 06 4 zone de liste deroulante fixe modifiable.png
Affichages : 205
Taille : 35,3 Ko"  style="float: CONFIG" /></li></ul><br />
<br /></li><li style=""><b>Après quelques modifications...</b><br />
<img src="https://www.developpez.net/forums/attachments/p416676d1538463599/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/07-premi-re-boite.png/" border="0" alt="Nom : 07 Premi&#232;re boite.png
Affichages : 223
Taille : 3,7 Ko"  style="float: CONFIG" /><br />
C'est mieux, mais... Notre liste est toujours vide.<br />
Placez, dans une autre feuille de votre classeur (Feuil1 pour l'exemple), des valeurs en A1:A10, puis :<br />
<br /></li><li style=""><b>Clic droit sur la zone de liste : </b><br />
<img src="https://www.developpez.net/forums/attachments/p416678d1538463600/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/08-format-controle-zone-liste-combin-e.png/" border="0" alt="Nom : 08 Format de controle zone de liste combin&#233;e.png
Affichages : 201
Taille : 12,3 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""><b>Format de contrôle : remplir la Plage d'entrée :</b><br />
<img src="https://www.developpez.net/forums/attachments/p416682d1538463601/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/allocation-ressources/09-contr-zone-liste.png/" border="0" alt="Nom : 09 Contr&#244;le zone de liste.png
Affichages : 254
Taille : 26,8 Ko"  style="float: CONFIG" /><br />
<br />
</li></ol><br />
<br />
La suite : <a href="https://www.developpez.net/forums/blogs/383341-pijaku/b6290/lobjet-dialogsheet-alternative-aux-userforms-partie-2/" target="_blank"><font color="#0000CD"><u>partie 2</u></font>.</a></blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6286/l-objet-dialogsheet-alternative-aux-userforms-partie-1/</guid>
		</item>
		<item>
			<title>3 petits jeux : Tic-Tac-Toe (morpion) - Pig The Dice (jeu du cochon) - Bulls And Cows (MasterMind)</title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6271/3-petits-jeux-tic-tac-toe-morpion-pig-the-dice-jeu-cochon-bulls-and-cows-mastermind/</link>
			<pubDate>Fri, 28 Sep 2018 09:31:09 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">____________________________________________________________________<br />
<br />
Bonjour,<br />
<br />
Détournons un peu (beaucoup) Excel pour s'amuser avec trois petits jeux.<br />
<br />
<ol class="decimal"><li style=""><b>Le jeu du morpion (Tic-Tac-Toe) :</b><br />
Une variante du grand classique. Ce jeu se joue seul contre l'ordinateur.<br />
Vous avez la possibilité de tricher et donc de réduire les chances de l'ordi...<br />
<br />
<b><u><font color="#FF0000">Mise en garde :</font></u></b> se joue sur la feuille active. Veillez à ne pas y avoir de données !<br />
<br />
Pour y jouer, copier-coller le code ci-dessous dans un Module standard et exécuter la Sub Morpion...<br />
<br />
Le code :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
&nbsp;
<span style="color: #0000ff;">Private</span> Lines<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">3</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #0000ff;">Private</span> Nb <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, Joueur <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>
<span style="color: #0000ff;">Private</span> Gagne <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, Fin <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, Annule <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
&nbsp;
<span style="color: #0000ff;">Sub</span> Morpion<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> P <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, CheatMode <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, i&amp;
    columns<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;C:E&quot;</span><span class="br0">&#41;</span>.ColumnWidth = <span style="color: #cc66cc;">2.43</span>
    columns<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;C:E&quot;</span><span class="br0">&#41;</span>.Cells.Clear
    rows<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;1:200&quot;</span><span class="br0">&#41;</span>.RowHeight = <span style="color: #cc66cc;">16.5</span>
    MsgBox <span style="color: #FF0000;">&quot;Vous-avez les X, le pc les O...&quot;</span> &amp; vbCrLf &amp; <span style="color: #FF0000;">&quot;Bonne partie&quot;</span>
    InitLines
    printLines Nb
    i = MsgBox<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Voulez-vous tricher?&quot;</span>, vbYesNo<span class="br0">&#41;</span>
    CheatMode = <span class="br0">&#40;</span>i &lt;&gt; vbYes<span class="br0">&#41;</span>
    <span style="color: #0000ff;">Do</span>
        P = QuiJoue
        <span style="color: #0000ff;">If</span> P = <span style="color: #FF0000;">&quot;Humain&quot;</span> <span style="color: #0000ff;">Then</span>
            <span style="color: #0000ff;">Call</span> HumainJoue
            Gagne = IsWinner<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;X&quot;</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">Else</span>
            <span style="color: #0000ff;">Call</span> OrdiJoue<span class="br0">&#40;</span>CheatMode<span class="br0">&#41;</span>
            Gagne = IsWinner<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;O&quot;</span><span class="br0">&#41;</span>
            printLines Nb
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
        <span style="color: #0000ff;">If</span> <span style="color: #0000ff;">Not</span> Gagne <span style="color: #0000ff;">Then</span> Fin = IsEnd
    <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">Until</span> Gagne <span style="color: #0000ff;">Or</span> Fin <span style="color: #0000ff;">Or</span> Annule
    <span style="color: #0000ff;">If</span> <span style="color: #0000ff;">Not</span> Fin <span style="color: #0000ff;">And</span> <span style="color: #0000ff;">Not</span> Annule <span style="color: #0000ff;">Then</span>
        Nb = Nb + <span style="color: #cc66cc;">1</span>
        printLines Nb
        MsgBox P &amp; <span style="color: #FF0000;">&quot; Gagne !&quot;</span>
    <span style="color: #0000ff;">ElseIf</span> Annule <span style="color: #0000ff;">Then</span>
        MsgBox <span style="color: #FF0000;">&quot;Annulation par l'utilisateur&quot;</span>
    <span style="color: #0000ff;">Else</span>
        Nb = Nb + <span style="color: #cc66cc;">1</span>
        printLines Nb
        MsgBox <span style="color: #FF0000;">&quot;Game Over!&quot;</span>
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
<span style="color: #0000ff;">Sub</span> InitLines<span class="br0">&#40;</span><span style="color: #0000ff;">Optional</span> s <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>
    <span style="color: #0000ff;">If</span> s = vbNullString <span style="color: #0000ff;">Then</span> s = <span style="color: #FF0000;">&quot;#&quot;</span>
    Annule = <span style="color: #0000ff;">False</span>
    Nb = <span style="color: #cc66cc;">0</span>: Joueur = <span style="color: #cc66cc;">0</span>
    <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">For</span> j = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
            Lines<span class="br0">&#40;</span>i, j<span class="br0">&#41;</span> = s
        <span style="color: #0000ff;">Next</span> j
    <span style="color: #0000ff;">Next</span> i
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
<span style="color: #0000ff;">Sub</span> printLines<span class="br0">&#40;</span>Nb <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, strT <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
   Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;C&quot;</span> &amp; rows.Count<span class="br0">&#41;</span>.End<span class="br0">&#40;</span>xlUp<span class="br0">&#41;</span>.Offset<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>.Value = <span style="color: #FF0000;">&quot;Tour n&deg; &quot;</span> &amp; Nb
   Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;C&quot;</span> &amp; rows.Count<span class="br0">&#41;</span>.End<span class="br0">&#40;</span>xlUp<span class="br0">&#41;</span>.Offset<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>.Resize<span class="br0">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">3</span><span class="br0">&#41;</span>.Value = Lines
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
<span style="color: #0000ff;">Function</span> QuiJoue<span class="br0">&#40;</span><span style="color: #0000ff;">Optional</span> s <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
    <span style="color: #0000ff;">If</span> Joueur = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>
        Joueur = <span style="color: #cc66cc;">1</span>
        QuiJoue = <span style="color: #FF0000;">&quot;Humain&quot;</span>
    <span style="color: #0000ff;">Else</span>
        Joueur = <span style="color: #cc66cc;">0</span>
        QuiJoue = <span style="color: #FF0000;">&quot;Ordi&quot;</span>
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span>
<span style="color: #0000ff;">Sub</span> HumainJoue<span class="br0">&#40;</span><span style="color: #0000ff;">Optional</span> s <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> L <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, C <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, BienJoue <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
    <span style="color: #0000ff;">Do</span>
        L = Application.InputBox<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Choix de la ligne&quot;</span>, <span style="color: #FF0000;">&quot;Num&eacute;rique uniquement&quot;</span>, <span style="color: #0000ff;">Type</span>:=<span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">If</span> L = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>
            Annule = <span style="color: #0000ff;">True</span>
        <span style="color: #0000ff;">Else</span>
            <span style="color: #0000ff;">If</span> L &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">And</span> L &lt; <span style="color: #cc66cc;">4</span> <span style="color: #0000ff;">Then</span>
                C = Application.InputBox<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Choix de la colonne&quot;</span>, <span style="color: #FF0000;">&quot;Num&eacute;rique uniquement&quot;</span>, <span style="color: #0000ff;">Type</span>:=<span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
                <span style="color: #0000ff;">If</span> C &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">And</span> C &lt; <span style="color: #cc66cc;">4</span> <span style="color: #0000ff;">Then</span>
                    <span style="color: #0000ff;">If</span> Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;#&quot;</span> <span style="color: #0000ff;">And</span> <span style="color: #0000ff;">Not</span> Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;X&quot;</span> <span style="color: #0000ff;">And</span> <span style="color: #0000ff;">Not</span> Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;O&quot;</span> <span style="color: #0000ff;">Then</span>
                        Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;X&quot;</span>
                        BienJoue = <span style="color: #0000ff;">True</span>
                    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
                <span style="color: #0000ff;">ElseIf</span> C = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>
                    Annule = <span style="color: #0000ff;">True</span>
                <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
            <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
         <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
    <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">Until</span> BienJoue <span style="color: #0000ff;">Or</span> Annule
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
<span style="color: #0000ff;">Sub</span> OrdiJoue<span class="br0">&#40;</span>booB <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> L <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, C <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, BienJoue <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
    <span style="color: #0000ff;">If</span> booB <span style="color: #0000ff;">Then</span>
        <span style="color: #0000ff;">For</span> L = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">For</span> C = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
                <span style="color: #0000ff;">If</span> Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;#&quot;</span> <span style="color: #0000ff;">Then</span>
                    Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;O&quot;</span>
                    <span style="color: #0000ff;">If</span> IsWinner<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;O&quot;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span>
                        Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;O&quot;</span>
                        Nb = Nb + <span style="color: #cc66cc;">1</span>
                        <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Sub</span>
                    <span style="color: #0000ff;">Else</span>
                        Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;#&quot;</span>
                    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
                <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
            <span style="color: #0000ff;">Next</span> C
        <span style="color: #0000ff;">Next</span> L
        <span style="color: #0000ff;">For</span> L = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">For</span> C = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
                <span style="color: #0000ff;">If</span> Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;#&quot;</span> <span style="color: #0000ff;">Then</span>
                    Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;X&quot;</span>
                    <span style="color: #0000ff;">If</span> IsWinner<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;X&quot;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span>
                        Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;O&quot;</span>
                        Nb = Nb + <span style="color: #cc66cc;">1</span>
                        <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Sub</span>
                    <span style="color: #0000ff;">Else</span>
                        Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;#&quot;</span>
                    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
                <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
            <span style="color: #0000ff;">Next</span> C
        <span style="color: #0000ff;">Next</span> L
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
    Randomize Timer
    <span style="color: #0000ff;">Do</span>
        L = Int<span class="br0">&#40;</span><span class="br0">&#40;</span>Rnd * <span style="color: #cc66cc;">3</span><span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
        C = Int<span class="br0">&#40;</span><span class="br0">&#40;</span>Rnd * <span style="color: #cc66cc;">3</span><span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">If</span> Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;#&quot;</span> <span style="color: #0000ff;">And</span> <span style="color: #0000ff;">Not</span> Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;X&quot;</span> <span style="color: #0000ff;">And</span> <span style="color: #0000ff;">Not</span> Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;O&quot;</span> <span style="color: #0000ff;">Then</span>
            Lines<span class="br0">&#40;</span>L, C<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;O&quot;</span>
            BienJoue = <span style="color: #0000ff;">True</span>
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
    <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">Until</span> BienJoue
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
<span style="color: #0000ff;">Function</span> IsWinner<span class="br0">&#40;</span>s <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
<span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, Ch <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, strTL <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, strTC <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
    Ch = String$<span class="br0">&#40;</span>UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>, s<span class="br0">&#41;</span>
    <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">For</span> j = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
            strTL = strTL &amp; Lines<span class="br0">&#40;</span>i, j<span class="br0">&#41;</span>
            strTC = strTC &amp; Lines<span class="br0">&#40;</span>j, i<span class="br0">&#41;</span>
        <span style="color: #0000ff;">Next</span> j
        <span style="color: #0000ff;">If</span> strTL = Ch <span style="color: #0000ff;">Or</span> strTC = Ch <span style="color: #0000ff;">Then</span> IsWinner = <span style="color: #0000ff;">True</span>: <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">For</span>
        strTL = vbNullString: strTC = vbNullString
    <span style="color: #0000ff;">Next</span> i
    <span style="color: #0000ff;">If</span> <span style="color: #0000ff;">Not</span> IsWinner <span style="color: #0000ff;">Then</span>
        strTL = Lines<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> &amp; Lines<span class="br0">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> &amp; Lines<span class="br0">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">3</span><span class="br0">&#41;</span>
        strTC = Lines<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">3</span><span class="br0">&#41;</span> &amp; Lines<span class="br0">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> &amp; Lines<span class="br0">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">If</span> strTL = Ch <span style="color: #0000ff;">Or</span> strTC = Ch <span style="color: #0000ff;">Then</span> IsWinner = <span style="color: #0000ff;">True</span>
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span>
<span style="color: #0000ff;">Function</span> IsEnd<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
<span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>
    <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">For</span> j = LBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Lines, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">If</span> Lines<span class="br0">&#40;</span>i, j<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;#&quot;</span> <span style="color: #0000ff;">Then</span> <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Function</span>
        <span style="color: #0000ff;">Next</span> j
    <span style="color: #0000ff;">Next</span> i
    IsEnd = <span style="color: #0000ff;">True</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div></li><li style=""><b>Le jeu du cochon (jeu de dé : Pig the dice) : </b><br />
Règles : <br />
À chaque tour, un joueur jette un dé à plusieurs reprises jusqu'à ce que : <br />
<ul><li style="">soit 1 soit tiré,</li><li style="">ou que le joueur décide de &quot;garder&quot;:<br />
<ul><li style="">Si le joueur obtient un 1, il ne marque rien et c'est au joueur suivant de jeter le dé,</li><li style="">Si le joueur obtient un autre nombre, il est ajouté au total de ce tour et le tour du joueur continue.</li><li style="">Si le joueur choisit de &quot;garder&quot;, le total des points du tour est ajouté à son score global, et c'est au joueur suivant de jeter le dé.</li></ul></li></ul><br />
Le premier joueur à marquer 100 points ou plus gagne.<br />
<br />
Pour y jouer, copier-coller le code ci-dessous dans un Module standard et exécuter la Sub Cochon.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> Cochon<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> Scs<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, Ask <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, Np <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, Go <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
<span style="color: #0000ff;">Dim</span> cp <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, Rd <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, NbP <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, ScBT <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>
&nbsp;
    <span style="color: #0000ff;">Const</span> INPTXT <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Nombre de joueurs : &quot;</span>
    <span style="color: #0000ff;">Const</span> INPTITL <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Num&eacute;rique uniquement&quot;</span>
    <span style="color: #0000ff;">Const</span> ROL <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Joueur &curren;&curren;&curren;&curren; lance le d&eacute;.&quot;</span>
    <span style="color: #0000ff;">Const</span> MSG <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Voulez-vous garder votre score : &quot;</span>
    <span style="color: #0000ff;">Const</span> TITL <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Total si vous gardez : &quot;</span>
    <span style="color: #0000ff;">Const</span> Res <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Le d&eacute; donne : &curren;&curren;&curren;&curren; points.&quot;</span>
    <span style="color: #0000ff;">Const</span> ONE <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Le d&eacute; donne : 1 point. D&eacute;sol&eacute;!&quot;</span> &amp; vbCrLf &amp; <span style="color: #FF0000;">&quot;Joueur suivant.&quot;</span>
    <span style="color: #0000ff;">Const</span> WIN <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Le joueur &curren;&curren;&curren;&curren; a gagn&eacute; le jeu du cochon!&quot;</span>
    <span style="color: #0000ff;">Const</span> STW <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">100</span>
&nbsp;
    Randomize Timer
    NbP = Application.InputBox<span class="br0">&#40;</span>INPTXT, INPTITL, <span style="color: #cc66cc;">2</span>, <span style="color: #0000ff;">Type</span>:=<span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">ReDim</span> Scs<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> NbP<span class="br0">&#41;</span>
    cp = <span style="color: #cc66cc;">1</span>
    <span style="color: #0000ff;">Do</span>
        ScBT = <span style="color: #cc66cc;">0</span>
        <span style="color: #0000ff;">Do</span>
            MsgBox Replace<span class="br0">&#40;</span>ROL, <span style="color: #FF0000;">&quot;&curren;&curren;&curren;&curren;&quot;</span>, cp<span class="br0">&#41;</span>
            Rd = Int<span class="br0">&#40;</span><span class="br0">&#40;</span>Rnd * <span style="color: #cc66cc;">6</span><span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">If</span> Rd &gt; <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">Then</span>
                MsgBox Replace<span class="br0">&#40;</span>Res, <span style="color: #FF0000;">&quot;&curren;&curren;&curren;&curren;&quot;</span>, Rd<span class="br0">&#41;</span>
                ScBT = ScBT + Rd
                <span style="color: #0000ff;">If</span> Scs<span class="br0">&#40;</span>cp<span class="br0">&#41;</span> + ScBT &gt;= STW <span style="color: #0000ff;">Then</span>
                    Go = <span style="color: #0000ff;">True</span>
                    <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Do</span>
                <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
                Ask = MsgBox<span class="br0">&#40;</span>MSG &amp; ScBT, vbYesNo, TITL &amp; Scs<span class="br0">&#40;</span>cp<span class="br0">&#41;</span> + ScBT<span class="br0">&#41;</span>
                <span style="color: #0000ff;">If</span> Ask = vbYes <span style="color: #0000ff;">Then</span>
                    Scs<span class="br0">&#40;</span>cp<span class="br0">&#41;</span> = Scs<span class="br0">&#40;</span>cp<span class="br0">&#41;</span> + ScBT
                    Np = <span style="color: #0000ff;">True</span>
                <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
            <span style="color: #0000ff;">Else</span>
                MsgBox ONE
                Np = <span style="color: #0000ff;">True</span>
            <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
        <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">Until</span> Np
        <span style="color: #0000ff;">If</span> <span style="color: #0000ff;">Not</span> Go <span style="color: #0000ff;">Then</span>
            Np = <span style="color: #0000ff;">False</span>
            cp = cp + <span style="color: #cc66cc;">1</span>
            <span style="color: #0000ff;">If</span> cp &gt; NbP <span style="color: #0000ff;">Then</span> cp = <span style="color: #cc66cc;">1</span>
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
    <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">Until</span> Go
    MsgBox Replace<span class="br0">&#40;</span>WIN, <span style="color: #FF0000;">&quot;&curren;&curren;&curren;&curren;&quot;</span>, cp<span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li><li style=""><b>Version populaire du Mastermind (Bulls and Cows) :</b><br />
Règles<br />
<ul><li style="">Tous les chiffres dans le nombre secret sont différents.</li><li style="">Si dans votre proposition il y a des chiffres du nombre secret, aux bons endroits, ce sont des Taureaux.</li><li style="">Si dans votre proposition il y a des chiffres du nombre secret, mais pas aux bons endroits, ce sont des Vaches.</li></ul><br />
<br />
Pour y jouer, copier-coller le code ci-dessous dans un Module standard et exécuter la Sub Bulls_And_Cows.<br />
<br />
Le code :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> Bulls_and_cows<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> strNb <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, strIn <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, strMsg <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, strTemp <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #0000ff;">Dim</span> boolEnd <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, CheatMode <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
<span style="color: #0000ff;">Dim</span> lngCpt <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
<span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, bytCow <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, bytBull <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>
<span style="color: #0000ff;">Const</span> NB_CHIFFRES <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">4</span>
<span style="color: #0000ff;">Const</span> MAX_ESSAIS <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">25</span>
    strNb = Nombre_Secret<span class="br0">&#40;</span>NB_CHIFFRES<span class="br0">&#41;</span>
    <span style="color: #0000ff;">If</span> MsgBox<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Voulez-vous tricher?&quot;</span>, vbYesNo<span class="br0">&#41;</span> = vbYes <span style="color: #0000ff;">Then</span> MsgBox strNb
    <span style="color: #0000ff;">Do</span>
        bytBull = <span style="color: #cc66cc;">0</span>: bytCow = <span style="color: #cc66cc;">0</span>: lngCpt = lngCpt + <span style="color: #cc66cc;">1</span>
        <span style="color: #0000ff;">If</span> lngCpt &gt; MAX_ESSAIS <span style="color: #0000ff;">Then</span> strMsg = <span style="color: #FF0000;">&quot;Maximum d'essais atteind. D&eacute;sol&eacute; partie perdue!&quot;</span>: <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Do</span>
        strIn = Question<span class="br0">&#40;</span>NB_CHIFFRES<span class="br0">&#41;</span>
        <span style="color: #0000ff;">If</span> strIn = <span style="color: #FF0000;">&quot;Exit Game&quot;</span> <span style="color: #0000ff;">Then</span> strMsg = <span style="color: #FF0000;">&quot;Abandon utilisateur&quot;</span>: <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Do</span>
        <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> Len<span class="br0">&#40;</span>strNb<span class="br0">&#41;</span>
            <span style="color: #0000ff;">If</span> Mid$<span class="br0">&#40;</span>strNb, i, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> = Mid$<span class="br0">&#40;</span>strIn, i, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span>
                bytBull = bytBull + <span style="color: #cc66cc;">1</span>
            <span style="color: #0000ff;">ElseIf</span> InStr<span class="br0">&#40;</span>strNb, Mid$<span class="br0">&#40;</span>strIn, i, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>
                bytCow = bytCow + <span style="color: #cc66cc;">1</span>
            <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
        <span style="color: #0000ff;">Next</span> i
        <span style="color: #0000ff;">If</span> bytBull = NB_CHIFFRES <span style="color: #0000ff;">Then</span>
            boolEnd = <span style="color: #0000ff;">True</span>: strMsg = <span style="color: #FF0000;">&quot;Vous gagnez en &quot;</span> &amp; lngCpt &amp; <span style="color: #FF0000;">&quot; essai&quot;</span> &amp; IIf<span class="br0">&#40;</span>lngCpt = <span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">&quot;&quot;</span>, <span style="color: #FF0000;">&quot;s&quot;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; !&quot;</span>
        <span style="color: #0000ff;">Else</span>
            strTemp = strTemp &amp; vbCrLf &amp; <span style="color: #FF0000;">&quot;Avec : &quot;</span> &amp; strIn &amp; <span style="color: #FF0000;">&quot; ,vous avez : &quot;</span> &amp; bytBull &amp; <span style="color: #FF0000;">&quot; taureaux, &quot;</span> &amp; bytCow &amp; <span style="color: #FF0000;">&quot; vaches.&quot;</span>
            MsgBox strTemp
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
    <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">While</span> <span style="color: #0000ff;">Not</span> boolEnd
    MsgBox strMsg
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
<span style="color: #0000ff;">Function</span> Nombre_Secret<span class="br0">&#40;</span>NbDigits <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #0000ff;">Dim</span> myColl <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> Collection
<span style="color: #0000ff;">Dim</span> strTemp <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #0000ff;">Dim</span> bytAlea <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>
    Randomize
    <span style="color: #0000ff;">Do</span>
        bytAlea = Int<span class="br0">&#40;</span><span class="br0">&#40;</span>Rnd * <span style="color: #cc66cc;">9</span><span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">Resume</span> <span style="color: #0000ff;">Next</span>
        myColl.Add <span style="color: #0000ff;">CStr</span><span class="br0">&#40;</span>bytAlea<span class="br0">&#41;</span>, <span style="color: #0000ff;">CStr</span><span class="br0">&#40;</span>bytAlea<span class="br0">&#41;</span>
        <span style="color: #0000ff;">If</span> Err &lt;&gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>
            <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
        <span style="color: #0000ff;">Else</span>
            strTemp = strTemp &amp; <span style="color: #0000ff;">CStr</span><span class="br0">&#40;</span>bytAlea<span class="br0">&#41;</span>
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
    <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">While</span> Len<span class="br0">&#40;</span>strTemp<span class="br0">&#41;</span> &lt; NbDigits
    Nombre_Secret = strTemp
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span>
<span style="color: #0000ff;">Function</span> Question<span class="br0">&#40;</span>NbDigits <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #0000ff;">Dim</span> boolGood <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, strIn <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>, NbDiff <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>
    <span style="color: #0000ff;">Do</span> <span style="color: #0000ff;">While</span> <span style="color: #0000ff;">Not</span> boolGood
        strIn = InputBox<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Entrez un nombre (&agrave; &quot;</span> &amp; NbDigits &amp; <span style="color: #FF0000;">&quot; chiffres)&quot;</span>, <span style="color: #FF0000;">&quot;Nombre&quot;</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">If</span> StrPtr<span class="br0">&#40;</span>strIn<span class="br0">&#41;</span> = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span> strIn = <span style="color: #FF0000;">&quot;Exit Game&quot;</span>: <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Do</span>
        <span style="color: #0000ff;">If</span> strIn &lt;&gt; <span style="color: #FF0000;">&quot;&quot;</span> <span style="color: #0000ff;">Then</span>
            <span style="color: #0000ff;">If</span> Len<span class="br0">&#40;</span>strIn<span class="br0">&#41;</span> = NbDigits <span style="color: #0000ff;">Then</span>
                NbDiff = <span style="color: #cc66cc;">0</span>
                <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> Len<span class="br0">&#40;</span>strIn<span class="br0">&#41;</span>
                    <span style="color: #0000ff;">If</span> Len<span class="br0">&#40;</span>Replace<span class="br0">&#40;</span>strIn, Mid$<span class="br0">&#40;</span>strIn, i, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>, <span style="color: #FF0000;">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &lt; NbDigits - <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">Then</span>
                        NbDiff = <span style="color: #cc66cc;">1</span>
                        <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">For</span>
                    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
                <span style="color: #0000ff;">Next</span> i
                <span style="color: #0000ff;">If</span> NbDiff = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span> boolGood = <span style="color: #0000ff;">True</span>
            <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
    <span style="color: #0000ff;">Loop</span>
    Question = strIn
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div></li></ol><br />
<br />
Enjoy !<br />
;)<br />
<br />
A++</blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6271/3-petits-jeux-tic-tac-toe-morpion-pig-the-dice-jeu-cochon-bulls-and-cows-mastermind/</guid>
		</item>
		<item>
			<title>Génération de chaîne de caractères aléatoires</title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6254/generation-chaine-caracteres-aleatoires/</link>
			<pubDate>Thu, 27 Sep 2018 10:15:28 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">___________________________________________________________________________________<br />
<br />
Bonjour,<br />
<br />
<br />
On peut, pour x raisons (obfuscation de code, génération de mots de passe, etc...), avoir besoin de générer des chaines de caractères complexes ET aléatoires.<br />
<br />
Je vous donne deux fonctions qui le font, pour vous...<br />
<br />
La première : GenerateStringAlea comporte deux arguments :<br />
<ol class="decimal"><li style="">n As Long : la longueur de la chaîne voulue (minimum 4 caractères),</li><li style="">e As Boolean : si True, évite la suite de 2 caractères similaires visuellement (exemple O0)</li></ol><br />
Dans cette fonction vous ne pouvez pas choisir le nombre de lettres Majuscules, minuscules, le nombre de chiffres ni de caractères spéciaux.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Function</span> GenerateStringAlea<span class="br0">&#40;</span>n <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, e <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #808080;">'create 1 String without pattern (just with the String's lenght and similar visually)</span>
<span style="color: #0000ff;">Dim</span> t <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, A <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, b <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, C <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, d <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
    Randomize Timer
    <span style="color: #0000ff;">If</span> n &lt; <span style="color: #cc66cc;">4</span> <span style="color: #0000ff;">Then</span>
        GenerateStringAlea = <span style="color: #FF0000;">&quot;Error. Numbers of characters is too small. Min : 4&quot;</span>
    <span style="color: #0000ff;">ElseIf</span> n &gt;= <span style="color: #cc66cc;">4</span> <span style="color: #0000ff;">And</span> n &lt; <span style="color: #cc66cc;">7</span> <span style="color: #0000ff;">Then</span>
        t = Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">122</span>, <span style="color: #cc66cc;">97</span><span class="br0">&#41;</span> &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">90</span>, <span style="color: #cc66cc;">65</span><span class="br0">&#41;</span> &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">57</span>, <span style="color: #cc66cc;">48</span><span class="br0">&#41;</span> &amp; Alea_Car_Spec$
        <span style="color: #0000ff;">For</span> j = <span style="color: #cc66cc;">5</span> <span style="color: #0000ff;">To</span> n
            i = Int<span class="br0">&#40;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">4</span> * Rnd<span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> i
                <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">1</span>: t = t &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">122</span>, <span style="color: #cc66cc;">97</span><span class="br0">&#41;</span>
                <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">2</span>: t = t &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">90</span>, <span style="color: #cc66cc;">65</span><span class="br0">&#41;</span>
                <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">3</span>: t = t &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">57</span>, <span style="color: #cc66cc;">48</span><span class="br0">&#41;</span>
                <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">4</span>: t = t &amp; Alea_Car_Spec$
            <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
        <span style="color: #0000ff;">Next</span> j
        GenerateStringAlea = Shuffle_Letters<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
    <span style="color: #0000ff;">Else</span>
        <span style="color: #0000ff;">Do</span>
            i = Int<span class="br0">&#40;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">4</span> * Rnd<span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> i
                <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">1</span>: t = t &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">122</span>, <span style="color: #cc66cc;">97</span><span class="br0">&#41;</span>: A = <span style="color: #0000ff;">True</span>
                <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">2</span>: t = t &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">90</span>, <span style="color: #cc66cc;">65</span><span class="br0">&#41;</span>: b = <span style="color: #0000ff;">True</span>
                <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">3</span>: t = t &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">57</span>, <span style="color: #cc66cc;">48</span><span class="br0">&#41;</span>: C = <span style="color: #0000ff;">True</span>
                <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">4</span>: t = t &amp; Alea_Car_Spec$: d = <span style="color: #0000ff;">True</span>
            <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
            <span style="color: #0000ff;">If</span> Len<span class="br0">&#40;</span>t<span class="br0">&#41;</span> &gt;= <span style="color: #cc66cc;">2</span> <span style="color: #0000ff;">And</span> e <span style="color: #0000ff;">Then</span>
                <span style="color: #0000ff;">If</span> Similar_Characters<span class="br0">&#40;</span>t<span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span> t = Left$<span class="br0">&#40;</span>t, Len<span class="br0">&#40;</span>t<span class="br0">&#41;</span> - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
            <span style="color: #0000ff;">If</span> Len<span class="br0">&#40;</span>t<span class="br0">&#41;</span> = n <span style="color: #0000ff;">Then</span>
                <span style="color: #0000ff;">If</span> A <span style="color: #0000ff;">And</span> b <span style="color: #0000ff;">And</span> C <span style="color: #0000ff;">And</span> d <span style="color: #0000ff;">Then</span>
                    <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Do</span>
                <span style="color: #0000ff;">Else</span>
                    Efface t, A, b, C, d
                    GenerateStringAlea = GenerateStringAlea<span class="br0">&#40;</span>n, e<span class="br0">&#41;</span>
                <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
            <span style="color: #0000ff;">ElseIf</span> Len<span class="br0">&#40;</span>t<span class="br0">&#41;</span> &gt; n <span style="color: #0000ff;">Then</span>
                Efface t, A, b, C, d
                GenerateStringAlea = GenerateStringAlea<span class="br0">&#40;</span>n, e<span class="br0">&#41;</span>
            <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
        <span style="color: #0000ff;">Loop</span>
        GenerateStringAlea = Shuffle_Letters<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div><br />
La seconde : GenerateStringAleaPattern comporte également deux arguments :<br />
<ol class="decimal"><li style="">s As String : le &quot;pattern&quot; souhaité (cf exemple ci-dessous),</li><li style="">e As Boolean : si True, évite la suite de 2 caractères similaires visuellement (exemple O0)</li></ol><br />
Exemple de Pattern : &quot;<b><font color="#FF0000">A/</font></b>9<b><font color="#FF0000">-a/</font></b>1<b><font color="#FF0000">-9/</font></b>4<b><font color="#FF0000">-!/</font></b>5&quot;<br />
Les caractères rouge et gras ci-dessus ne sont pas obligatoires, mais il faut conserver les mêmes séparateurs : / et - ET ne pas remplacer A, a, 9 ou ! par d'autres caractères.<br />
La signification :<br />
<ul><li style="">A/9 := 9 majuscules</li><li style="">a/1 := 1 minuscule</li><li style="">9/4 := 4 chiffres</li><li style="">!/5 := 5 caractères spéciaux</li></ul><br />
Autres patterns possibles, sans chiffres : &quot;A/5-a/2-!/3&quot; ou encore sans caractères minuscules : &quot;A/8-9/5-!/3&quot;, etc. tout est envisageable... (&quot;A/19&quot; vous fournira une chaîne de 19 majuscules)<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Function</span> GenerateStringAleaPattern<span class="br0">&#40;</span>s <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, e <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #808080;">'create 1 String with pattern</span>
<span style="color: #0000ff;">Dim</span> A, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, st <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, Nb <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
    A = Split<span class="br0">&#40;</span>s, <span style="color: #FF0000;">&quot;-&quot;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>A<span class="br0">&#41;</span>
        <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> Left$<span class="br0">&#40;</span>A<span class="br0">&#40;</span>i<span class="br0">&#41;</span>, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">Case</span> <span style="color: #FF0000;">&quot;A&quot;</span>
                Nb = <span style="color: #0000ff;">CLng</span><span class="br0">&#40;</span>Split<span class="br0">&#40;</span>A<span class="br0">&#40;</span>i<span class="br0">&#41;</span>, <span style="color: #FF0000;">&quot;/&quot;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>: j = <span style="color: #cc66cc;">0</span>
                <span style="color: #0000ff;">Do</span>
                    j = j + <span style="color: #cc66cc;">1</span>
                    st = st &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">90</span>, <span style="color: #cc66cc;">65</span><span class="br0">&#41;</span>
                    <span style="color: #0000ff;">If</span> Len<span class="br0">&#40;</span>st<span class="br0">&#41;</span> &gt;= <span style="color: #cc66cc;">2</span> <span style="color: #0000ff;">And</span> e <span style="color: #0000ff;">Then</span>
                        <span style="color: #0000ff;">If</span> Similar_Characters<span class="br0">&#40;</span>st<span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span> st = Left$<span class="br0">&#40;</span>st, Len<span class="br0">&#40;</span>st<span class="br0">&#41;</span> - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>: j = j - <span style="color: #cc66cc;">1</span>
                    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
                <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">While</span> j &lt; Nb
            <span style="color: #0000ff;">Case</span> <span style="color: #FF0000;">&quot;a&quot;</span>
                Nb = <span style="color: #0000ff;">CLng</span><span class="br0">&#40;</span>Split<span class="br0">&#40;</span>A<span class="br0">&#40;</span>i<span class="br0">&#41;</span>, <span style="color: #FF0000;">&quot;/&quot;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>: j = <span style="color: #cc66cc;">0</span>
                <span style="color: #0000ff;">Do</span>
                    j = j + <span style="color: #cc66cc;">1</span>
                    st = st &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">122</span>, <span style="color: #cc66cc;">97</span><span class="br0">&#41;</span>
                    <span style="color: #0000ff;">If</span> Len<span class="br0">&#40;</span>st<span class="br0">&#41;</span> &gt;= <span style="color: #cc66cc;">2</span> <span style="color: #0000ff;">And</span> e <span style="color: #0000ff;">Then</span>
                        <span style="color: #0000ff;">If</span> Similar_Characters<span class="br0">&#40;</span>st<span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span> st = Left$<span class="br0">&#40;</span>st, Len<span class="br0">&#40;</span>st<span class="br0">&#41;</span> - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>: j = j - <span style="color: #cc66cc;">1</span>
                    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
                <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">While</span> j &lt; Nb
            <span style="color: #0000ff;">Case</span> <span style="color: #FF0000;">&quot;9&quot;</span>
                Nb = <span style="color: #0000ff;">CLng</span><span class="br0">&#40;</span>Split<span class="br0">&#40;</span>A<span class="br0">&#40;</span>i<span class="br0">&#41;</span>, <span style="color: #FF0000;">&quot;/&quot;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>: j = <span style="color: #cc66cc;">0</span>
                <span style="color: #0000ff;">Do</span>
                    j = j + <span style="color: #cc66cc;">1</span>
                    st = st &amp; Alea_Caract$<span class="br0">&#40;</span><span style="color: #cc66cc;">57</span>, <span style="color: #cc66cc;">48</span><span class="br0">&#41;</span>
                    <span style="color: #0000ff;">If</span> Len<span class="br0">&#40;</span>st<span class="br0">&#41;</span> &gt;= <span style="color: #cc66cc;">2</span> <span style="color: #0000ff;">And</span> e <span style="color: #0000ff;">Then</span>
                        <span style="color: #0000ff;">If</span> Similar_Characters<span class="br0">&#40;</span>st<span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span> st = Left$<span class="br0">&#40;</span>st, Len<span class="br0">&#40;</span>st<span class="br0">&#41;</span> - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>: j = j - <span style="color: #cc66cc;">1</span>
                    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
                <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">While</span> j &lt; Nb
            <span style="color: #0000ff;">Case</span> <span style="color: #FF0000;">&quot;!&quot;</span>
                Nb = <span style="color: #0000ff;">CLng</span><span class="br0">&#40;</span>Split<span class="br0">&#40;</span>A<span class="br0">&#40;</span>i<span class="br0">&#41;</span>, <span style="color: #FF0000;">&quot;/&quot;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>: j = <span style="color: #cc66cc;">0</span>
                <span style="color: #0000ff;">Do</span>
                    j = j + <span style="color: #cc66cc;">1</span>
                    st = st &amp; Alea_Car_Spec$
                    <span style="color: #0000ff;">If</span> Len<span class="br0">&#40;</span>st<span class="br0">&#41;</span> &gt;= <span style="color: #cc66cc;">2</span> <span style="color: #0000ff;">And</span> e <span style="color: #0000ff;">Then</span>
                        <span style="color: #0000ff;">If</span> Similar_Characters<span class="br0">&#40;</span>st<span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span> st = Left$<span class="br0">&#40;</span>st, Len<span class="br0">&#40;</span>st<span class="br0">&#41;</span> - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>: j = j - <span style="color: #cc66cc;">1</span>
                    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
                <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">While</span> j &lt; Nb
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
    <span style="color: #0000ff;">Next</span> i
    GenerateStringAleaPattern = Shuffle_Letters<span class="br0">&#40;</span>st<span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div><br />
Ces deux fonctions utilisent les fonctions suivantes  :<br />
Retourne un caractère aléatoire, soit Majuscule, soit minuscule, soit numérique :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:96px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Function</span> Alea_Caract<span class="br0">&#40;</span>M <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, L <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #808080;">'random 1 character in lower or upper case, or numeric</span>
    Randomize Timer
    Alea_Caract = Chr$<span class="br0">&#40;</span>Int<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>M - L + <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> * Rnd<span class="br0">&#41;</span> + L<span class="br0">&#41;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div>Retourne un caractère spécial aléatoire :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:108px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Function</span> Alea_Car_Spec<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #808080;">'random 1 character &quot;special&quot;</span>
<span style="color: #0000ff;">Const</span> CHAINE = <span style="color: #FF0000;">&quot;!&quot;</span><span style="color: #FF0000;">&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[]_<span style="color: black;"><span class="br0">&#123;</span>|<span class="br0">&#125;</span></span>~&quot;</span>
    Randomize Timer
    Alea_Car_Spec = Mid$<span class="br0">&#40;</span>CHAINE, Int<span class="br0">&#40;</span><span class="br0">&#40;</span>Len<span class="br0">&#40;</span>CHAINE<span class="br0">&#41;</span> * Rnd<span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div>Rien de spécial, vide les 5 variables qui lui sont passées en argument :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Efface<span class="br0">&#40;</span>t <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, A <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, b <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, C <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, d <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span><span class="br0">&#41;</span>
    t = vbNullString: A = <span style="color: #0000ff;">False</span>: b = <span style="color: #0000ff;">False</span>: C = <span style="color: #0000ff;">False</span>: d = <span style="color: #0000ff;">False</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div>Permet l'exclusion d'un caractère s'il est visuellement similaire à celui qui le précède :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:168px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Function</span> Similar_Characters<span class="br0">&#40;</span>s <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
<span style="color: #808080;">'option of excluding visually similar characters</span>
<span style="color: #0000ff;">Dim</span> t, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
<span style="color: #0000ff;">Const</span> COUPLES <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Il I1 l1 lI 1l 1I ]l l] 0O O0 5S S5 2Z 2? Z? Z2 ?2 ?Z DO OD&quot;</span>
    t = Split<span class="br0">&#40;</span>COUPLES, <span style="color: #FF0000;">&quot; &quot;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
        <span style="color: #0000ff;">If</span> Right$<span class="br0">&#40;</span>s, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> = t<span class="br0">&#40;</span>i<span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span>
            Similar_Characters = <span style="color: #0000ff;">True</span>: <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">For</span>
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
    <span style="color: #0000ff;">Next</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div>Mélange les caractères d'une chaîne :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:156px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Function</span> Shuffle_Letters<span class="br0">&#40;</span>s <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #808080;">'shuffle the String's letters only if pattern</span>
<span style="color: #0000ff;">Dim</span> i&amp;, t, R <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, d<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
    t = Split<span class="br0">&#40;</span>StrConv<span class="br0">&#40;</span>s, vbUnicode<span class="br0">&#41;</span>, Chr$<span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
    d = Best_shuffle<span class="br0">&#40;</span>UBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
        R = R &amp; t<span class="br0">&#40;</span>d<span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">Next</span> i
    Shuffle_Letters = Left$<span class="br0">&#40;</span>R, Len<span class="br0">&#40;</span>R<span class="br0">&#41;</span> - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div>Mélange les indices d'un Array à 1 dimension : (L étant l'UBound de l'array)<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Function</span> Best_shuffle<span class="br0">&#40;</span>L <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, ou <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, temp<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
<span style="color: #0000ff;">Dim</span> C <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> Collection
    <span style="color: #0000ff;">ReDim</span> temp<span class="br0">&#40;</span>L<span class="br0">&#41;</span>
    <span style="color: #0000ff;">If</span> L = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">Then</span>
        temp<span class="br0">&#40;</span>LBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span><span class="br0">&#41;</span> = <span style="color: #cc66cc;">0</span>
    <span style="color: #0000ff;">ElseIf</span> L = <span style="color: #cc66cc;">2</span> <span style="color: #0000ff;">Then</span>
        temp<span class="br0">&#40;</span>LBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span><span class="br0">&#41;</span> = <span style="color: #cc66cc;">1</span>: temp<span class="br0">&#40;</span>UBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span><span class="br0">&#41;</span> = <span style="color: #cc66cc;">0</span>
    <span style="color: #0000ff;">Else</span>
        Randomize
         i = LBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span>
        <span style="color: #0000ff;">Do</span>
            ou = Int<span class="br0">&#40;</span>Rnd * L<span class="br0">&#41;</span>
            <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">Resume</span> <span style="color: #0000ff;">Next</span>
            C.Add <span style="color: #0000ff;">CStr</span><span class="br0">&#40;</span>ou<span class="br0">&#41;</span>, <span style="color: #0000ff;">CStr</span><span class="br0">&#40;</span>ou<span class="br0">&#41;</span>
            <span style="color: #0000ff;">If</span> Err &lt;&gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>
                <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
            <span style="color: #0000ff;">Else</span>
                <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
                temp<span class="br0">&#40;</span>ou<span class="br0">&#41;</span> = i
                i = i + <span style="color: #cc66cc;">1</span>
            <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
        <span style="color: #0000ff;">Loop</span> <span style="color: #0000ff;">While</span> C.Count &lt;&gt; L
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
    Best_shuffle = temp
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div><br />
Vous pouvez, à loisir, modifier les deux constantes :<br />
1- Dans la Function Alea_Car_Spec()<br />
Const CHAINE = &quot;!&quot;&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[]_{|}~&quot;<br />
2- Dans la Function Similar_Characters()<br />
Const COUPLES As String = &quot;Il I1 l1 lI 1l 1I ]l l] 0O O0 5S S5 2Z 2? Z? Z2 ?2 ?Z DO OD&quot;<br />
<br />
Enjoy it !</blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6254/generation-chaine-caracteres-aleatoires/</guid>
		</item>
		<item>
			<title>ComboBox : Rendre la saisie impossible si celle-ci ne figure pas dans la propriété List</title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6175/combobox-rendre-saisie-impossible-celle-ne-figure-propriete-list/</link>
			<pubDate>Fri, 14 Sep 2018 13:59:50 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">_______________________________________________________<br />
<br />
<br />
<b><u>Préambule :</u></b><br />
<br />
La question est :<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				Je souhaiterais empêcher toute saisie si le texte entrant dans la ComboBox ne correspond pas à la liste initiale du contrôle.
			
		</div>
	</div>
</div>Voici donc ce que je vous proposes...<br />
<br />
<ol class="decimal"><li style=""><b><u>Description du contrôle ComboBox :</u></b><br />
Un contrôle ComboBox est composé de deux éléments : <br />
<ul><li style="">Une partie texte (similaire à un contrôle TextBox) qui est la zone de saisie du contrôle,</li><li style="">Une partie liste (similaire à un contrôle ListBox) qui est la zone de liste (déroulante) de ce contrôle.</li></ul><br />
Cette description est à conserver dans un coin de votre mémoire, nous nous en servirons plus tard dans cette contribution.<br />
<br /></li><li style=""><b><u>Les propriétés intéressantes :</u></b><br />
La totalité de ces détails sont issus de l'aide VBA (qui en comporte encore de nombreux, n'hésitez pas à la consulter). <br />
Je n'invente donc rien.<br />
<ul><li style=""><font color="#800000"><b>La propriété Style.</b></font><br />
Pour un contrôle ComboBox, spécifie de quelle façon l'utilisateur va utiliser le contrôle.<br />
Les valeurs de <u>fmStyle</u> sont les suivantes :<br />
<ul><li style=""><i><font color="#0000CD">fmStyleDropDownCombo</font></i> (Valeur : 0) : Le contrôle ComboBox se comporte comme une liste modifiable déroulante. <br />
L'utilisateur peut saisir une valeur dans la zone d'édition ou en sélectionner une dans la liste déroulante (par défaut).</li><li style=""><i><font color="#0000CD">fmStyleDropDownList</font></i> (Valeur : 2) : Le contrôle ComboBox se comporte comme une zone de liste. <br />
L'utilisateur doit choisir une valeur dans la liste.</li></ul></li><li style=""><font color="#800000"><b>La propriété MatchEntry.</b></font><br />
Nous ne l'utiliserons pas ici, mais elle mérite d'être connue.<br />
Renvoie ou définit une valeur indiquant la façon dont un contrôle ListBox ou ComboBox fait des recherche dans ses listes pendant la saisie de l'utilisateur.<br />
<ul><li style=""><i><font color="#0000CD">fmMatchEntryFirstLetter</font></i> (Valeur : 0) : Correspondance de base. Le contrôle recherche l'entrée suivante qui commence par le caractère saisi. <br />
La frappe répétée de la même lettre parcourt toutes les entrées commençant par cette lettre.</li><li style=""><i><font color="#0000CD">fmMatchEntryComplete</font></i> (Valeur : 1) : Correspondance étendue. <br />
Pour la frappe de chaque caractère, le contrôle recherche une entrée correspondant à tous les caractères saisis (par défaut).</li><li style=""><i><font color="#0000CD">fmMatchEntryNone</font></i> (Valeur : 2) : Aucune correspondance.</li></ul></li><li style=""><font color="#800000"><b>La propriété MatchRequired.</b></font><br />
Spécifie si une valeur saisie dans la partie texte d'un contrôle ComboBox doit correspondre à une entrée de la partie liste existante du contrôle. L'utilisateur peut taper des valeurs non correspondantes, mais ne peut pas quitter le contrôle sans qu'une valeur correspondante soit saisie. </li></ul><br /></li><li style=""><b><u>Démarche :</u></b><br />
<ul><li style="">Premier cas : Utilisation de la liste comme une liste déroulante modifiable, la propriété Style réglée sur <i>fmStyleDropDownCombo</i>.<br />
Ici, l’utilisateur peut saisir exactement ce qu’il souhaite. <br />
Pour obtenir le résultat escompté ici, il nous faut donc ajouter une autre propriété l’empêchant de faire n’importe quoi. La propriété <u>MatchRequired</u> est idéale pour cela : L'utilisateur peut taper des valeurs non correspondantes, mais ne peut pas quitter le contrôle sans qu'une valeur correspondante soit saisie.<br />
Parfait !<br />
Le code est donc :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:84px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0">   <span style="color: #0000ff;">With</span> ComboBox1
      .Style = fmStyleDropDownCombo
      .MatchRequired = <span style="color: #0000ff;">True</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span></pre></td></tr></table></pre>
</div><br />
Ce code est fonctionnel, mais voilà, l’utilisateur se plaint qu’il n’y a pas de vérification en cours de saisie et qu'en cas d'erreur, il ne le sait qu'à la fin...<br />
<br /></li><li style="">Second cas : Utilisation de la liste comme une zone de liste, la propriété Style réglée sur <i>fmStyleDropDown</i>.<br />
Eh bien, dans ce cas, rien à ajouter. Le code est donc :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0">   <span style="color: #0000ff;">With</span> ComboBox1
      .Style = fmStyleDropDownList
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span></pre></td></tr></table></pre>
</div>Le gros bémol de cette méthode réside dans le fait que, dès que l’utilisateur saisi un caractère correct, la zone de texte est complétée par le premier item correspondant dans la liste. <br />
L’utilisateur ne visualise plus ou il en est de sa saisie. <br />
Les contrôles ComboBox ne disposant pas des propriétés SelLenght et SelStart, ce souci ne peut être résolu.</li></ul><br /></li><li style=""><b><u>Particularité à prendre en compte absolument :</u></b><br />
Ces codes, extrêmement simples, ne sont pas applicables tels quels selon les types de données entrées dans la liste.<br />
J’en reviens à ma description. <br />
La zone de saisie renvoie systématiquement une donnée de type String (VarType = 8). <br />
La zone de liste, elle, est de type Variant/Variant (VarType = 8204 [8192 (Variant Tableau) + 12 (Variant)]. <br />
Lorsque cette liste contient des items numériques, des dates, des valeurs de type Currency (etc…), le type de chacun de ses items est Variant/Type de l’item. <br />
Soit, pour une date, de type Variant/Date.<br />
<br />
Lors de l’utilisation des codes donnés plus haut, si vos données ne sont pas de type String, la comparaison entre la zone de texte et la zone de liste ne trouvera aucune correspondance.<br />
Il convient donc, pour tous les types de données cités ci-dessous, de convertir toute la liste avant de l’attribuer au contrôle ComboBox.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				Types de données à convertir absolument :<br />
Integer<br />
Long<br />
Single<br />
Double<br />
Currency<br />
Date<br />
Byte<br />
LongLong
			
		</div>
	</div>
</div></li><li style=""><b><u>Codes à appliquer pour ces cas : </u></b><br />
Note : Je ne m’attarde pas ici sur les variables tableaux et utilise des bornes figées. A vous d’adapter cela à votre contexte.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:192px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> UserForm_Activate<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> L<span class="br0">&#40;</span><span style="color: #cc66cc;">364</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, v <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span>, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   <span style="color: #808080;">' transfert des donn&eacute;es en m&eacute;moire</span>
   v = Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;C1:C365&quot;</span><span class="br0">&#41;</span>.Value
   <span style="color: #808080;">' Conversion des donn&eacute;es en String</span>
   <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">365</span>
      L<span class="br0">&#40;</span>i - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> = v<span class="br0">&#40;</span>i, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">With</span> ComboBox1
      .List = L
      .Style = fmStyleDropDownCombo
      .MatchRequired = <span style="color: #0000ff;">True</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:192px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> UserForm_Activate<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> L<span class="br0">&#40;</span><span style="color: #cc66cc;">364</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, v <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span>, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   <span style="color: #808080;">' transfert des donn&eacute;es en m&eacute;moire</span>
   v = Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;C1:C365&quot;</span><span class="br0">&#41;</span>.Value
   <span style="color: #808080;">' Conversion des donn&eacute;es en String</span>
   <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">365</span>
      L<span class="br0">&#40;</span>i - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> = v<span class="br0">&#40;</span>i, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">With</span> ComboBox1 
      .List = L
      .Style = fmStyleDropDownList
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div><br /></li><li style=""><b><u>Cas très particulier :</u></b><br />
L'alimentation du contrôle ComboBox via sa propriété rowSource.<br />
Cela ne pose pas de problème pour des données numériques ou du texte. Les codes donnés ci-dessus restent fonctionnels.<br />
Cependant, si vous entrez, par cette propriété, des données de type Date, dans votre ComboBox, ces codes ne fonctionneront pas, les Dates étant stockées sous forme numérique dans la feuille.</li></ol><br />
<br />
Il existe très certainement des petits soucis, dus principalement à une méconnaissance de l'utilisation de ce contrôle, mais vous devriez pouvoir satisfaire vos utilisateurs.<br />
Certaines touches sont appréciables : Echap, flèche vers le haut (ou vers le bas)...<br />
 :f1:<br />
<br />
A bientôt<br />
Franck</blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6175/combobox-rendre-saisie-impossible-celle-ne-figure-propriete-list/</guid>
		</item>
		<item>
			<title>Le jeu du Démineur</title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6171/jeu-demineur/</link>
			<pubDate>Fri, 14 Sep 2018 13:49:01 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">________________________________________________<br />
<br />
<br />
Bonjour,<br />
<br />
Pas de blabla, du résul... Euh non, du code !<br />
<br />
Aujourd'hui, un petit démineur sous UserForm.<br />
Vous aurez besoin :<br />
&gt; d'un module de classe nommé : ClassDemineur<br />
&gt; d'un module standard.<br />
<br />
ATTENTION :<br />
Nécessite de cocher les deux références suivantes (Menu Outils/Références)<br />
&gt; Microsoft Forms 2.0 Object Library<br />
&gt; Microsoft Visual Basic For Applications Extensibility 5.3<br />
Et : &quot;accès approuvé au modèle objet du projet VBA&quot; doit être cochée dans les options Excel.<br />
<br />
<b>Code du module de Classe :</b><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br />230<br />231<br />232<br />233<br />234<br />235<br />236<br />237<br />238<br />239<br />240<br />241<br />242<br />243<br />244<br />245<br />246<br />247<br />248<br />249<br />250<br />251<br />252<br />253<br />254<br />255<br />256<br />257<br />258<br />259<br />260<br />261<br />262<br />263<br />264<br />265<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
<span style="color: #808080;">'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</span>
<span style="color: #808080;">'N&eacute;cessite de cocher les deux r&eacute;f&eacute;rences suivantes (Menu Outils/R&eacute;f&eacute;rences)</span>
    <span style="color: #808080;">'Microsoft Forms 2.0 Object Library</span>
    <span style="color: #808080;">'Microsoft Visual Basic For Applications Extensibility 5.3</span>
<span style="color: #808080;">'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</span>
&nbsp;
<span style="color: #808080;">'Variables publiques</span>
<span style="color: #0000ff;">Public</span> maForm <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>                                         <span style="color: #808080;">'Userform</span>
<span style="color: #0000ff;">Public</span> Fram <span style="color: #0000ff;">As</span> MSForms.Frame                                    <span style="color: #808080;">'Frame = conteneur des boutons</span>
<span style="color: #0000ff;">Public</span> Dico <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>                                           <span style="color: #808080;">'Objet dictionary</span>
<span style="color: #0000ff;">Public</span> DicoParent <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>                                     <span style="color: #808080;">'Objet dictionary</span>
<span style="color: #0000ff;">Public</span> Mine <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>                                          <span style="color: #808080;">'Propri&eacute;t&eacute; Mine si True = bouton pi&eacute;g&eacute;</span>
<span style="color: #0000ff;">Public</span> Decouverte <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>                                    <span style="color: #808080;">'Propri&eacute;t&eacute; D&eacute;couverte si True = &quot;terrain(bouton) d&eacute;min&eacute;&quot;</span>
<span style="color: #808080;">'variables priv&eacute;es</span>
<span style="color: #0000ff;">Private</span> Nom <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>                                           <span style="color: #808080;">'Nom =&gt; permet la construction et la destruction de l'userform</span>
<span style="color: #0000ff;">Private</span> cVoisins<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> ClassDemineur                                 <span style="color: #808080;">'propri&eacute;t&eacute; sous forme de tableau listant les boutons voisins</span>
<span style="color: #808080;">'variables publiques &quot;&eacute;v&eacute;nementielles&quot;</span>
<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">WithEvents</span> Bouton <span style="color: #0000ff;">As</span> MSForms.CommandButton               <span style="color: #808080;">'Bouton</span>
<span style="color: #808080;">'constantes</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> LARG_BTN <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">18</span>                             <span style="color: #808080;">'taille des boutons</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> MIN_LIGN <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">7</span>                              <span style="color: #808080;">'minimum de lignes</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> MAX_LIGN <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">30</span> - MIN_LIGN                  <span style="color: #808080;">'maximum de lignes</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> MIN_COL <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">7</span>                               <span style="color: #808080;">'minimum de colonnes</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> MAX_COL <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">40</span> - MIN_COL                    <span style="color: #808080;">'maximum de colonnes</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> POURCENT_SIMPLE <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">10</span>                      <span style="color: #808080;">'%age de mines en mode facile</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> POURCENT_MEDIUM <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">2</span> * POURCENT_SIMPLE     <span style="color: #808080;">'%age de mines en mode m&eacute;dium</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> POURCENT_HARD <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span> = <span style="color: #cc66cc;">3</span> * POURCENT_SIMPLE       <span style="color: #808080;">'%age de mines en mode difficile</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> COUL_MINE <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span> = <span style="color: #cc66cc;">&amp;H188B0</span>                       <span style="color: #808080;">'couleur des boutons min&eacute;s (pour les d&eacute;voiler)</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> COUL_BOUTON <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span> = <span style="color: #cc66cc;">&amp;H8000000F</span>                  <span style="color: #808080;">'couleur des boutons</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> COUL_MINE_POSSIBLE <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span> = <span style="color: #cc66cc;">&amp;HFFFFFF</span>             <span style="color: #808080;">'couleur si bouton possiblement min&eacute; (bouton affiche ?) =&gt; doute</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> COUL_MINE_PROB <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span> = <span style="color: #cc66cc;">&amp;H8080FF</span>                 <span style="color: #808080;">'couleur si bouton probablement min&eacute; (bouton affiche !) =&gt; attention danger</span>
&nbsp;
<span style="color: #0000ff;">Property</span> <span style="color: #0000ff;">Get</span> Voisins<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> ClassDemineur<span class="br0">&#40;</span><span class="br0">&#41;</span>                           <span style="color: #808080;">'propri&eacute;t&eacute; de type tableau</span>
<span style="color: #808080;">'propri&eacute;t&eacute; Voisins en Lecture</span>
   Voisins = cVoisins
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Property</span>
&nbsp;
<span style="color: #0000ff;">Property</span> <span style="color: #0000ff;">Let</span> Voisins<span class="br0">&#40;</span><span style="color: #0000ff;">ByRef</span> nouvVoisins<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> ClassDemineur<span class="br0">&#41;</span>
<span style="color: #808080;">'propri&eacute;t&eacute; Voisins en Ecriture</span>
   cVoisins = nouvVoisins
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Property</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Class_Initialize<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #808080;">'constructeur de la classe cD&eacute;mineur</span>
   <span style="color: #0000ff;">Set</span> Dico = CreateObject<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Scripting.dictionary&quot;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> Show<span class="br0">&#40;</span><span style="color: #0000ff;">ByRef</span> Difficult <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, <span style="color: #0000ff;">Optional</span> ModeTriche <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span> = <span style="color: #0000ff;">False</span><span class="br0">&#41;</span>
<span style="color: #808080;">'M&eacute;thode Show : permet l'affichage de l'Userform</span>
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> ErreurParametresMacros        <span style="color: #808080;">'V&eacute;rification si &quot;acc&egrave;s approuv&eacute; au mod&egrave;le objet du projet VBA&quot; est coch&eacute;e dans les options Excel</span>
   <span style="color: #0000ff;">With</span> ThisWorkbook.VBProject: <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
   <span style="color: #0000ff;">Dim</span> Lign <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, Col <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, NbLignes <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, NbColonnes <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   <span style="color: #0000ff;">Dim</span> NbMines <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, MineAdress<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, CptMine <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   Randomize Timer                             <span style="color: #808080;">'initialisation g&eacute;n&eacute;rateur de nombres al&eacute;atoires</span>
   NbLignes = Int<span class="br0">&#40;</span>MAX_LIGN * Rnd<span class="br0">&#41;</span> + MIN_LIGN   <span style="color: #808080;">'Nombre de lignes de boutons</span>
   NbColonnes = Int<span class="br0">&#40;</span>MAX_COL * Rnd<span class="br0">&#41;</span> + MIN_COL   <span style="color: #808080;">'Nombre de colonnes de boutons</span>
   <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> Difficult                       <span style="color: #808080;">'Nombre de Mines selon la difficult&eacute; choisie</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">0</span>: Difficult = POURCENT_SIMPLE
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">1</span>: Difficult = POURCENT_MEDIUM
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">2</span>: Difficult = POURCENT_HARD
      <span style="color: #0000ff;">Case</span> <span style="color: #0000ff;">Else</span>: <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Sub</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
   NbMines = <span class="br0">&#40;</span>NbLignes * NbColonnes<span class="br0">&#41;</span> * Difficult \ <span style="color: #cc66cc;">100</span>
   <span style="color: #0000ff;">ReDim</span> MineAdress<span class="br0">&#40;</span>NbMines<span class="br0">&#41;</span>
   <span style="color: #0000ff;">For</span> CptMine = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> NbMines                 <span style="color: #808080;">'coordonn&eacute;es des Mines : Col-Lig</span>
      MineAdress<span class="br0">&#40;</span>CptMine<span class="br0">&#41;</span> = Int<span class="br0">&#40;</span>NbColonnes * Rnd<span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span> &amp; <span style="color: #FF0000;">&quot;-&quot;</span> &amp; Int<span class="br0">&#40;</span>NbLignes * Rnd<span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span>
   <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">Call</span> Creation_Usf<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;D&eacute;mineur&quot;</span>, <span class="br0">&#40;</span>NbColonnes * LARG_BTN<span class="br0">&#41;</span> + <span style="color: #cc66cc;">5</span>, <span class="br0">&#40;</span>NbLignes * LARG_BTN<span class="br0">&#41;</span> + <span style="color: #cc66cc;">22</span><span class="br0">&#41;</span>  <span style="color: #808080;">'cr&eacute;ation Userfom</span>
   <span style="color: #0000ff;">Call</span> Nouveau_Frame<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Fram1&quot;</span>, <span style="color: #FF0000;">&quot;&quot;</span>, NbColonnes * LARG_BTN, NbLignes * LARG_BTN<span class="br0">&#41;</span>             <span style="color: #808080;">'cr&eacute;ation Frame</span>
   <span style="color: #0000ff;">For</span> Lign = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> NbLignes                                                                <span style="color: #808080;">'cr&eacute;ation Boutons</span>
      <span style="color: #0000ff;">For</span> Col = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> NbColonnes
         <span style="color: #808080;">'les noms des boutons : Col-Lig</span>
         <span style="color: #0000ff;">Call</span> Dico<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Fram1&quot;</span><span class="br0">&#41;</span>.Nouveau_Bouton<span class="br0">&#40;</span>Col &amp; <span style="color: #FF0000;">&quot;-&quot;</span> &amp; Lign, <span style="color: #FF0000;">&quot;&quot;</span>, LARG_BTN * <span class="br0">&#40;</span>Col - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>, LARG_BTN * <span class="br0">&#40;</span>Lign - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>, EstDans<span class="br0">&#40;</span>Col &amp; <span style="color: #FF0000;">&quot;-&quot;</span> &amp; Lign, MineAdress<span class="br0">&#41;</span>, ModeTriche<span class="br0">&#41;</span>
         <span style="color: #0000ff;">Set</span> Dico<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Fram1&quot;</span><span class="br0">&#41;</span>.Dico<span class="br0">&#40;</span>Col &amp; <span style="color: #FF0000;">&quot;-&quot;</span> &amp; Lign<span class="br0">&#41;</span>.DicoParent = Dico<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Fram1&quot;</span><span class="br0">&#41;</span>.Dico
      <span style="color: #0000ff;">Next</span> Col
   <span style="color: #0000ff;">Next</span> Lign
   maForm.Tag = Timer  <span style="color: #808080;">'stockage de l'heure de d&eacute;but de partie dans la propri&eacute;t&eacute; Tag de l'userform</span>
   maForm.Show         <span style="color: #808080;">'affichage du d&eacute;mineur</span>
   <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Sub</span>
ErreurParametresMacros:
   MsgBox <span style="color: #FF0000;">&quot;Veuillez v&eacute;rifier que vous avez approuv&eacute; l'acc&egrave;s au mod&egrave;le objet du projet VBA.&quot;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Creation_Usf<span class="br0">&#40;</span>Titre <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, Largeur <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>, Hauteur <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span><span class="br0">&#41;</span>
<span style="color: #808080;">'cr&eacute;ation Userfom</span>
   <span style="color: #0000ff;">Set</span> maForm = ThisWorkbook.VBProject.VBComponents.Add<span class="br0">&#40;</span><span style="color: #cc66cc;">3</span><span class="br0">&#41;</span>  <span style="color: #808080;">'on ajoute au projet un module d'userform</span>
   Nom = maForm.Name                                        <span style="color: #808080;">'on prend son nom</span>
   VBA.UserForms.Add <span class="br0">&#40;</span>Nom<span class="br0">&#41;</span>                                  <span style="color: #808080;">'on ajoute l'userform au projet VBA</span>
   <span style="color: #0000ff;">Set</span> maForm = UserForms<span class="br0">&#40;</span>UserForms.Count - <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>              <span style="color: #808080;">'on affecte cet userform &agrave; notre variable objet</span>
   <span style="color: #0000ff;">With</span> maForm                                              <span style="color: #808080;">'on lui affecte certaines propri&eacute;t&eacute;s</span>
      .Caption = Titre                                      <span style="color: #808080;">'titre</span>
      .Width = Largeur                                      <span style="color: #808080;">'largeur</span>
      .Height = Hauteur                                     <span style="color: #808080;">'hauteur</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> Nouveau_Frame<span class="br0">&#40;</span>monNom <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, Titre <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, Largeur <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>, Hauteur <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span><span class="br0">&#41;</span>
<span style="color: #808080;">'cr&eacute;ation Frame</span>
   <span style="color: #0000ff;">If</span> Dico.Exists<span class="br0">&#40;</span>monNom<span class="br0">&#41;</span> = <span style="color: #0000ff;">True</span> <span style="color: #0000ff;">Then</span> <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Sub</span>              <span style="color: #808080;">'si d&eacute;j&agrave; existant on quitte</span>
   <span style="color: #0000ff;">Dim</span> maClass <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> ClassDemineur                             <span style="color: #808080;">'cr&eacute;ation d'une nouvelle instance de notre classe</span>
   <span style="color: #0000ff;">Set</span> maClass.Fram = maForm.Controls.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;forms.frame.1&quot;</span><span class="br0">&#41;</span>  <span style="color: #808080;">'Cr&eacute;ation d'un contr&ocirc;le de type Frame</span>
   <span style="color: #0000ff;">Set</span> maClass.maForm = maForm         <span style="color: #808080;">'on affecte l'userform &agrave; la propri&eacute;t&eacute; &quot;maForm&quot; de notre instance de classe</span>
   <span style="color: #0000ff;">With</span> maClass.Fram                   <span style="color: #808080;">'on lui affecte certaines propri&eacute;t&eacute;s</span>
      .Name = monNom                   <span style="color: #808080;">'nom</span>
      .Caption = Titre                 <span style="color: #808080;">'titre</span>
      .Move <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, Largeur, Hauteur     <span style="color: #808080;">'emplacement</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
   Dico.Add monNom, maClass            <span style="color: #808080;">'on ajoute notre instance de classe au Dico</span>
   <span style="color: #0000ff;">Set</span> maClass = <span style="color: #0000ff;">Nothing</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> Nouveau_Bouton<span class="br0">&#40;</span>monNom <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, Titre <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, Gauche <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>, Haut <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>, boolMine <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>, <span style="color: #0000ff;">Optional</span> ModeTriche <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span><span class="br0">&#41;</span>
<span style="color: #808080;">'cr&eacute;ation Boutons</span>
   <span style="color: #0000ff;">If</span> Dico.Exists<span class="br0">&#40;</span>monNom<span class="br0">&#41;</span> = <span style="color: #0000ff;">True</span> <span style="color: #0000ff;">Then</span> <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Sub</span>                       <span style="color: #808080;">'si d&eacute;j&agrave; existant on quitte</span>
   <span style="color: #0000ff;">Dim</span> maClass <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> ClassDemineur                                      <span style="color: #808080;">'cr&eacute;ation d'une nouvelle instance de notre classe</span>
   <span style="color: #0000ff;">Set</span> maClass.Bouton = Fram.Controls.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;forms.CommandButton.1&quot;</span><span class="br0">&#41;</span>   <span style="color: #808080;">'Cr&eacute;ation d'un contr&ocirc;le de type Bouton</span>
   <span style="color: #0000ff;">Set</span> maClass.maForm = maForm         <span style="color: #808080;">'on affecte l'userform &agrave; la propri&eacute;t&eacute; &quot;maForm&quot; de notre instance de classe</span>
   maClass.Mine = boolMine             <span style="color: #808080;">'on d&eacute;finit la propri&eacute;t&eacute; Mine de notre bouton (True ou False)</span>
   <span style="color: #0000ff;">With</span> maClass.Bouton                 <span style="color: #808080;">'on d&eacute;finit certaines propri&eacute;t&eacute;s du bouton</span>
      .Name = monNom                            <span style="color: #808080;">'son nom</span>
      .Caption = Titre                          <span style="color: #808080;">'son Caption</span>
      .Move Gauche, Haut, LARG_BTN, LARG_BTN    <span style="color: #808080;">'son emplacement</span>
      <span style="color: #0000ff;">If</span> ModeTriche <span style="color: #0000ff;">Then</span>                           <span style="color: #808080;">'EN MODE TRICHE, COLORE LES BOUTONS MINES</span>
         <span style="color: #0000ff;">If</span> boolMine <span style="color: #0000ff;">Then</span> .BackColor = COUL_MINE <span style="color: #0000ff;">Else</span> .BackColor = COUL_BOUTON
      <span style="color: #0000ff;">Else</span>
         .BackColor = COUL_BOUTON
      <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
   Dico.Add monNom, maClass            <span style="color: #808080;">'on ajoute notre instance de classe au Dico</span>
   <span style="color: #0000ff;">Set</span> maClass = <span style="color: #0000ff;">Nothing</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Bouton_MouseDown<span class="br0">&#40;</span><span style="color: #0000ff;">ByVal</span> Button <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, <span style="color: #0000ff;">ByVal</span> Shift <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, <span style="color: #0000ff;">ByVal</span> X <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Single</span>, <span style="color: #0000ff;">ByVal</span> Y <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Single</span><span class="br0">&#41;</span>
<span style="color: #808080;">'Proc&eacute;dure &eacute;v&eacute;nementielle lors de l'appui, &agrave; l'aide d'un des 2 boutons de la souris, sur un Bouton de l'Userform</span>
   <span style="color: #0000ff;">If</span> Button = XlMouseButton.xlSecondaryButton <span style="color: #0000ff;">Then</span>    <span style="color: #808080;">'clic droit</span>
      <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> Bouton.Caption <span style="color: #808080;">'selon le Caption du bouton 4 possibilit&eacute;s</span>
         <span style="color: #0000ff;">Case</span> <span style="color: #FF0000;">&quot;&quot;</span>: Bouton.Caption = <span style="color: #FF0000;">&quot;!&quot;</span>: Bouton.BackColor = COUL_MINE_PROB        <span style="color: #808080;">'si caption est vide : on affiche ! (= attention danger)</span>
         <span style="color: #0000ff;">Case</span> <span style="color: #FF0000;">&quot;!&quot;</span>: Bouton.Caption = <span style="color: #FF0000;">&quot;?&quot;</span>: Bouton.BackColor = COUL_MINE_POSSIBLE   <span style="color: #808080;">'si caption est ! : on affiche ? (= doute)</span>
         <span style="color: #0000ff;">Case</span> <span style="color: #FF0000;">&quot;?&quot;</span>: Bouton.Caption = <span style="color: #FF0000;">&quot;&quot;</span>: Bouton.BackColor = COUL_BOUTON           <span style="color: #808080;">'si caption est ? : on affiche rien (= lev&eacute;e du doute)</span>
         <span style="color: #0000ff;">Case</span> <span style="color: #0000ff;">Else</span>:                                                              <span style="color: #808080;">'sinon (caption = chiffre (Nbre de mines voisines)) On ne fait rien</span>
      <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
   <span style="color: #0000ff;">ElseIf</span> Button = XlMouseButton.xlPrimaryButton <span style="color: #0000ff;">Then</span>  <span style="color: #808080;">'clic gauche</span>
      clic = clic + <span style="color: #cc66cc;">1</span>                                                            <span style="color: #808080;">'incr&eacute;mentation du compteur de clics gauches</span>
      maForm.Caption = <span style="color: #FF0000;">&quot;D&eacute;mineur - Nombre de coups jou&eacute;s : &quot;</span> &amp; clic              <span style="color: #808080;">'inscription du nombre de coups jou&eacute;s</span>
      <span style="color: #0000ff;">If</span> DicoParent.Item<span class="br0">&#40;</span>Bouton.Name<span class="br0">&#41;</span>.Mine <span style="color: #0000ff;">Then</span>                                  <span style="color: #808080;">'si bouton min&eacute;</span>
         <span style="color: #0000ff;">Call</span> Affiche_Toutes_Mines                                               <span style="color: #808080;">'affichage de toutes les mines</span>
         MsgBox <span style="color: #FF0000;">&quot;Partie perdue&quot;</span>                                                  <span style="color: #808080;">'message PERDU !</span>
         maForm.Hide                                                             <span style="color: #808080;">'on quitte</span>
      <span style="color: #0000ff;">Else</span>                                                                       <span style="color: #808080;">'si bouton non min&eacute;</span>
         Bouton.BackColor = COUL_BOUTON                                          <span style="color: #808080;">'remet la couleur par d&eacute;faut en cas de clic droit pr&eacute;c&eacute;dent</span>
         <span style="color: #0000ff;">Dim</span> maClass <span style="color: #0000ff;">As</span> ClassDemineur                                                <span style="color: #808080;">'on appelle la proc&eacute;dure de d&eacute;minage</span>
         <span style="color: #0000ff;">Set</span> maClass = DicoParent.Item<span class="br0">&#40;</span>Bouton.Name<span class="br0">&#41;</span>                              <span style="color: #808080;">'proc&eacute;dure r&eacute;cursive de propagation</span>
         <span style="color: #0000ff;">Call</span> Demine<span class="br0">&#40;</span>maClass<span class="br0">&#41;</span>                                                    <span style="color: #808080;">'des boutons dont les voisins de sont pas des mines</span>
      <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
   <span style="color: #0000ff;">If</span> Partie_Gagnee <span style="color: #0000ff;">Then</span>                                                         <span style="color: #808080;">'lance la fonction Partie_Gagnee</span>
      <span style="color: #0000ff;">Call</span> Affiche_Toutes_Mines                                                  <span style="color: #808080;">'si victoire : affichage des mines et message:</span>
      MsgBox <span style="color: #FF0000;">&quot;F&eacute;licitations&quot;</span> _
                &amp; vbCrLf &amp; <span style="color: #FF0000;">&quot;Partie Gagn&eacute;e en : &quot;</span> &amp; <span style="color: #0000ff;">CInt</span><span class="br0">&#40;</span>Timer - <span style="color: #0000ff;">CDbl</span><span class="br0">&#40;</span>maForm.Tag<span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; secondes.&quot;</span> _
                &amp; vbCrLf &amp; <span style="color: #FF0000;">&quot;et en : &quot;</span> &amp; clic &amp; <span style="color: #FF0000;">&quot; coups jou&eacute;s.&quot;</span>, vbOKOnly + vbExclamation, <span style="color: #FF0000;">&quot;GAGNE!&quot;</span>
      maForm.Hide                   <span style="color: #808080;">'on quitte l'userform. Cela d&eacute;clenche le destructeur de la classe</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Affiche_Toutes_Mines<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #808080;">'En cas de partie perdue, colore tous les boutons min&eacute;s</span>
   <span style="color: #0000ff;">Dim</span> cle
   <span style="color: #0000ff;">For</span> <span style="color: #0000ff;">Each</span> cle <span style="color: #0000ff;">In</span> DicoParent.keys <span style="color: #808080;">'boucle sur toutes les cl&eacute;s de notre DicoParent</span>
   <span style="color: #808080;">'celui-ci contient toutes les instances de la classe contenues dans le Frame</span>
      <span style="color: #808080;">'si l'instance de classe est min&eacute;e =&gt; coloriage</span>
      <span style="color: #0000ff;">If</span> DicoParent.Item<span class="br0">&#40;</span>cle<span class="br0">&#41;</span>.Mine <span style="color: #0000ff;">Then</span> DicoParent.Item<span class="br0">&#40;</span>cle<span class="br0">&#41;</span>.Bouton.BackColor = COUL_MINE
   <span style="color: #0000ff;">Next</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Demine<span class="br0">&#40;</span>Cl <span style="color: #0000ff;">As</span> ClassDemineur<span class="br0">&#41;</span>
<span style="color: #808080;">'proc&eacute;dure r&eacute;cursive de propagation de la d&eacute;couverte des boutons non min&eacute;s</span>
   <span style="color: #0000ff;">Dim</span> NbMines <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>
   NbMines = CompteMines<span class="br0">&#40;</span>Cl.Bouton.Name<span class="br0">&#41;</span>  <span style="color: #808080;">'on teste le nombre de mines voisines</span>
   <span style="color: #0000ff;">If</span> NbMines &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>                    <span style="color: #808080;">'si le bouton a au moins une mine parmi ses voisins</span>
      Cl.Bouton.Caption = NbMines         <span style="color: #808080;">'on affiche ce nombre de mines</span>
      Cl.Decouverte = <span style="color: #0000ff;">True</span>                <span style="color: #808080;">'on d&eacute;couvre ce bouton</span>
   <span style="color: #0000ff;">Else</span>                                   <span style="color: #808080;">'sinon</span>
      <span style="color: #0000ff;">If</span> Cl.Decouverte = <span style="color: #0000ff;">False</span> <span style="color: #0000ff;">Then</span>       <span style="color: #808080;">'Si le bouton n'est pas d&eacute;j&agrave; d&eacute;couvert</span>
         Cl.Decouverte = <span style="color: #0000ff;">True</span>             <span style="color: #808080;">'on le d&eacute;couvre</span>
         Cl.Bouton.Visible = <span style="color: #0000ff;">False</span>        <span style="color: #808080;">'on rend la d&eacute;couverte visible par le joueur (=&gt; le bouton disparait)</span>
         Quels_Voisins Cl                 <span style="color: #808080;">'on cherche qui sont les boutons voisins de ce bouton</span>
         <span style="color: #0000ff;">Dim</span> tb<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> ClassDemineur, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>
         tb = Cl.Voisins
         <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>tb<span class="br0">&#41;</span>          <span style="color: #808080;">'on d&eacute;mine tous les boutons voisins (RECURSIVITE)</span>
            Demine tb<span class="br0">&#40;</span>i<span class="br0">&#41;</span>
         <span style="color: #0000ff;">Next</span>
      <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Function</span> CompteMines<span class="br0">&#40;</span>Bout <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>
<span style="color: #808080;">'fonction comptant les mines contenues dans les boutons voisins</span>
   <span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, Col <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, Lig <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>
   <span style="color: #0000ff;">Dim</span> maClass <span style="color: #0000ff;">As</span> ClassDemineur
   <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">-1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">1</span>               <span style="color: #808080;">'en incr&eacute;mentant la colonne et la ligne de -1 &agrave; 1 on ne &quot;vise&quot; que les</span>
      <span style="color: #0000ff;">For</span> j = <span style="color: #cc66cc;">-1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">1</span>            <span style="color: #808080;">'boutons voisins de celui dont le nom est pass&eacute; en param&egrave;tre</span>
         Col = <span style="color: #0000ff;">CInt</span><span class="br0">&#40;</span>Split<span class="br0">&#40;</span>Bout, <span style="color: #FF0000;">&quot;-&quot;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span> + i                   <span style="color: #808080;">'incr&eacute;mentation n&deg; de colonne</span>
         Lig = <span style="color: #0000ff;">CInt</span><span class="br0">&#40;</span>Split<span class="br0">&#40;</span>Bout, <span style="color: #FF0000;">&quot;-&quot;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> + j                   <span style="color: #808080;">'incr&eacute;mentation n&deg; de ligne</span>
         <span style="color: #0000ff;">If</span> DicoParent.Exists<span class="br0">&#40;</span>Col &amp; <span style="color: #FF0000;">&quot;-&quot;</span> &amp; Lig<span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span>            <span style="color: #808080;">'si le bouton existe (&eacute;vite l'erreur de &quot;d&eacute;bord&quot; de l'userform)</span>
            <span style="color: #0000ff;">Set</span> maClass = DicoParent.Item<span class="br0">&#40;</span>Col &amp; <span style="color: #FF0000;">&quot;-&quot;</span> &amp; Lig<span class="br0">&#41;</span>     <span style="color: #808080;">'on attribue &agrave; notre variable le bouton voisin</span>
            <span style="color: #0000ff;">If</span> maClass.Mine <span style="color: #0000ff;">Then</span> CompteMines = CompteMines + <span style="color: #cc66cc;">1</span> <span style="color: #808080;">'s'il est min&eacute; on incr&eacute;mente notre fonction de 1</span>
         <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
      <span style="color: #0000ff;">Next</span> j
   <span style="color: #0000ff;">Next</span> i
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Quels_Voisins<span class="br0">&#40;</span>Cl <span style="color: #0000ff;">As</span> ClassDemineur<span class="br0">&#41;</span>
<span style="color: #808080;">'proc&eacute;dure affectant, &agrave; la propri&eacute;t&eacute; Voisins() d'un bouton, la liste des boutons qui l'entourent</span>
   <span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, Col <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, Lig <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>
   <span style="color: #0000ff;">Dim</span> maClass <span style="color: #0000ff;">As</span> ClassDemineur, ListeVoisins<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> ClassDemineur, cpt <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>
   <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">-1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">1</span>               <span style="color: #808080;">'en incr&eacute;mentant la colonne et la ligne de -1 &agrave; 1 on ne &quot;vise&quot; que les</span>
      <span style="color: #0000ff;">For</span> j = <span style="color: #cc66cc;">-1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">1</span>            <span style="color: #808080;">'boutons voisins de celui dont le nom est pass&eacute; en param&egrave;tre</span>
         Col = <span style="color: #0000ff;">CInt</span><span class="br0">&#40;</span>Split<span class="br0">&#40;</span>Cl.Bouton.Name, <span style="color: #FF0000;">&quot;-&quot;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span> + i      <span style="color: #808080;">'incr&eacute;mentation n&deg; de colonne</span>
         Lig = <span style="color: #0000ff;">CInt</span><span class="br0">&#40;</span>Split<span class="br0">&#40;</span>Cl.Bouton.Name, <span style="color: #FF0000;">&quot;-&quot;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> + j      <span style="color: #808080;">'incr&eacute;mentation n&deg; de ligne</span>
         <span style="color: #808080;">'si le bouton existe et que son nom est diff&eacute;rent de celui pass&eacute; en param&egrave;tre (on n'est pas son propre voisin ;-)</span>
         <span style="color: #0000ff;">If</span> DicoParent.Exists<span class="br0">&#40;</span>Col &amp; <span style="color: #FF0000;">&quot;-&quot;</span> &amp; Lig<span class="br0">&#41;</span> <span style="color: #0000ff;">And</span> Cl.Bouton.Name &lt;&gt; Col &amp; <span style="color: #FF0000;">&quot;-&quot;</span> &amp; Lig <span style="color: #0000ff;">Then</span>
            <span style="color: #0000ff;">Set</span> maClass = DicoParent.Item<span class="br0">&#40;</span>Col &amp; <span style="color: #FF0000;">&quot;-&quot;</span> &amp; Lig<span class="br0">&#41;</span>  <span style="color: #808080;">'on attribue &agrave; notre variable le bouton voisin</span>
            <span style="color: #0000ff;">ReDim</span> <span style="color: #0000ff;">Preserve</span> ListeVoisins<span class="br0">&#40;</span>cpt<span class="br0">&#41;</span>                <span style="color: #808080;">'redimensionnement variable tableau</span>
            <span style="color: #0000ff;">Set</span> ListeVoisins<span class="br0">&#40;</span>cpt<span class="br0">&#41;</span> = maClass                 <span style="color: #808080;">'on affecte notre instance de classe (bouton) au tableau</span>
            cpt = cpt + <span style="color: #cc66cc;">1</span>
         <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
      <span style="color: #0000ff;">Next</span> j
   <span style="color: #0000ff;">Next</span> i
   Cl.Voisins = ListeVoisins        <span style="color: #808080;">'on affecte la propri&eacute;t&eacute; Voisins de notre instance de classe (de notre bouton)</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Function</span> Partie_Gagnee<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
   <span style="color: #0000ff;">Dim</span> cle
   Partie_Gagnee = <span style="color: #0000ff;">False</span>
   <span style="color: #0000ff;">For</span> <span style="color: #0000ff;">Each</span> cle <span style="color: #0000ff;">In</span> DicoParent.keys <span style="color: #808080;">'boucle sur toutes les cl&eacute;s de notre DicoParent</span>
   <span style="color: #808080;">'(donc sur toutes les instances de la classe, donc sur tous les boutons)</span>
      <span style="color: #808080;">'Si le bouton n'est pas &quot;d&eacute;couvert&quot; et qu'il ne contient pas de mine</span>
      <span style="color: #0000ff;">If</span> DicoParent.Item<span class="br0">&#40;</span>cle<span class="br0">&#41;</span>.Decouverte = <span style="color: #0000ff;">False</span> <span style="color: #0000ff;">And</span> DicoParent.Item<span class="br0">&#40;</span>cle<span class="br0">&#41;</span>.Mine = <span style="color: #0000ff;">False</span> <span style="color: #0000ff;">Then</span>
         <span style="color: #808080;">'alors la partie n'est pas finie</span>
         <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Function</span>
      <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
   <span style="color: #0000ff;">Next</span>
   Partie_Gagnee = <span style="color: #0000ff;">True</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Function</span> EstDans<span class="br0">&#40;</span>adresse <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, tb<span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
<span style="color: #808080;">'fonction de recherche d'une valeur dans une var tableau</span>
   <span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   EstDans = <span style="color: #0000ff;">False</span>
   <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>tb<span class="br0">&#41;</span> <span style="color: #808080;">'boucle sur toute la variable tableau pass&eacute;e en param&egrave;tre</span>
      <span style="color: #0000ff;">If</span> tb<span class="br0">&#40;</span>i<span class="br0">&#41;</span> = adresse <span style="color: #0000ff;">Then</span> EstDans = <span style="color: #0000ff;">True</span>: <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Function</span> <span style="color: #808080;">'si on trouve l'&eacute;l&eacute;ment cherch&eacute; =&gt; fonction vraie, on sort</span>
   <span style="color: #0000ff;">Next</span> i
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Class_Terminate<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #808080;">'destructeur de la classe cD&eacute;mineur</span>
   <span style="color: #0000ff;">Dim</span> VBComp <span style="color: #808080;">'As VBComponent</span>
   <span style="color: #0000ff;">Set</span> Dico = <span style="color: #0000ff;">Nothing</span>            <span style="color: #808080;">'supprime toutes les instances de notre classe =&gt; tous les boutons</span>
   <span style="color: #0000ff;">If</span> Nom &lt;&gt; <span style="color: #FF0000;">&quot;&quot;</span> <span style="color: #0000ff;">Then</span>             <span style="color: #808080;">'s'il s'agit de l'userform (seule instance ayant une propri&eacute;t&eacute; &quot;Nom&quot; remplie)</span>
      <span style="color: #0000ff;">Set</span> VBComp = ThisWorkbook.VBProject.VBComponents<span class="br0">&#40;</span>Nom<span class="br0">&#41;</span> <span style="color: #808080;">'on le cible</span>
      ThisWorkbook.VBProject.VBComponents.Remove VBComp     <span style="color: #808080;">'on le supprime</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div><br />
<b>Code d'appel dans le module standard :</b><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
<span style="color: #0000ff;">Public</span> clic <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
&nbsp;
<span style="color: #0000ff;">Sub</span> Demineur<span class="br0">&#40;</span><span class="br0">&#41;</span>
  <span style="color: #0000ff;">Dim</span> MyForm <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> ClassDemineur
  <span style="color: #0000ff;">Dim</span> rep <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, niveau <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, Flag <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
&nbsp;
  clic = <span style="color: #cc66cc;">0</span>
  rep = MsgBox<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;D&eacute;butant ?&quot;</span>, vbYesNo + vbQuestion, <span style="color: #FF0000;">&quot;Choix du niveau&quot;</span><span class="br0">&#41;</span>
  <span style="color: #0000ff;">If</span> rep = vbYes <span style="color: #0000ff;">Then</span>
    niveau = <span style="color: #cc66cc;">0</span>
  <span style="color: #0000ff;">Else</span>
    rep = MsgBox<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Interm&eacute;diaire ?&quot;</span>, vbYesNo + vbQuestion, <span style="color: #FF0000;">&quot;Choix du niveau&quot;</span><span class="br0">&#41;</span>
    niveau = IIf<span class="br0">&#40;</span>rep = vbYes, <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
  <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
  <span style="color: #808080;">'Flag = IIf(Feuil1.Range(&quot;A1&quot;) = &quot;triche&quot;, True, False)</span>
  MyForm.Show niveau, <span style="color: #0000ff;">True</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div><br />
Les deux paramètres passés à la classe déterminent la difficulté (niveau) et si le Cheat Mode est activé (ModeTriche = True)...<br />
<br />
Bon jeu, et à ++<br />
Franck</blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6171/jeu-demineur/</guid>
		</item>
		<item>
			<title>Accéder aux événements des contrôles insérés dans une Frame placée dans une feuille de calcul</title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6167/acceder-aux-evenements-controles-inseres-frame-placee-feuille-calcul/</link>
			<pubDate>Fri, 14 Sep 2018 13:42:30 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">________________________________________________________________<br />
<br />
<br />
<ul><li style=""><b>Introduction</b><br />
<br />
L'intérêt de cette contribution est multiple.<br />
- La méthode d'insertion de contrôles dans une Frame d'une feuille de calcul semble assez peu connue,<br />
- Elle permet de créer des boîtes de dialogue personnalisées (MsgBox, InputBox particulières, Calendrier, Calculatrice, etc...) se substituant donc aux Userforms.<br />
Mais alors, pourquoi vouloir substituer une Frame à l'Userform?<br />
&gt; question de positionnement sur la feuille de calcul,<br />
&gt; alléger le code d'au moins un module (celui de l'Userform).<br />
<br /></li><li style=""><b>I- En mode création</b><br />
<br />
<ol class="decimal"><li style=""><b><font color="#A52A2A">Insertion de contrôles</font></b><br />
La méthode est très simple.<br />
<ol class="decimal"><li style="">Dessinez une Frame sur votre feuille :<br />
<ul><li style="">Onglet développeur ==&gt; cliquez sur le menu &quot;Insérer&quot;</li><li style="">Sous &quot;contrôles Activex&quot;, cliquez sur &quot;Autres contrôles&quot; (icône composée d'un marteau croisé à une clé)</li><li style="">Recherchez et sélectionnez le contrôle : Microsoft Forms 2.0 Frame</li><li style="">Cliquez sur OK, puis dessinez votre Frame.</li></ul></li><li style="">Dans le Frame, effectuez un clic droit</li><li style="">Sélectionnez : Objet cadre&gt;Edition</li></ol><br />
La boîte à outils Contrôles s'affiche alors.<br />
Vous pouvez maintenant dessiner tout type de contrôle dans votre Frame.<br />
Pour l'exemple, nous allons dessiner une ComboBox et un CommandButton.<br />
<br /></li><li style=""><b><font color="#A52A2A">Associer des événements</font></b><br />
Une fois votre Frame remplie de ses contrôles, si l'on bascule sous l'éditeur VBA, on se rend compte que, dans le module de la feuille concernée, le menu &quot;général&quot; ne donne pas accès aux contrôles que nous venons de dessiner. En effet, ces deux contrôles (combobox et bouton de commande) sont inaccessibles par la feuille car dessinés dans un autre container, notre Frame.<br />
Ces contrôles étant de type MSForms.XXX, nous pouvons déclarer des variables de ce type avec activation des événements.<br />
En entête de Module, il nous suffit d'écrire :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:84px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Combo1 <span style="color: #0000ff;">As</span> MSForms.ComboBox
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Bouton1 <span style="color: #0000ff;">As</span> MSForms.CommandButton</pre></td></tr></table></pre>
</div>Dans le menu déroulant &quot;général&quot;, nous avons maintenant accès à Bouton1 et Combo1 ainsi qu'à leurs événements, dans le menu déroulant &quot;Déclarations&quot;.<br />
Ne reste plus qu'à affecter à nos deux variables, nos deux contrôles.<br />
Pour cela, dans l'événement de votre choix, il suffit de les affecter comme ceci :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:108px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Worksheet_Activate<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">With</span> Frame1
        <span style="color: #0000ff;">Set</span> Combo1 = .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Combobox1&quot;</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">Set</span> Bouton1 = .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;CommandButton1&quot;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div>Ajoutons-y, pour pousser un peu plus avant les tests, une propriété List à notre ComboBox :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:120px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Worksheet_Activate<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">With</span> Frame1
        .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Combobox1&quot;</span><span class="br0">&#41;</span>.List = Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;F1:F5&quot;</span><span class="br0">&#41;</span>.Value
        <span style="color: #0000ff;">Set</span> Combo1 = .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Combobox1&quot;</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">Set</span> Bouton1 = .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;CommandButton1&quot;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div>Ne reste plus qu'à créer vos propres procédures événementielles, par exemple :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Combo1 <span style="color: #0000ff;">As</span> MSForms.ComboBox
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Bouton1 <span style="color: #0000ff;">As</span> MSForms.CommandButton
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Bouton1_Click<span class="br0">&#40;</span><span class="br0">&#41;</span>
    MsgBox Combo1.Text
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Combo1_Change<span class="br0">&#40;</span><span class="br0">&#41;</span>
    Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;A1&quot;</span><span class="br0">&#41;</span> = Combo1.Text
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Worksheet_Activate<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">With</span> Frame1
        .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Combobox1&quot;</span><span class="br0">&#41;</span>.List = Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;F1:F5&quot;</span><span class="br0">&#41;</span>.Value
        <span style="color: #0000ff;">Set</span> Combo1 = .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Combobox1&quot;</span><span class="br0">&#41;</span>
        <span style="color: #0000ff;">Set</span> Bouton1 = .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;CommandButton1&quot;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li></ol><br />
<br /></li><li style=""><b>II- Dynamiquement (At run time)</b><br />
<br />
Le but ici est de créer dynamiquement un Frame, d'y insérer deux contrôles (1 CommandButton et 1 ComboBox) et de faire en sorte que ces deux contrôles réagissent à leurs événements.<br />
<b>Remarque :</b> Avant de commencer, il nous faut noter que l'événement déclencheur est déterminant. Si vous choisissez, par exemple, de créer votre Frame et ses contrôles par le clic sur un bouton ou par l'événement Worksheet_Activate, il vous faut savoir que cela nécessitera une autre procédure, secondaire (bouton en dehors du Frame ou Macro) pour affecter les variables &quot;événementielles&quot; à vos contrôles.<br />
<br />
Nous choisirons donc, pour plus de simplicité, l'événement Workbook_Open().<br />
Cet événement n'étant pas celui d'une feuille de calcul, il nous faudra déclarer quelques variables et constantes utiles en entête du <b>module ThisWorkbook</b> :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:96px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> Wsh <span style="color: #0000ff;">As</span> Worksheet <span style="color: #808080;">'==&gt; la feuille concern&eacute;e</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strSheetName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Feuil1&quot;</span> <span style="color: #808080;">'==&gt; le nom de la feuille concern&eacute;e</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strFrameName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;MyFramePerso&quot;</span> <span style="color: #808080;">'==&gt; le nom de la frame &agrave; ins&eacute;rer</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strComboName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;MyComboPerso&quot;</span> <span style="color: #808080;">'==&gt; le nom de la combobox &agrave; cr&eacute;er</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strButtName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;MyButtonPerso&quot;</span> <span style="color: #808080;">'==&gt; le nom du bouton &agrave; cr&eacute;er</span></pre></td></tr></table></pre>
</div><ol class="decimal"><li style=""><b><font color="#A52A2A">Insérer une Frame sur une feuille de calcul :</font></b><br />
Une Frame, dans une feuille de calcul, appartient à la collection OLEObjects.<br />
Nous allons donc déclarer une variable de ce type. Cette variable va nous servir dans plusieurs procédures.<br />
Si vous le souhaitez, vous pouvez donc la déclarer en entête de module. J'ai fait le choix de la passer en paramètre des procédures concernées.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Workbook_Open<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> Frm <span style="color: #0000ff;">As</span> OLEObject
    <span style="color: #0000ff;">Set</span> Wsh = Worksheets<span class="br0">&#40;</span>strSheetName<span class="br0">&#41;</span>
    InsertFrame Frm, Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;F20&quot;</span><span class="br0">&#41;</span>, <span style="color: #cc66cc;">200</span>, <span style="color: #cc66cc;">100</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> InsertFrame<span class="br0">&#40;</span>F <span style="color: #0000ff;">As</span> OLEObject, rngCell <span style="color: #0000ff;">As</span> Range, W <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Single</span>, H <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Single</span><span class="br0">&#41;</span>
<span style="color: #808080;">'ins&egrave;re une Frame sur la cellule r&eacute;f&eacute;renc&eacute;e par rngCell</span>
    <span style="color: #0000ff;">Set</span> F = Wsh.OLEObjects.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Forms.Frame.1&quot;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">With</span> F
        .Name = strFrameName
        .Height = H
        .Width = W
        .Left = rngCell.Left
        .Top = rngCell.Top
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div>A noter : Le paramètre rngCell représente l'objet Range sur lequel nous allons positionner la Frame.<br />
<br /></li><li style=""><b><font color="#A52A2A">Création des contrôles dans la Frame :</font></b><br />
Rien de bien compliqué. Il faut juste savoir que l'on peut ajouter, à la propriété Object des objets OLEObject, un (des) contrôle(s) de type MSForms.Control, grâce à sa méthode Add.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Workbook_Open<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> Frm <span style="color: #0000ff;">As</span> OLEObject
    <span style="color: #0000ff;">Set</span> Wsh = Worksheets<span class="br0">&#40;</span>strSheetName<span class="br0">&#41;</span>
    InsertFrame Frm, Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;F20&quot;</span><span class="br0">&#41;</span>, <span style="color: #cc66cc;">200</span>, <span style="color: #cc66cc;">100</span>
    InsertControlsInFrame Frm
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> InsertControlsInFrame<span class="br0">&#40;</span>F <span style="color: #0000ff;">As</span> OLEObject<span class="br0">&#41;</span>
    <span style="color: #0000ff;">With</span> F
        <span style="color: #0000ff;">With</span> .Object.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Forms.ComboBox.1&quot;</span><span class="br0">&#41;</span>
            .Name = strComboName
            .Top = <span style="color: #cc66cc;">15</span>
            .Left = <span style="color: #cc66cc;">30</span>
            .Height = <span style="color: #cc66cc;">20</span>
            .Width = <span style="color: #cc66cc;">75</span>
            .Object.Font.Name = <span style="color: #FF0000;">&quot;Arial&quot;</span>
            .Object.Font.Size = <span style="color: #cc66cc;">12</span>
            .Object.AddItem <span style="color: #FF0000;">&quot;Ananas&quot;</span>
            .Object.AddItem <span style="color: #FF0000;">&quot;Pomme&quot;</span>
            .Object.AddItem <span style="color: #FF0000;">&quot;Poire&quot;</span>
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
        <span style="color: #0000ff;">With</span> .Object.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Forms.CommandButton.1&quot;</span><span class="br0">&#41;</span>
            .Name = strButtName
            .Top = <span style="color: #cc66cc;">45</span>
            .Left = <span style="color: #cc66cc;">30</span>
            .Height = <span style="color: #cc66cc;">20</span>
            .Width = <span style="color: #cc66cc;">75</span>
            .Object.Font.Name = <span style="color: #FF0000;">&quot;Arial&quot;</span>
            .Object.Font.Size = <span style="color: #cc66cc;">12</span>
            .Object.Caption = <span style="color: #FF0000;">&quot;BOUTON3&quot;</span>
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
        .Verb
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div><b>Remarque :</b> En fin de code, la méthode Verb est utilisée pour que l'utilisateur puisse atteindre les contrôles. Sans cette méthode, vous ne pourrez pas cliquer sur les contrôles de votre Frame.<br />
<br /></li><li style=""><b><font color="#A52A2A">Affecter les événements aux contrôles :</font></b><br />
Ici, avec une ComboBox et un CommandButton, nous nous contenterons du Click().<br />
Pour cela, il nous faut, tout comme en mode création, déclarer des variables &quot;événementielles&quot;.<br />
Notre entête de module devient donc :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:156px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Combo1 <span style="color: #0000ff;">As</span> MSForms.ComboBox
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Bouton1 <span style="color: #0000ff;">As</span> MSForms.CommandButton
&nbsp;
<span style="color: #0000ff;">Private</span> Wsh <span style="color: #0000ff;">As</span> Worksheet
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strSheetName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Feuil1&quot;</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strFrameName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;MyFramePerso&quot;</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strComboName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;MyComboPerso&quot;</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strButtName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;MyButtonPerso&quot;</span></pre></td></tr></table></pre>
</div>Ensuite, créons nos deux procédures événementielles :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:120px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Bouton1_Click<span class="br0">&#40;</span><span class="br0">&#41;</span>
    MsgBox Combo1.Text
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Combo1_Click<span class="br0">&#40;</span><span class="br0">&#41;</span>
    Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;A1&quot;</span><span class="br0">&#41;</span> = Combo1.Text
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div>Et enfin, la procédure d'affectation des contrôles à ces variables :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:180px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Workbook_Open<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> Frm <span style="color: #0000ff;">As</span> OLEObject
    <span style="color: #0000ff;">Set</span> Wsh = Worksheets<span class="br0">&#40;</span>strSheetName<span class="br0">&#41;</span>
    InsertFrame Frm, Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;F20&quot;</span><span class="br0">&#41;</span>, <span style="color: #cc66cc;">200</span>, <span style="color: #cc66cc;">100</span>
    InsertControlsInFrame Frm
    AffectVariables
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> AffectVariables<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">Set</span> Combo1 = Wsh.OLEObjects<span class="br0">&#40;</span>strFrameName<span class="br0">&#41;</span>.Object.Controls<span class="br0">&#40;</span>strComboName<span class="br0">&#41;</span>
    <span style="color: #0000ff;">Set</span> Bouton1 = Wsh.OLEObjects<span class="br0">&#40;</span>strFrameName<span class="br0">&#41;</span>.Object.Controls<span class="br0">&#40;</span>strButtName<span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div>On voit clairement dans cette procédure AffectVariables que les contrôles sont bien des membres de la propriété Object de l'objet OLEObject.<br />
<br />
<br /></li><li style=""><b><font color="#A52A2A">Code global à insérer dans le <u>Module ThisWorkbook</u> :</font></b><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Combo1 <span style="color: #0000ff;">As</span> MSForms.ComboBox
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Bouton1 <span style="color: #0000ff;">As</span> MSForms.CommandButton
&nbsp;
<span style="color: #0000ff;">Private</span> Wsh <span style="color: #0000ff;">As</span> Worksheet
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strSheetName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;Feuil1&quot;</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strFrameName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;MyFramePerso&quot;</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strComboName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;MyComboPerso&quot;</span>
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Const</span> strButtName <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;MyButtonPerso&quot;</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Bouton1_Click<span class="br0">&#40;</span><span class="br0">&#41;</span>
    MsgBox Combo1.Text
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Combo1_Click<span class="br0">&#40;</span><span class="br0">&#41;</span>
    Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;A1&quot;</span><span class="br0">&#41;</span> = Combo1.Text
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Workbook_BeforeClose<span class="br0">&#40;</span>Cancel <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">Resume</span> <span style="color: #0000ff;">Next</span>
    Wsh.Shapes.Range<span class="br0">&#40;</span>Array<span class="br0">&#40;</span>strFrameName<span class="br0">&#41;</span><span class="br0">&#41;</span>.Delete
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Workbook_Open<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> Frm <span style="color: #0000ff;">As</span> OLEObject
    <span style="color: #0000ff;">Set</span> Wsh = Worksheets<span class="br0">&#40;</span>strSheetName<span class="br0">&#41;</span>
    InsertFrame Frm, Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;F20&quot;</span><span class="br0">&#41;</span>, <span style="color: #cc66cc;">200</span>, <span style="color: #cc66cc;">100</span>
    InsertControlsInFrame Frm
    AffectVariables
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> InsertFrame<span class="br0">&#40;</span>F <span style="color: #0000ff;">As</span> OLEObject, rngCell <span style="color: #0000ff;">As</span> Range, W <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Single</span>, H <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Single</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">Set</span> F = Wsh.OLEObjects.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Forms.Frame.1&quot;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">With</span> F
        .Name = strFrameName
        .Height = H
        .Width = W
        .Left = rngCell.Left
        .Top = rngCell.Top
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> InsertControlsInFrame<span class="br0">&#40;</span>F <span style="color: #0000ff;">As</span> OLEObject<span class="br0">&#41;</span>
    <span style="color: #0000ff;">With</span> F
        <span style="color: #0000ff;">With</span> .Object.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Forms.ComboBox.1&quot;</span><span class="br0">&#41;</span>
            .Name = strComboName
            .Top = <span style="color: #cc66cc;">15</span>
            .Left = <span style="color: #cc66cc;">30</span>
            .Height = <span style="color: #cc66cc;">20</span>
            .Width = <span style="color: #cc66cc;">75</span>
            .Object.Font.Name = <span style="color: #FF0000;">&quot;Arial&quot;</span>
            .Object.Font.Size = <span style="color: #cc66cc;">12</span>
            .Object.AddItem <span style="color: #FF0000;">&quot;Ananas&quot;</span>
            .Object.AddItem <span style="color: #FF0000;">&quot;Pomme&quot;</span>
            .Object.AddItem <span style="color: #FF0000;">&quot;Poire&quot;</span>
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
        <span style="color: #0000ff;">With</span> .Object.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Forms.CommandButton.1&quot;</span><span class="br0">&#41;</span>
            .Name = strButtName
            .Top = <span style="color: #cc66cc;">45</span>
            .Left = <span style="color: #cc66cc;">30</span>
            .Height = <span style="color: #cc66cc;">20</span>
            .Width = <span style="color: #cc66cc;">75</span>
            .Object.Font.Name = <span style="color: #FF0000;">&quot;Arial&quot;</span>
            .Object.Font.Size = <span style="color: #cc66cc;">12</span>
            .Object.Caption = <span style="color: #FF0000;">&quot;BOUTON3&quot;</span>
        <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
        .Verb
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> AffectVariables<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">Set</span> Combo1 = Wsh.OLEObjects<span class="br0">&#40;</span>strFrameName<span class="br0">&#41;</span>.Object.Controls<span class="br0">&#40;</span>strComboName<span class="br0">&#41;</span>
    <span style="color: #0000ff;">Set</span> Bouton1 = Wsh.OLEObjects<span class="br0">&#40;</span>strFrameName<span class="br0">&#41;</span>.Object.Controls<span class="br0">&#40;</span>strButtName<span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li></ol></li><li style=""><b>Conclusion :</b><br />
<br />
<ol class="decimal"><li style=""><b><font color="#A52A2A">Autres exemples :</font></b><br />
Ces exemples correspondent aux divers tâtonnements qui m'ont amené à cette contribution. <br />
Il sont disponibles <a href="https://www.developpez.net/forums/d1804354/logiciels/microsoft-office/excel/macros-vba-excel/frame-tant-container/" target="_blank">dans la discussion d'origine</a>.<br />
<br /></li><li style=""><font color="#A52A2A"><b>Extension aux autres logiciels Office :</b></font><br />
Il en va de même pour tous les logiciels de la suite Office.<br />
La différence tiendra surtout dans les événements déclencheurs.<br />
Voici deux petits exemples de code avec un Frame dessiné en mode création, dans lequel nous aurons placé (même méthode qu'au I-1.) un CommandButton.<br />
<ul><li style=""><b>Sous Powerpoint :</b><br />
Ici l'événement &quot;déclencheur&quot; est le Frame1_GotFocus().<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:192px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Bouton1 <span style="color: #0000ff;">As</span> MSForms.CommandButton
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Bouton1_Click<span class="br0">&#40;</span><span class="br0">&#41;</span>
    MsgBox <span style="color: #FF0000;">&quot;YES !!!&quot;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Frame1_GotFocus<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">With</span> Frame1
        <span style="color: #0000ff;">Set</span> Bouton1 = .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;CommandButton1&quot;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div>Ce code est à placer dans le Module du Slide concerné.</li><li style=""><b>Sous Word :</b><br />
Onglet développeurs, dans la rubrique contrôles cliquez sur Outils hérités puis sur les Autres contrôles Activex.<br />
Ici l'événement &quot;déclencheur&quot; est le Document_Open().<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:192px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">WithEvents</span> Bouton1 <span style="color: #0000ff;">As</span> MSForms.CommandButton
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Bouton1_Click<span class="br0">&#40;</span><span class="br0">&#41;</span>
    MsgBox <span style="color: #FF0000;">&quot;&ccedil;a fonctionne!&quot;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span>
&nbsp;
<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Document_Open<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">With</span> Frame1
        <span style="color: #0000ff;">Set</span> Bouton1 = .Controls<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;CommandButton1&quot;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">With</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div>A noter sous Word, lors du clic droit dans le Frame, la présence, dans l'objet cadre d'un Item &quot;Convertir&quot;. Cela ne change rien au sujet dont il est question ici.</li></ul></li></ol><br />
<br />
Un grand merci à <b>Jacques</b> (<u>unparia</u>) pour la relecture.</li></ul><br />
<br />
A bientôt,<br />
Franck</blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6167/acceder-aux-evenements-controles-inseres-frame-placee-feuille-calcul/</guid>
		</item>
		<item>
			<title><![CDATA[Les différentes méthodes de détermination d'un Range "utile"]]></title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6163/differentes-methodes-determination-d-range-utile/</link>
			<pubDate>Fri, 14 Sep 2018 13:38:30 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">________________________________________________________________________________<br />
<br />
<br />
Bonjour,<br />
<br />
Je reviens pour un petit topo à propos des différentes méthodes de détermination d'un <i>Range</i> &quot;utile&quot;.<br />
<br />
Avant tout, je tiens à préciser qu'il ne s'agit pas ici de limite ou de lacune, mais plutôt de &quot;pièges&quot; à éviter.<br />
Ces différents pièges résident essentiellement dans les formatages :<br />
<ul><li style="">Format de cellule,</li><li style="">Format de colonne (ligne) entière,</li><li style="">Lignes (colonnes) masquées,</li><li style="">Fusion de cellules.</li></ul><br />
<b><u>Note :</u></b> lorsque, dans ce topo, je parle de ligne, il en va de même pour les colonnes, et vice et versa...<br />
<br />
---------------------------------------------------------------------------------------------------<br />
<br />
<br />
<ol class="decimal"><li style=""><b><font color="#800000">La propriété CurrentRegion</font></b><br />
L'aide VBA est très claire à ce sujet :<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				Cette propriété renvoie un objet Range qui représente la zone en cours. Celle-ci est une plage limitée par toute combinaison de lignes et de colonnes vides. En lecture seule.
			
		</div>
	</div>
</div>Autrement dit, elle retourne la plage des cellules adjacentes à l'objet <i>Range</i> renseigné.<br />
Cette propriété n'est pas faite pour retourner la plage complète utilisée dans une feuille, mais bel et bien pour retourner un <i>Range</i> limité.<br />
Si l'on a conscience de cela (pas de lignes ni de colonnes vides), il n'y a aucun piège ni aucune lacune à cette propriété.<br />
<br />
<br /></li><li style=""><b><font color="#800000">La propriété UsedRange</font></b><br />
Ici, cette propriété ne s'applique plus à un Objet <i>Range</i>, mais à une feuille entière, l'Objet <i>Worksheet</i>.<br />
Aide VBA :<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				Cette propriété renvoie un objet Range qui représente la plage utilisée dans la feuille de calcul spécifiée. Propriété en lecture seule.
			
		</div>
	</div>
</div>Tout formatage, même invisible (ex: <i>Range(&quot;C17&quot;).Interior.Pattern = xlNone</i>) fera inclure le <i>Range</i> formaté au<i> UsedRange</i>.<br />
Tout comme la propriété <i>CurrentRegion</i>, il n'y a pas de piège à proprement parler, mais il vous faudra faire attention aux :<br />
<ul><li style="">Format de cellule,</li><li style="">Format de colonne,</li><li style="">Lignes (colonnes) masquées,</li><li style="">Fusion de cellules.</li></ul><br />
<br /></li><li style=""><b><font color="#800000">La propriété SpecialCells</font></b><br />
Comme presque systématiquement avec cette méthode : à éviter!<br />
L'aide VBA précise que cette méthode, utilisée avec la Constante <i>XlCellType</i> :<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				xlCellTypeLastCell. Renvoie la dernière cellule dans la plage utilisée
			
		</div>
	</div>
</div>Ouais...<br />
Sauf si vous avez conscience que :<br />
<ul><li style="">cette méthode s'applique à la feuille entière,</li><li style="">l'enregistrement du classeur remet tout dans l'ordre</li></ul><br />
<br /></li><li style=""><b><font color="#800000">La propriété End --&gt; xlDown et/ou xlUp</font></b><br />
Aide VBA :<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				Cette propriété renvoie un objet Range qui représente la cellule à la fin de la zone qui contient la plage source. Elle correspond aux combinaisons de touches CTRL+HAUT, CTRL+BAS. Objet Range en lecture seule.
			
		</div>
	</div>
</div>Elle renvoie donc la dernière ligne saisie sous le (<i>xlDown</i>) ou au dessus du (<i>xlUp</i>)  Range indiqué.<br />
Attention donc aux lignes vides pour <i>xlDown</i>...<br />
A noter également que cette propriété ne tient pas compte des lignes masquées sous le (ou au dessus du) <i>Range</i> renseigné, même si elles sont saisies (ce qui est le comportement normal de la combinaison de touches).<br />
<br />
<br /></li><li style=""><b><font color="#800000">La méthode find</font></b><br />
A la base, elle n'est pas vraiment conçue pour cela.<br />
Mais, on peut très bien l'utiliser dans certains cas, notamment parce qu'elle tient compte des lignes (colonnes) masquées.<br />
Les pièges à éviter ici sont :<br />
<ul><li style="">Les plages (colonnes et/ou lignes) vides,</li><li style="">Les cellules fusionnées (beurk!).</li></ul><br />
Ces deux pièges vous renverront une Erreur d'exécution 91...</li></ol><br />
<br />
---------------------------------------------------------------------------------------------------<br />
<br />
En conclusion, chacune des méthodes exposées ici s'adaptera à un cas précis.<br />
Ne pas chercher l'universalité, mais profiter de cette diversité.<br />
<br />
A++<br />
Franck</blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6163/differentes-methodes-determination-d-range-utile/</guid>
		</item>
		<item>
			<title>Limites et lacunes de VBA</title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6161/limites-lacunes-vba/</link>
			<pubDate>Fri, 14 Sep 2018 13:34:23 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">________________________________________________________________________________________________________________<br />
<br />
<br />
Bonjour,<br />
<br />
Comme chacun sait, Excel et VBA ont des spécifications, limites et lacunes.<br />
<br />
En ce qui concerne Excel, je ne vais pas les lister dans le sens ou c'est très bien fait <a href="https://support.office.com/fr-fr/article/sp%C3%A9cifications-et-limites-relatives-%C3%A0-excel-1672b34d-7043-467e-8e27-269d656771c3" target="_blank"><font color="#0000FF"><u>ICI</u></font></a>, du moins pour ce qui concerne les versions postérieures à 2007.<br />
<br />
Vous trouverez <a href="https://silkyroad.developpez.com/VBA/LesVariables/#LII" target="_blank"><font color="#0000FF"><u>ICI</u></font></a> les limites de chaque type de données (Byte, Integer, Long, Currency, String,...).<br />
<br />
Nous allons, dans ce sujet (re)découvrir et tenter de lister et résoudre un maximum de celles de VBA.<br />
<br />
Etant <b>persuadé en avoir oublié</b>, n'hésitez pas à me les indiquer en réponse pour que ce sujet soit le plus exhaustif possible.<br />
<br />
________________________________________________________________________________________________________________<br />
<br />
<ol class="decimal"><li style=""><b>Le nombre maximum d'Areas dans une feuille</b><br />
<ul><li style=""><u><font color="#A52A2A">Limite</font></u><br />
Ce nombre maximum est fixé à 8 192. <br />
Ce nombre correspond à la moitié de la limite de la méthode SpecialCells (cf plus bas) qui, vous en conviendrez, est fortement liée à la notion d'Areas.<br />
A noter toutefois que ce nombre semble s'augmenter au fur et à mesure des tests, Excel &quot;réagissant&quot; en effet sur ce sujet afin de s'adapter à la demande de l'utilisateur.<br />
Ainsi, un même utilisateur, sur un même pc, sans toucher à l'installation d'Office, peut voir ce maximum considérablement s'agrandir...<br />
Cela reste, pour moi, un des mystères de MS Excel.</li><li style=""><u><font color="#A52A2A">Comment y pallier</font></u><br />
cf paragraphe ci-dessous, à propos de la méthode SpecialCells.</li></ul><br />
<br /></li><li style=""><b>Limite de la méthode SpecialCells</b><br />
<ul><li style=""><u><font color="#A52A2A">Limite</font></u><br />
Elle ne peut recenser d'un seul coup plus d'un certain nombre d'aires (Areas) résultant de son application.<br />
Ce nombre est égal à la moitié de la limite d'un type integer soit 16 385.</li><li style=""><u><font color="#A52A2A">Comment y pallier</font></u><br />
<a href="https://www.developpez.net/forums/d1628452/logiciels/microsoft-office/excel/contribuez/pallier-limite-methode-vba-excel-range-specialcells/" target="_blank"><font color="#0000FF"><u>Lire la contribution d'unparia à ce sujet</u></font></a></li></ul><br />
<br /></li><li style=""><b>Le nombre maximum d'éléments dans un Array</b><br />
Ce nombre est limité par la quantité de mémoire disponible.<br />
Il varie donc selon le type de données contenues dans cet Array.<br />
C'est pourquoi il est toujours vivement recommandé de bien typer toutes vos variables.<br />
<br />
<br /></li><li style=""><b>La division entière : \</b><br />
<ul><li style=""><u><font color="#A52A2A">Limite</font></u><br />
Le plus grand nombre que l'on puisse diviser grâce à l'opérateur \ est 2 147 483 647.<br />
Il correspond à la limite du type Long.</li><li style=""><u><font color="#A52A2A">Test :</font></u><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:156px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> Demo_Division_Entiere<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> d <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>
   d = <span style="color: #cc66cc;">2147483647</span>
   MsgBox d \ <span style="color: #cc66cc;">83647</span>
   d = <span style="color: #cc66cc;">2147483648</span>#
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">Resume</span> <span style="color: #0000ff;">Next</span>
   MsgBox d \ <span style="color: #cc66cc;">2</span>
   <span style="color: #0000ff;">If</span> Err.Number &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span> MsgBox Err.Description
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li><li style=""><u><font color="#A52A2A">Comment y pallier</font></u><br />
Il suffit, pour cela, de prendre la partie entière de la division de deux Doubles.<br />
Voici une fonction qui fait très bien l'affaire, à titre d'exemple :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Function</span> Division_Entiere<span class="br0">&#40;</span>Nb1 <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>, Nb2 <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>
   Division_Entiere = Int<span class="br0">&#40;</span>Nb1 / Nb2<span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div>Code appelant :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">MsgBox Division_Entiere<span class="br0">&#40;</span><span style="color: #cc66cc;">21474836489</span>#, <span style="color: #cc66cc;">12542</span><span class="br0">&#41;</span></pre>
</div></li><li style=""><u><font color="#A52A2A">A noter :</font></u><br />
VBA n'étant pas très bien armé pour les opérations sur de grands nombres, la division de deux Double peut générer des erreurs...</li></ul><br />
<br /></li><li style=""><b>Le Modulo : Mod</b><br />
<ul><li style=""><u><font color="#A52A2A">Limite</font></u><br />
L'opérateur Mod est limité à 2 147 483 647.<br />
Il correspond à la limite du type Long, tout comme pour la division entière.</li><li style=""><u><font color="#A52A2A">Test :</font></u><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:156px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> Demo_Mod<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> d <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>
   d = <span style="color: #cc66cc;">2147483647</span>
   MsgBox d <span style="color: #0000ff;">Mod</span> <span style="color: #cc66cc;">83647</span>
   d = <span style="color: #cc66cc;">2147483648</span>#
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">Resume</span> <span style="color: #0000ff;">Next</span>
   MsgBox d <span style="color: #0000ff;">Mod</span> <span style="color: #cc66cc;">2</span>
   <span style="color: #0000ff;">If</span> Err.Number &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span> MsgBox Err.Description
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li><li style=""><u><font color="#A52A2A">Comment y pallier</font></u><br />
Tout comme pour la division entière, avec une petite fonction perso. Exemple :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Function</span> ModSansLimite<span class="br0">&#40;</span>Nb1 <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>, Nb2 <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>
   ModSansLimite = Nb1 - <span class="br0">&#40;</span>Int<span class="br0">&#40;</span>Nb1 / Nb2<span class="br0">&#41;</span> * Nb2<span class="br0">&#41;</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div>Code appelant :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">MsgBox ModSansLimite<span class="br0">&#40;</span><span style="color: #cc66cc;">2147483648</span>, <span style="color: #cc66cc;">83647</span><span class="br0">&#41;</span></pre>
</div></li></ul><br />
<br /></li><li style=""><b>La méthode WorksheetFunction.Match</b><br />
<ul><li style=""><u><font color="#A52A2A">Limite</font></u><br />
La limite de cette méthode est de 65 536, en ce qui concerne <u>les variables tableaux</u>.<br />
Ce nombre correspond à la limites de lignes dans Excel 2003.<br />
Cette limite n'existe plus si vous transférez votre tableau dans une feuille.</li><li style=""><u><font color="#A52A2A">Test :</font></u><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> Demo_Match<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> t<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, v, var <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   var = <span style="color: #FF0000;">&quot;liste21&quot;</span>
   <span style="color: #0000ff;">ReDim</span> t<span class="br0">&#40;</span><span style="color: #cc66cc;">65535</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
      t<span class="br0">&#40;</span>i<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;liste&quot;</span> &amp; i
   <span style="color: #0000ff;">Next</span>
   v = Application.Match<span class="br0">&#40;</span>var, t, <span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>
   MsgBox v
   <span style="color: #0000ff;">ReDim</span> <span style="color: #0000ff;">Preserve</span> t<span class="br0">&#40;</span><span style="color: #cc66cc;">65536</span><span class="br0">&#41;</span>
   t<span class="br0">&#40;</span><span style="color: #cc66cc;">65536</span><span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;liste65536&quot;</span>
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">Resume</span> <span style="color: #0000ff;">Next</span>
   v = Application.Match<span class="br0">&#40;</span>var, t, <span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">If</span> Err.Number &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span> MsgBox Err.Description
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li><li style=""><u><font color="#A52A2A">Comment y pallier</font></u><br />
Par une fonction personnelle.<br />
<br />
Cette fonction perso va utiliser une fonction qui détermine le nombre de dimensions d'un Array (Function Nb_Dimensions).<br />
Fonction Nb_Dimensions (utile également dans le paragraphe sur Transpose (ci-dessous)) :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:180px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Function</span> Nb_Dimensions<span class="br0">&#40;</span><span style="color: #0000ff;">ByRef</span> Tableau <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>
<span style="color: #808080;">'Retourne le nombre de dimensions d'une variable tableau</span>
<span style="color: #0000ff;">Dim</span> d <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, t <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> Fin
   <span style="color: #0000ff;">Do</span>
      d = d + <span style="color: #cc66cc;">1</span>
      t = UBound<span class="br0">&#40;</span>Tableau, d<span class="br0">&#41;</span>
   <span style="color: #0000ff;">Loop</span>
Fin:
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
   Nb_Dimensions = d - <span style="color: #cc66cc;">1</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div>La fonction de &quot;remplacement&quot; de Match :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Function</span> Get_Row<span class="br0">&#40;</span><span style="color: #0000ff;">ByRef</span> Tableau <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span>, <span style="color: #0000ff;">ByRef</span> Texto <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span>, <span style="color: #0000ff;">Optional</span> <span style="color: #0000ff;">ByRef</span> Colonne <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
<span style="color: #808080;">'D&eacute;termine l'index d'un &eacute;l&eacute;ment &agrave; partir de son contenu</span>
<span style="color: #808080;">'Retourne un Long repr&eacute;sentant l'index de cet &eacute;l&eacute;ment</span>
<span style="color: #808080;">'Retourne -1 si l'&eacute;l&eacute;ment n'existe pas dans le tableau ou erreur (de colonne, de Tableau, etc).</span>
<span style="color: #0000ff;">Dim</span> i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, strTemp <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
   Get_Row = <span style="color: #cc66cc;">-1</span>
   <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> Nb_Dimensions<span class="br0">&#40;</span>Tableau<span class="br0">&#41;</span>
       <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">1</span>
<span style="color: #808080;">'===== le pr&eacute;sent code, d&eacute;pos&eacute; par ucfoutu sur VBFrance, est la seule propri&eacute;t&eacute; de VBFrance</span>
<span style="color: #808080;">'=====VBFrance en autorise les libres copie et utilisation &agrave; la seule condition d'y laisser</span>
<span style="color: #808080;">'=====ins&eacute;r&eacute;es les trois pr&eacute;sentes lignes comment&eacute;es --- ucfoutu ---</span>
         strTemp = Chr<span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span> &amp; <span style="color: #0000ff;">Join</span><span class="br0">&#40;</span>Tableau, Chr<span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; Chr<span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>
         i = InStr<span class="br0">&#40;</span>strTemp, Chr<span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span> &amp; Texto &amp; Chr<span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
         <span style="color: #0000ff;">If</span> i = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span>
            Get_Row = <span style="color: #cc66cc;">-1</span>
         <span style="color: #0000ff;">Else</span>
            strTemp = <span style="color: #0000ff;">Mid</span><span class="br0">&#40;</span>strTemp, <span style="color: #cc66cc;">1</span>, i<span class="br0">&#41;</span>
            Get_Row = UBound<span class="br0">&#40;</span>Split<span class="br0">&#40;</span>strTemp, Chr<span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> - <span style="color: #cc66cc;">1</span>
            <span style="color: #0000ff;">If</span> Get_Row &lt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span> Get_Row = <span style="color: #cc66cc;">-1</span>
         <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
<span style="color: #808080;">'======================</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">2</span>
         <span style="color: #808080;">'si param&egrave;tre colonne omis, on prends la premi&egrave;re</span>
         <span style="color: #0000ff;">If</span> Colonne = <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span> Colonne = LBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
         <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">If</span> Tableau<span class="br0">&#40;</span>i, Colonne<span class="br0">&#41;</span> = Texto <span style="color: #0000ff;">Then</span> Get_Row = i: <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">For</span>
         <span style="color: #0000ff;">Next</span> i
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div></li><li style=""><u><font color="#A52A2A">A noter :</font></u><br />
La même limite est fixée en ce qui concerne la fonction Index (WorksheetFunction.Index).<br />
Il est cependant beaucoup plus simple d'y remédier...</li></ul><br />
<br /></li><li style=""><b>La méthode Transpose</b><br />
<ul><li style=""><u><font color="#A52A2A">Limite</font></u><br />
La limite de cette méthode est de 65 536. <br />
Tout comme Match et Index, ce nombre correspond à la limite de lignes dans Excel 2003.</li><li style=""><u><font color="#A52A2A">A noter :</font></u><br />
Transpose, étant à la base une fonction de feuille de calcul, retourne un Array en Base 1 même si l'Array qui lui est injecté est en Base 0.<br />
Notre fonction pour pallier à la limite de Transpose palliera également à cela.</li><li style=""><u><font color="#A52A2A">Test :</font></u><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> EssaiTranspose<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> t<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, v, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
&nbsp;
   <span style="color: #0000ff;">ReDim</span> t<span class="br0">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">65535</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
      t<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, i<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;liste&quot;</span> &amp; i
   <span style="color: #0000ff;">Next</span>
   v = Application.Transpose<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
   MsgBox <span style="color: #FF0000;">&quot;Avec TRANSPOSE, cas &lt; 65 536&quot;</span> &amp; vbCrLf &amp; vbCrLf &amp; _
   <span style="color: #FF0000;">&quot;t : &quot;</span> &amp; LBound<span class="br0">&#40;</span>t, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; To &quot;</span> &amp; UBound<span class="br0">&#40;</span>t, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot;  &lt;=&gt;  &quot;</span> &amp; LBound<span class="br0">&#40;</span>t, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; To &quot;</span> &amp; UBound<span class="br0">&#40;</span>t, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> &amp; vbCrLf &amp; _
    <span style="color: #FF0000;">&quot;v : &quot;</span> &amp; LBound<span class="br0">&#40;</span>v, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; To &quot;</span> &amp; UBound<span class="br0">&#40;</span>v, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot;  &lt;=&gt;  &quot;</span> &amp; LBound<span class="br0">&#40;</span>v, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; To &quot;</span> &amp; UBound<span class="br0">&#40;</span>v, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">Erase</span> v
   <span style="color: #0000ff;">ReDim</span> <span style="color: #0000ff;">Preserve</span> t<span class="br0">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">66000</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">65536</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">66000</span>
      t<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, i<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;liste&quot;</span> &amp; i
   <span style="color: #0000ff;">Next</span> i
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">Resume</span> <span style="color: #0000ff;">Next</span>
   v = Application.Transpose<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
   <span style="color: #0000ff;">If</span> Err.Number &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span> MsgBox <span style="color: #FF0000;">&quot;Avec TRANSPOSE, cas &gt; 65 536&quot;</span> &amp; vbCrLf &amp; vbCrLf &amp; Err.Description
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li><li style=""><u><font color="#A52A2A">Comment y pallier</font></u><br />
Il nous faut une fonction personnalisée qui :<br />
&gt; transpose l'array<br />
&gt; le restitue dans la même base<br />
Exemple (Attention : utilise la fonction Nb_Dimensions cf paragraphe précédent) :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Function</span> Transposition<span class="br0">&#40;</span><span style="color: #0000ff;">ByRef</span> Tableau <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span>
<span style="color: #808080;">'Transpose une variable tableau &agrave; 2 dimensions</span>
<span style="color: #0000ff;">Dim</span> tabl, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, c <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> Nb_Dimensions<span class="br0">&#40;</span>Tableau<span class="br0">&#41;</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">1</span>
         c = LBound<span class="br0">&#40;</span>Tableau<span class="br0">&#41;</span>
         c = IIf<span class="br0">&#40;</span>c = <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>
         <span style="color: #0000ff;">ReDim</span> tabl<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Tableau<span class="br0">&#41;</span> + c, <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
         <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>tabl<span class="br0">&#41;</span>
            tabl<span class="br0">&#40;</span>i, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> = Tableau<span class="br0">&#40;</span>i - c<span class="br0">&#41;</span>
         <span style="color: #0000ff;">Next</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">2</span>
         <span style="color: #0000ff;">ReDim</span> tabl<span class="br0">&#40;</span>LBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>, LBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
         <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
            <span style="color: #0000ff;">For</span> j = LBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Tableau, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
               tabl<span class="br0">&#40;</span>j, i<span class="br0">&#41;</span> = Tableau<span class="br0">&#40;</span>i, j<span class="br0">&#41;</span>
            <span style="color: #0000ff;">Next</span> j
         <span style="color: #0000ff;">Next</span> i
      <span style="color: #0000ff;">Case</span> <span style="color: #0000ff;">Else</span>
         MsgBox <span style="color: #FF0000;">&quot;Le tableau ne comporte pas une ou deux dimensions&quot;</span>
         <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Function</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
   Transposition = tabl
   <span style="color: #0000ff;">Erase</span> tabl
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div>Code appelant :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:144px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Dim</span> t<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, v, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   <span style="color: #0000ff;">ReDim</span> t<span class="br0">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">66666</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
      t<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, i<span class="br0">&#41;</span> = <span style="color: #FF0000;">&quot;liste&quot;</span> &amp; i
   <span style="color: #0000ff;">Next</span>
   v = Transposition<span class="br0">&#40;</span>t<span class="br0">&#41;</span>
   MsgBox <span style="color: #FF0000;">&quot;Avec Transposition, cas &gt; 65 536&quot;</span> &amp; vbCrLf &amp; vbCrLf &amp; _
   <span style="color: #FF0000;">&quot;t : &quot;</span> &amp; LBound<span class="br0">&#40;</span>t, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; To &quot;</span> &amp; UBound<span class="br0">&#40;</span>t, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot;  &lt;=&gt;  &quot;</span> &amp; LBound<span class="br0">&#40;</span>t, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; To &quot;</span> &amp; UBound<span class="br0">&#40;</span>t, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> &amp; vbCrLf &amp; _
    <span style="color: #FF0000;">&quot;v : &quot;</span> &amp; LBound<span class="br0">&#40;</span>v, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; To &quot;</span> &amp; UBound<span class="br0">&#40;</span>v, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot;  &lt;=&gt;  &quot;</span> &amp; LBound<span class="br0">&#40;</span>v, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; To &quot;</span> &amp; UBound<span class="br0">&#40;</span>v, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span></pre></td></tr></table></pre>
</div></li></ul><br /></li><li style=""><b>Limite de la méthode Union</b><br />
<ul><li style=""><u><font color="#A52A2A">Lacunes</font></u><br />
Deux lacunes sont à déplorer au sujet de cette Méthode :<br />
&gt; Si un des arguments = Nothing elle engendre une erreur <i>Argument ou appel de procédure incorrect</i><br />
&gt; Si deux Range s'intersectent, leurs cellules communes sont comptabilisées 2 fois.</li><li style=""><u><font color="#A52A2A">Test :</font></u><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:144px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> Demo_Union<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> Rng <span style="color: #0000ff;">As</span> Range, R <span style="color: #0000ff;">As</span> Range
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">Resume</span> <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">Set</span> Rng = Application.Union<span class="br0">&#40;</span>R, Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;A8:C10&quot;</span><span class="br0">&#41;</span>, Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;B9:D11&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">If</span> Err.Number &gt; <span style="color: #cc66cc;">0</span> <span style="color: #0000ff;">Then</span> MsgBox Err.Description
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
   <span style="color: #0000ff;">Set</span> Rng = Application.Union<span class="br0">&#40;</span>Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;A8:C10&quot;</span><span class="br0">&#41;</span>, Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;B9:D11&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
   MsgBox Rng.Address &amp; <span style="color: #FF0000;">&quot;   &quot;</span> &amp; Rng.Cells.Count
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li><li style=""><u><font color="#A52A2A">Comment y pallier</font></u><br />
Avec cette fonction :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Function</span> UnionSansDoublons<span class="br0">&#40;</span><span style="color: #0000ff;">ParamArray</span> Rngs<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> Range
<span style="color: #0000ff;">Dim</span> RngTemp <span style="color: #0000ff;">As</span> Range, R <span style="color: #0000ff;">As</span> Range, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>
   <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>Rngs<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>Rngs<span class="br0">&#41;</span>
      <span style="color: #0000ff;">If</span> <span style="color: #0000ff;">Not</span> Rngs<span class="br0">&#40;</span>i<span class="br0">&#41;</span> <span style="color: #0000ff;">Is</span> <span style="color: #0000ff;">Nothing</span> <span style="color: #0000ff;">Then</span>
         <span style="color: #0000ff;">If</span> RngTemp <span style="color: #0000ff;">Is</span> <span style="color: #0000ff;">Nothing</span> <span style="color: #0000ff;">Then</span>
            <span style="color: #0000ff;">Set</span> RngTemp = Rngs<span class="br0">&#40;</span>i<span class="br0">&#41;</span>
         <span style="color: #0000ff;">Else</span>
            <span style="color: #0000ff;">For</span> <span style="color: #0000ff;">Each</span> R <span style="color: #0000ff;">In</span> Rngs<span class="br0">&#40;</span>i<span class="br0">&#41;</span>.Cells
               <span style="color: #0000ff;">If</span> Application.Intersect<span class="br0">&#40;</span>RngTemp, R<span class="br0">&#41;</span> <span style="color: #0000ff;">Is</span> <span style="color: #0000ff;">Nothing</span> <span style="color: #0000ff;">Then</span>
                  <span style="color: #0000ff;">Set</span> RngTemp = Application.Union<span class="br0">&#40;</span>RngTemp, R<span class="br0">&#41;</span>
               <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
            <span style="color: #0000ff;">Next</span> R
         <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
      <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
   <span style="color: #0000ff;">Next</span> i
   <span style="color: #0000ff;">Set</span> UnionSansDoublons = RngTemp
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div>Code appelant :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Dim</span> Rng <span style="color: #0000ff;">As</span> Range, R <span style="color: #0000ff;">As</span> Range
   <span style="color: #0000ff;">Set</span> Rng = UnionSansDoublons<span class="br0">&#40;</span>R, Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;A8:C10&quot;</span><span class="br0">&#41;</span>, Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;B9:D11&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
   MsgBox Rng.Address &amp; <span style="color: #FF0000;">&quot;   &quot;</span> &amp; Rng.Cells.Count</pre></td></tr></table></pre>
</div></li></ul><br />
<br /></li><li style=""><b>Limite de la fonction Join</b><br />
La fonction Join comporte 2 défauts :<br />
<ol class="decimal"><li style="">Elle ne fonctionne qu'avec un tableau de String (et/ou de Variant/Variant),</li><li style="">Elle ne fonctionne qu'avec des Arrays à une dimension.</li></ol><br />
Ces deux défauts, pris simplement, ne méritent pas forcément que l'on s'y attelle car ils sont très aisément contournables en VBA.<br />
<br />
Si l'on regarde de près &quot;l'équivalant&quot; de Join dans les formules Excel, on se rend compte que la fonction CONCATENER comporte également deux défauts :<br />
<ol class="decimal"><li style="">Elle ne fonctionne pas avec des plages entières, ex : <i>=CONCATENER(A1:C10)</i>,</li><li style="">On ne peut pas y intégrer un séparateur, ex : <i>=CONCATENER(A1;A2;&quot;-&quot;)</i></li></ol><br />
<br />
Fort de ces 4 &quot;défauts&quot;, je vous propose aujourd'hui une fonction qui va gérer tout cela.<br />
<br />
Note : une seconde fonction <a href="https://www.developpez.net/forums/d1879483-2/logiciels/microsoft-office/excel/contribuez/limites-lacunes-vba/#post10410377" target="_blank">ICI</a> prends en charge les formats de cellules...<br />
<br />
<b>Code de la fonction JOINT :</b><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Function</span> JOINT<span class="br0">&#40;</span><span style="color: #0000ff;">ByRef</span> Tableau <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span>, _
                        <span style="color: #0000ff;">Optional</span> <span style="color: #0000ff;">ByRef</span> RowSeparator <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;&quot;</span>, _
                           <span style="color: #0000ff;">Optional</span> <span style="color: #0000ff;">ByRef</span> ColumnSeparator <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span> = <span style="color: #FF0000;">&quot;&quot;</span>, _
                              <span style="color: #0000ff;">Optional</span> <span style="color: #0000ff;">ByRef</span> ByRow <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span> = <span style="color: #0000ff;">True</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
<span style="color: #0000ff;">Dim</span> st<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, temp <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span>, maVar <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span>, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, d <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>
   <span style="color: #0000ff;">If</span> <span style="color: #0000ff;">TypeOf</span> Tableau <span style="color: #0000ff;">Is</span> Excel.Range <span style="color: #0000ff;">Then</span>
      temp = Tableau.Value
   <span style="color: #0000ff;">ElseIf</span> IsArray<span class="br0">&#40;</span>Tableau<span class="br0">&#41;</span> <span style="color: #0000ff;">Then</span>
      temp = Tableau
   <span style="color: #0000ff;">Else</span>
      JOINT = <span style="color: #FF0000;">&quot;Erreur d'ex&eacute;cution '5' : &quot;</span> &amp; vbCrLf &amp; vbCrLf &amp; _
               <span style="color: #FF0000;">&quot;Argument ou appel de proc&eacute;dure incorrect&quot;</span> &amp; vbCrLf &amp; _
                  <span style="color: #FF0000;">&quot;Argument incorrect : ByRef Tableau As Variant&quot;</span>
      MsgBox JOINT, vbOKOnly + vbCritical, <span style="color: #FF0000;">&quot;Microsoft Visual Basic&quot;</span>
      <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Function</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">Resume</span> <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">Do</span> <span style="color: #0000ff;">While</span> Err.Number = <span style="color: #cc66cc;">0</span>
      d = d + <span style="color: #cc66cc;">1</span>
      i = UBound<span class="br0">&#40;</span>temp, d<span class="br0">&#41;</span>
   <span style="color: #0000ff;">Loop</span>
   <span style="color: #0000ff;">On</span> <span style="color: #0000ff;">Error</span> <span style="color: #0000ff;">GoTo</span> <span style="color: #cc66cc;">0</span>
   <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> d - <span style="color: #cc66cc;">1</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">1</span>: maVar = temp<span class="br0">&#40;</span><span class="br0">&#40;</span>UBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span> + LBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span><span class="br0">&#41;</span> \ <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">2</span>: maVar = temp<span class="br0">&#40;</span><span class="br0">&#40;</span>UBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span> + LBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span><span class="br0">&#41;</span> \ <span style="color: #cc66cc;">2</span>, LBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span><span class="br0">&#41;</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #0000ff;">Else</span>
         JOINT = <span style="color: #FF0000;">&quot;Erreur d'ex&eacute;cution '5' : &quot;</span> &amp; vbCrLf &amp; vbCrLf &amp; _
               <span style="color: #FF0000;">&quot;Argument ou appel de proc&eacute;dure incorrect&quot;</span> &amp; vbCrLf &amp; _
                  <span style="color: #FF0000;">&quot;Argument incorrect : ByRef Tableau As Variant&quot;</span>
         MsgBox JOINT, vbOKOnly + vbCritical, <span style="color: #FF0000;">&quot;Microsoft Visual Basic&quot;</span>
         <span style="color: #0000ff;">Erase</span> temp
         <span style="color: #0000ff;">Exit</span> <span style="color: #0000ff;">Function</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
   <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> VarType<span class="br0">&#40;</span>maVar<span class="br0">&#41;</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">4</span>, <span style="color: #cc66cc;">5</span>, <span style="color: #cc66cc;">6</span>, <span style="color: #cc66cc;">7</span>, <span style="color: #cc66cc;">8</span>, <span style="color: #cc66cc;">11</span>, <span style="color: #cc66cc;">12</span>, <span style="color: #cc66cc;">17</span>
         <span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> d - <span style="color: #cc66cc;">1</span>
            <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">1</span>
               <span style="color: #0000ff;">ReDim</span> st<span class="br0">&#40;</span>LBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
               <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>temp<span class="br0">&#41;</span>
                  st<span class="br0">&#40;</span>i<span class="br0">&#41;</span> = temp<span class="br0">&#40;</span>i<span class="br0">&#41;</span>
               <span style="color: #0000ff;">Next</span>
               JOINT = <span style="color: #0000ff;">Join</span><span class="br0">&#40;</span>st, RowSeparator<span class="br0">&#41;</span>
            <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">2</span>
               <span style="color: #0000ff;">If</span> ByRow <span style="color: #0000ff;">Then</span>
                  <span style="color: #0000ff;">ReDim</span> st<span class="br0">&#40;</span>LBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
                  <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
                     <span style="color: #0000ff;">For</span> j = LBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
                        st<span class="br0">&#40;</span>i<span class="br0">&#41;</span> = st<span class="br0">&#40;</span>i<span class="br0">&#41;</span> &amp; ColumnSeparator &amp; temp<span class="br0">&#40;</span>i, j<span class="br0">&#41;</span>
                     <span style="color: #0000ff;">Next</span>
                     st<span class="br0">&#40;</span>i<span class="br0">&#41;</span> = Right<span class="br0">&#40;</span>st<span class="br0">&#40;</span>i<span class="br0">&#41;</span>, Len<span class="br0">&#40;</span>st<span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="br0">&#41;</span> - Len<span class="br0">&#40;</span>ColumnSeparator<span class="br0">&#41;</span><span class="br0">&#41;</span>
                  <span style="color: #0000ff;">Next</span>
                  JOINT = <span style="color: #0000ff;">Join</span><span class="br0">&#40;</span>st, RowSeparator<span class="br0">&#41;</span>
               <span style="color: #0000ff;">Else</span>
                  <span style="color: #0000ff;">ReDim</span> st<span class="br0">&#40;</span>LBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
                  <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
                     <span style="color: #0000ff;">For</span> j = LBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>temp, <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>
                        st<span class="br0">&#40;</span>j<span class="br0">&#41;</span> = temp<span class="br0">&#40;</span>j, i<span class="br0">&#41;</span>
                     <span style="color: #0000ff;">Next</span>
                     JOINT = JOINT &amp; ColumnSeparator &amp; <span style="color: #0000ff;">Join</span><span class="br0">&#40;</span>st, RowSeparator<span class="br0">&#41;</span>
                  <span style="color: #0000ff;">Next</span>
                  JOINT = Right<span class="br0">&#40;</span>JOINT, Len<span class="br0">&#40;</span>JOINT<span class="br0">&#41;</span> - Len<span class="br0">&#40;</span>ColumnSeparator<span class="br0">&#41;</span><span class="br0">&#41;</span>
               <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span>
         <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
         <span style="color: #0000ff;">Erase</span> st
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">20</span> <span style="color: #808080;">'LongLong</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #cc66cc;">1</span> <span style="color: #808080;">'VbNull</span>
         JOINT = <span style="color: #FF0000;">&quot;Erreur d'ex&eacute;cution '94' : &quot;</span> &amp; vbCrLf &amp; vbCrLf &amp; _
                  <span style="color: #FF0000;">&quot;Utilisation incorrecte de Null&quot;</span>
         MsgBox JOINT, vbOKOnly + vbCritical, <span style="color: #FF0000;">&quot;Microsoft Visual Basic&quot;</span>
      <span style="color: #0000ff;">Case</span> <span style="color: #0000ff;">Else</span> <span style="color: #808080;">'Objet ou vberror ou autre...</span>
         JOINT = <span style="color: #FF0000;">&quot;Erreur d'ex&eacute;cution '5' : &quot;</span> &amp; vbCrLf &amp; vbCrLf &amp; _
                  <span style="color: #FF0000;">&quot;Argument ou appel de proc&eacute;dure incorrect&quot;</span>
         MsgBox JOINT, vbOKOnly + vbCritical, <span style="color: #FF0000;">&quot;Microsoft Visual Basic&quot;</span>
   <span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span>
   <span style="color: #0000ff;">Erase</span> temp
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div><br />
<br />
<b>Exemples de code appelant :</b><br />
Depuis VBA :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Option</span> <span style="color: #0000ff;">Explicit</span>
&nbsp;
<span style="color: #0000ff;">Sub</span> Demonstration<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Const</span> NB <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span> = <span style="color: #cc66cc;">100000</span>
<span style="color: #0000ff;">Dim</span> Ra <span style="color: #0000ff;">As</span> Range, v, ll<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> NB, <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">10</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, i <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, j <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, t <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>, dd<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> NB, <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">10</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>
<span style="color: #0000ff;">Dim</span> vt<span class="br0">&#40;</span><span style="color: #cc66cc;">1000000</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Long</span>, d<span class="br0">&#40;</span><span style="color: #cc66cc;">1000000</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Double</span>, da<span class="br0">&#40;</span><span style="color: #cc66cc;">1000000</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Date</span>, errnull<span class="br0">&#40;</span><span style="color: #cc66cc;">1000</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Variant</span>
<span style="color: #0000ff;">Dim</span> obj <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>
   <span style="color: #0000ff;">Set</span> obj = CreateObject<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Scripting.dictionary&quot;</span><span class="br0">&#41;</span>
   <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>vt<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>vt<span class="br0">&#41;</span>
      vt<span class="br0">&#40;</span>i<span class="br0">&#41;</span> = i
   <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>d<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>d<span class="br0">&#41;</span>
      d<span class="br0">&#40;</span>i<span class="br0">&#41;</span> = Timer
   <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>da<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>da<span class="br0">&#41;</span>
      da<span class="br0">&#40;</span>i<span class="br0">&#41;</span> = Now
   <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">For</span> i = LBound<span class="br0">&#40;</span>errnull<span class="br0">&#41;</span> <span style="color: #0000ff;">To</span> UBound<span class="br0">&#40;</span>errnull<span class="br0">&#41;</span>
      errnull<span class="br0">&#40;</span>i<span class="br0">&#41;</span> = Null
   <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">Set</span> Ra = Range<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;A1:J&quot;</span> &amp; NB<span class="br0">&#41;</span>
   Ra.Value = <span style="color: #cc66cc;">10</span>
   v = Ra.Value
   <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> NB
      <span style="color: #0000ff;">For</span> j = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">10</span>
         ll<span class="br0">&#40;</span>i, j<span class="br0">&#41;</span> = <span style="color: #cc66cc;">10</span>
      <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">For</span> i = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> NB
      <span style="color: #0000ff;">For</span> j = <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">To</span> <span style="color: #cc66cc;">10</span>
         dd<span class="br0">&#40;</span>i, j<span class="br0">&#41;</span> = Timer
      <span style="color: #0000ff;">Next</span>
   <span style="color: #0000ff;">Next</span>
   Debug.Print <span style="color: #FF0000;">&quot;Erreurs : &quot;</span>
   Debug.Print JOINT<span class="br0">&#40;</span>obj, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #FF0000;">&quot;;&quot;</span><span class="br0">&#41;</span>
   Debug.Print <span style="color: #FF0000;">&quot;......................................&quot;</span>
   Debug.Print JOINT<span class="br0">&#40;</span>errnull, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #FF0000;">&quot;;&quot;</span><span class="br0">&#41;</span>
   Debug.Print <span style="color: #FF0000;">&quot;&quot;</span>
   Debug.Print <span style="color: #FF0000;">&quot;Test avec un Array &agrave; 1 dimension de 1 000 000 &eacute;l&eacute;ments.&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>vt<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>vt, <span style="color: #FF0000;">&quot;/&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>d<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>d, <span style="color: #FF0000;">&quot;/&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>da<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>da, <span style="color: #FF0000;">&quot;/&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   Debug.Print <span style="color: #FF0000;">&quot;&quot;</span>
   Debug.Print <span style="color: #FF0000;">&quot;Test avec un Array &agrave; 2 dimensions de &quot;</span> &amp; NB &amp; <span style="color: #FF0000;">&quot; lignes et 10 colonnes.&quot;</span>
   Debug.Print <span style="color: #FF0000;">&quot;ByRow............&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>Ra<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>Ra, <span style="color: #FF0000;">&quot;/&quot;</span>, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #0000ff;">True</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>v<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>v, <span style="color: #FF0000;">&quot;/&quot;</span>, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #0000ff;">True</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>ll<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>ll, <span style="color: #FF0000;">&quot;/&quot;</span>, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #0000ff;">True</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>dd<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>dd, <span style="color: #FF0000;">&quot;/&quot;</span>, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #0000ff;">True</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   Debug.Print <span style="color: #FF0000;">&quot;&quot;</span>
   Debug.Print <span style="color: #FF0000;">&quot;ByColumn............&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>Ra<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>Ra, <span style="color: #FF0000;">&quot;/&quot;</span>, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #0000ff;">False</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>v<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>v, <span style="color: #FF0000;">&quot;/&quot;</span>, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #0000ff;">False</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>ll<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>ll, <span style="color: #FF0000;">&quot;/&quot;</span>, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #0000ff;">False</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
   t = Timer
   Debug.Print TypeName<span class="br0">&#40;</span>dd<span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; : Longueur du String obtenu : &quot;</span> &amp; Len<span class="br0">&#40;</span>JOINT<span class="br0">&#40;</span>dd, <span style="color: #FF0000;">&quot;/&quot;</span>, <span style="color: #FF0000;">&quot;:&quot;</span>, <span style="color: #0000ff;">False</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp; <span style="color: #FF0000;">&quot; ==&gt; &quot;</span> &amp; Timer - t &amp; <span style="color: #FF0000;">&quot; sec&quot;</span>
&nbsp;
   <span style="color: #0000ff;">Erase</span> vt, d, da, ll, dd, v
   Ra.Clear
   <span style="color: #0000ff;">Set</span> Ra = <span style="color: #0000ff;">Nothing</span>
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div>Depuis une feuille de calcul :<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				=JOINT(A1:C10;;;VRAI)<br />
=JOINT(A1:C10;;;FAUX)<br />
=JOINT(A1:C10;&quot;_&quot;;&quot;|&quot;;VRAI)<br />
=JOINT(A1:C10;&quot;/&quot;;&quot;|&quot;;FAUX)<br />
....
			
		</div>
	</div>
</div></li></ol><br />
<br />
Merci à vous, visiteurs, d'avoir lu ce billet.<br />
<br />
A++<br />
Franck</blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6161/limites-lacunes-vba/</guid>
		</item>
		<item>
			<title>Utilisation du classeur Personal pour disposer, dans tous vos classeurs, de vos Fonctions, Sub et Classes</title>
			<link>https://www.developpez.net/forums/blogs/383341-pijaku/b6157/utilisation-classeur-personal-disposer-vos-classeurs-vos-fonctions-sub-classes/</link>
			<pubDate>Fri, 14 Sep 2018 13:23:17 GMT</pubDate>
			<description>______________________________...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">_______________________________________________________________________________________________________<br />
<br />
<br />
Bonjour,<br />
<br />
Ayant découvert ceci récemment, je voulais vous en faire un petit résumé en retour...<br />
<br />
L'intérêt?<br />
Pouvoir disposer, dans tous vos classeurs, de vos fonctions, procédures et classes favorites!<br />
<br />
Comme beaucoup d'entres vous, j'utilises le classeur personal pour stocker des procédures et des fonctions VBA utiles.<br />
Pour appeler ces procédures et fonctions depuis un classeur, ce n'est pas toujours aisé.<br />
<br />
Voici les différents processus.<br />
<br />
<ol class="decimal"><li style=""><b>Appeler une procédure :</b><br />
Tout simplement en utilisant Run ou Application.Run.<br />
En exemple, pour appeler la procédure nommée Macro1, située dans le classeur Personal.xlsb :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">Application.Run <span style="color: #FF0000;">&quot;Personal.xlsb!Macro1&quot;</span></pre>
</div><br />
Si la procédure Macro1 est une procédure paramétrée, on passera les paramètres (max 30 arguments) comme ceci :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">Application.Run <span style="color: #FF0000;">&quot;Personal.xlsb!Macro1&quot;</span>, Arg1, Arg2</pre>
</div><br />
<b>Remarques : </b> (extrait de l'aide VBA rubrique Application.Run, méthode)<br />
Vous ne pouvez pas utiliser d'arguments nommés avec cette méthode. Ils doivent être transmis par position.<br />
La méthode Run renvoie ce que la macro exécutée renvoie. <br />
<br />
<br /></li><li style=""><b>Appeler une fonction :</b><br />
Un peu plus délicat...<br />
Il nous faut, tout comme pour n'importe qu'elle fonction d'une DLL, référencer le classeur personal.<br />
Son nom, par défaut, est VBAProject. Or il s'avère que tout autre classeur possède son propre VBAProject.<br />
En premier lieu, nous allons changer le nom du VBAProject du classeur personal.<br />
Cliquez donc sur VBAProject (PERSONAL.XLSB) et modifiez le nom dans la fenêtre propriétés.<br />
A titre personnel, j'ai choisit VBAProjectPersonal.<br />
Dans le classeur depuis lequel vous souhaitez appeler une fonction de personal, ajoutez la référence :<br />
Outils/Références... Cocher VBAProjectPersonal (ou le nom que vous avez choisi).<br />
<br />
Vous pouvez maintenant appeler vos fonctions de la sorte :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:60px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Dim</span> B <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
   B = VBAProjectPersonal.FeuilleExist<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Classeur1&quot;</span>, <span style="color: #FF0000;">&quot;Feuil1&quot;</span><span class="br0">&#41;</span></pre></td></tr></table></pre>
</div>ou plus simplement encore :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:60px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Dim</span> B <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Boolean</span>
   B = FeuilleExist<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Classeur1&quot;</span>, <span style="color: #FF0000;">&quot;Feuil1&quot;</span><span class="br0">&#41;</span></pre></td></tr></table></pre>
</div><br />
<b>Remarque : </b><br />
Contrairement aux procédures (Sub) qui peuvent être Private, les fonctions (Function), au sein du classeur personal, doivent être Public pour être appelées depuis un autre classeur.<br />
<br />
<br /></li><li style=""><b>Les modules de classe :</b><br />
Sources : <a href="https://support.microsoft.com/en-us/help/555159" target="_blank">https://support.microsoft.com/en-us/help/555159</a><br />
<br />
Nous allons créer, dans le classeur Personal.xlsb, une classe nommée ClassPersonne et y placerons ce code :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:144px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Dim</span> clsNom <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
&nbsp;
<span style="color: #0000ff;">Property</span> <span style="color: #0000ff;">Get</span> Nom<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>
   Nom = clsNom
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Property</span>
&nbsp;
<span style="color: #0000ff;">Property</span> <span style="color: #0000ff;">Let</span> Nom<span class="br0">&#40;</span>N <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span><span class="br0">&#41;</span>
   clsNom = N
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Property</span></pre></td></tr></table></pre>
</div><br />
<b>Très important :</b> régler la propriété Instancing de votre Classe sur : <b>2- PublicNotCreatable</b>.<br />
<br />
<br />
Dans un module standard <u>de votre classeur personal</u>, vous allez créer cette fonction :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Function</span> New_Classe<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">As</span> ClassPersonne
   <span style="color: #0000ff;">Set</span> New_Classe = <span style="color: #0000ff;">New</span> ClassPersonne
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></pre></td></tr></table></pre>
</div><br />
Dans le classeur depuis lequel vous souhaitez appeler une Classe de personal, ajoutez la référence :<br />
Outils/Références... Cocher VBAProjectPersonal (ou le nom que vous avez choisi cf 2. plus haut).<br />
Vous pouvez désormais utiliser votre classe, située dans votre classeur personal, depuis n'importe quel classeur, comme ceci par exemple :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code vba :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:132px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">Sub</span> Demo<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">Dim</span> Personne <span style="color: #0000ff;">As</span> VBAProjectPersonal.ClassPersonne
<span style="color: #808080;">'ou Dim Personne As ClassPersonne</span>
   <span style="color: #0000ff;">Set</span> Personne = VBAProjectPersonal.New_Classe
   <span style="color: #808080;">' ou Set Personne = New_Classe</span>
   Personne.Nom = <span style="color: #FF0000;">&quot;TOTO&quot;</span>
   MsgBox Personne.Nom
<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></pre></td></tr></table></pre>
</div></li></ol><br />
<br />
Je n'ai rien inventé, juste transmis le résumé de mes lectures.<br />
<br />
Bonne journée.</blockquote>

]]></content:encoded>
			<dc:creator>pijaku</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/383341-pijaku/b6157/utilisation-classeur-personal-disposer-vos-classeurs-vos-fonctions-sub-classes/</guid>
		</item>
	</channel>
</rss>
