VBA - Algorithme Labyrinthe - erreur 1004

  • Initiateur de la discussion Initiateur de la discussion aspx
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

aspx

XLDnaute Nouveau
Bonjour,

Je suis actuellement en train de coder un algorithme qui trouve un chemin pour sortir d'un labyrinthe. Le labyrinthe est dessiné sur ma feuille excel de la cellule 1x1 à la cellule 12x6 (j'ai colorié en jaune les zones inaccessibles et en blanc les zones accessibles). On part de la case 2x1 qui est blanche.

L'algorithme consiste à tester tt les cases alentour (gauche, haut, droite puis bas), et y aller si on trouve une case blanche (puis colorier la case courante en noir pour dire qu'on y est déjà passé). Si on ne trouve pas de case blanche on revient sur nos pas en trouvant une case noire. etc...

Passons sur l'algorithme car le problème vient du code VBA en lui même, j'ai une erreur 1004, apparemment assez banale vu les recherches que j'ai pu faire sur le net mais je n'arrive pas à la résoudre...

L'erreur survient sur ma première condition concernant la couleur d'une case :

Code:
If (current_col > 1) And (Cells(current_row, current_col - 1).Interior.ColorIndex = 2) Then
            Cells(current_row, current_col).Interior.ColorIndex = 1
            current_col = current_col - 1

Pour info current_col et current_row stockent la position courante (colonne et ligne resp.).

J'ai fait des tests séparés sur Cells(i,j).Interior.ColorIndex et ça marche bien, je vois pas trop où est le problème...

Voici mon code en entier si besoin il y a :

Code:
Sub Laby()
Dim compteur, current_row, current_col As Integer
Dim fini As Boolean
fini = False
compteur = 0
current_row = 2
current_col = 1
While (fini = False)
    Cells(current_row, current_col).Select
    If (compteur > 0) And ((current_row = 1) Or (current_row = 12) Or (current_col = 6) Or (current_col = 1)) Then
            fini = True
            MsgBox "Algorithme terminé"
    Else
        If (current_col > 1) And (Cells(current_row, current_col - 1).Interior.ColorIndex = 2) Then
            Cells(current_row, current_col).Interior.ColorIndex = 1
            current_col = current_col - 1
        ElseIf (current_row > 1) And (Cells(current_row - 1, current_col).Interior.ColorIndex = 2) Then
            Cells(current_row, current_col).Interior.ColorIndex = 1
            current_row = current_row - 1
        ElseIf (current_col < 6) And (Cells(current_row, current_col + 1).Interior.ColorIndex = 2) Then
            Cells(current_row, current_col).Interior.ColorIndex = 1
            current_col = current_col + 1
        ElseIf (current_row < 12) And (Cells(current_row + 1, current_col).Interior.ColorIndex = 2) Then
            Cells(current_row, current_col).Interior.ColorIndex = 1
            current_row = current_row + 1
        ElseIf (current_col > 1) And (Cells(current_row, current_col - 1).Interior.ColorIndex = 1) Then
            Cells(current_row, current_col).Interior.ColorIndex = 1
            current_col = current_col - 1
        ElseIf (current_row > 1) And (Cells(current_row - 1, current_col).Interior.ColorIndex = 1) Then
            Cells(current_row, current_col).Interior.ColorIndex = 1
            current_row = current_row - 1
        ElseIf (current_col < 6) And (Cells(current_row, current_col + 1).Interior.ColorIndex = 1) Then
            Cells(current_row, current_col).Interior.ColorIndex = 1
            current_col = current_col + 1
        ElseIf (current_row < 12) And (Cells(current_row - 1, current_col).Interior.ColorIndex = 1) Then
            Cells(current_row, current_col).Interior.ColorIndex = 1
            current_row = current_row + 1
        End If
    End If
    compteur = compteur + 1
Wend
End Sub

Merci par avance !
 
Re : VBA - Algorithme Labyrinthe - erreur 1004

Bonjour aspx
Erreur classique. Dans la structure If... Then... End, les deux membres de la fonction AND
Code:
(current_col > 1) And (Cells(current_row, current_col - 1).Interior.ColorIndex = 2)
sont évalués avant l'évaluation de la fonction AND.
Par conséquent, si current_col est inférieur ou égal à 1, Cells(current_row, current_col - 1) n'existe pas et engendre une erreur.

Il faut donc tester conditionnellement le deuxième membre de la fonction AND :
Code:
[COLOR="DarkSlateGray"][B]If current_col > 1 Then
   If Cells(current_row, current_col - 1).Interior.ColorIndex = 2 Then
      Cells(current_row, current_col).Interior.ColorIndex = 1
      current_col = current_col - 1
      [COLOR="SeaGreen"]'(...)[/COLOR]
   End If
End If[/B][/COLOR]
ROGER2327
#3182
 
Re : VBA - Algorithme Labyrinthe - erreur 1004

Bonjour aspx
Erreur classique. Dans la structure If... Then... End, les deux membres de la fonction AND
Code:
(current_col > 1) And (Cells(current_row, current_col - 1).Interior.ColorIndex = 2)
sont évalués avant l'évaluation de la fonction AND.
Par conséquent, si current_col est inférieur ou égal à 1, Cells(current_row, current_col - 1) n'existe pas et engendre une erreur.

Il faut donc tester conditionnellement le deuxième membre de la fonction AND :
Code:
[COLOR="DarkSlateGray"][B]If current_col > 1 Then
   If Cells(current_row, current_col - 1).Interior.ColorIndex = 2 Then
      Cells(current_row, current_col).Interior.ColorIndex = 1
      current_col = current_col - 1
      [COLOR="SeaGreen"]'(...)[/COLOR]
   End If
End If[/B][/COLOR]
ROGER2327
#3182

J'avais placé le test avant en pensant que ça pourrait influer mais si les deux sont forcément exécutés... Merci bcp je vais arranger ça !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
703
Réponses
4
Affichages
590
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
370
Retour