VBA Excel - La fourmi de Langton
VBA Excel - La fourmi de Langton

Ce code VBA est une illustration du programme créé par Chris Langton.
Règles du « jeu »
- Si la fourmi est sur une case blanche, elle effectue une rotation vers la gauche; si elle est sur une case noire, elle effectue une rotation vers la droite ;
- La fourmi inverse la couleur de la case sur laquelle elle se trouve (blanc devient noir et réciproquement);
- La fourmi avance d'une case dans la direction de son orientation.
Mises au point
Dans ce code, les limites d'Excel ont été largement sous-estimées, volontairement.
Des boîtes de dialogue ont été incorporées pour montrer les changements dans le déplacement de cette fourmi. Trois étapes : la phase « symétrique », la phase « chaotique » et la phase « autoroute ». (pour plus de renseignements, direction votre moteur de recherche préféré!)
Les lignes de code, de 8 à 14, ne sont qu'une mise en forme de la feuille Excel ("Feuil1" à adapter)
Réalisation
- Ouvrir un nouveau classeur Excel,
- Taper ALT+F11 (=> une fenêtre Visual Basic Editor s'ouvre),
- Insertion/Module,
- Copier/Coller, dans ce module, le code donné ci-dessous,
- Adapter le code en remplaçant systématiquement "Feuil1" par le nom de votre feuille (ou pas...),
- Fermer la fenêtre Visual Basic Editor,
- Lancer la procédure en tapant : Alt+F8, choix : "Fourmi" puis cliquez sur "Exécuter".
Code VBA
Option Explicit Sub Fourmi() Dim ColActuelle As Integer, LigActuelle As Long, ColFuture As Integer, LigFuture As Long, i As Long Dim Haut As Boolean, Gauche As Boolean, Bas As Boolean, Droite As Boolean 'Mise en forme Application.ScreenUpdating = False With Sheets("Feuil1").Range("A1:IV30000") .ColumnWidth = 3 .RowHeight = 19.5 .Interior.ColorIndex = -4142 End With Application.ScreenUpdating = True MsgBox "Début de la phase « symétrique »" Haut = True Gauche = False Bas = False Droite = False LigFuture = 100 ColFuture = 50 Sheets("Feuil1").Cells(LigFuture, ColFuture).Select For i = 1 To 15000 If i = 500 Then Sheets("Feuil1").Cells(LigFuture, ColFuture).Select: MsgBox "Début de la phase « chaotique »" If i = 10000 Then Sheets("Feuil1").Cells(LigFuture, ColFuture).Select: MsgBox "Début de la phase « autoroute »" LigActuelle = LigFuture ColActuelle = ColFuture If LigActuelle = 1 Or ColActuelle = 1 Or ColActuelle = 252 Or LigActuelle = 60000 Then GoTo Fin With Sheets("Feuil1").Cells(LigActuelle, ColActuelle) If .Interior.ColorIndex = -4142 Then .Interior.ColorIndex = 1 If Haut = True Then Haut = False: Gauche = True: LigFuture = LigActuelle: ColFuture = ColActuelle - 1 ElseIf Gauche = True Then Gauche = False: Bas = True: LigFuture = LigActuelle + 1: ColFuture = ColActuelle ElseIf Bas = True Then Bas = False: Droite = True: LigFuture = LigActuelle: ColFuture = ColActuelle + 1 ElseIf Droite = True Then Droite = False: Haut = True: LigFuture = LigActuelle - 1: ColFuture = ColActuelle End If Else .Interior.ColorIndex = -4142 If Haut = True Then Haut = False: Droite = True: LigFuture = LigActuelle: ColFuture = ColActuelle + 1 ElseIf Gauche = True Then Gauche = False: Haut = True: LigFuture = LigActuelle - 1: ColFuture = ColActuelle ElseIf Bas = True Then Bas = False: Gauche = True: LigFuture = LigActuelle: ColFuture = ColActuelle - 1 ElseIf Droite = True Then Droite = False: Bas = True: LigFuture = LigActuelle + 1: ColFuture = ColActuelle End If End If End With Next i Exit Sub Fin: MsgBox "Stop ! La fourmi a atteints les limites de la feuille Excel." End Sub
Notes
Il est possible d'augmenter (ou de diminuer) le nombre d'itération et donc de cases, en changeant la ligne 24 :
For i = 1 To 15000
Il est également possible de changer les couleurs, en modifiant les lignes 12, 31, 32 et 43...
Ce document intitulé « VBA Excel - La fourmi de Langton » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.