VBA Excel - La fourmi de Langton

Septembre 2016


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...

A voir également :

Ce document intitulé «  VBA Excel - La fourmi de Langton  » issu de CommentCaMarche (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.