IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème avec condition dans mon if


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 54
    Par défaut Problème avec condition dans mon if
    Bonjour à tous,

    Je suis entrain de programmer une IA pour bataille navale sur Excel, pour celà j'essaie d'avoir une IA la plus intelligente possible, ainsi, je fais une fonction qui lorsqu'elle touche un bateau elle va essayer de continuer de tirer sur celui ci. Le problème est le suivant : le programme plante sur les lignes en rouge, dans mon code il me dis que la méthode cells de l'objet worksheet a échouée, sauriez vous m'aider ?

    Cordialement

    Précision DTL et DTC sont les coordonées de la case du bateau qui est touchée, je l'ai passée en variable globale car ma fonction tir IA est appelée à chaque fois que j'appuie sur un bouton.

    L'idée est que lorsque l'IA touche une case il va regarder ce qu'il y a en haut, à gauche à droite en bas, etc.

    Bien sur je n'ai pas joint, tout monde car il est trop long, mais celà devrait suffir


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    If (detection = True) Then
    
    presence = False
    
    While (presence = False)
    
    ligne = DTL
    colonne = DTC - 1
    
    If (Sheets("Jeu").Cells(colonne, ligne).Value = "X" Or Sheets("Jeu").Cells(colonne, ligne).Value = "O") Then
            
            If (Sheets("Jeu").Cells(colonne, ligne).Value <> "" And Sheets("Jeu").Cells(colonne, ligne).Value <> "X" And Sheets("Jeu").Cells(colonne, ligne).Value <> "O") Then
            presence = True
            End If
            
            derniertest = 1
            
        End If
        
        If (Sheets("Jeu").Cells(colonne, ligne).Value = "X" Or Sheets("Jeu").Cells(colonne, ligne).Value = "O") Then
            ligne = DTL + 1
            colonne = DTC + 1
            
            If (Sheets("Jeu").Cells(colonne, ligne).Value <> "" And Sheets("Jeu").Cells(colonne, ligne).Value <> "X" And Sheets("Jeu").Cells(colonne, ligne).Value <> "O") Then
            presence = True
            End If
            
            derniertest = 2
            
        End If
    
        If (Sheets("Jeu").Cells(colonne, ligne).Value = "X" Or Sheets("Jeu").Cells(colonne, ligne).Value = "O") Then
    
            ligne = DTL - 1
            colonne = DTC + 1
            
             If (Sheets("Jeu").Cells(colonne, ligne).Value <> "" And Sheets("Jeu").Cells(colonne, ligne).Value <> "X" And Sheets("Jeu").Cells(colonne, ligne).Value <> "O") Then
             
            presence = True
            
            End If
            
            derniertest = 3
        End If
    
        If (Sheets("Jeu").Cells(colonne, ligne).Value = "X" Or Sheets("Jeu").Cells(colonne, ligne).Value = "O") Then
    
            ligne = DTL - 1
            colonne = DTC - 1
            
            If (Sheets("Jeu").Cells(colonne, ligne).Value <> "" And Sheets("Jeu").Cells(colonne, ligne).Value <> "X" And Sheets("Jeu").Cells(colonne, ligne).Value <> "O") Then
            
            presence = True
            
            End If
            
            derniertest = 4
            
        End If
    Wend
    
    End If
    
    If (detection = False) Then
    
    While (Sheets("Jeu").Cells(colonne, ligne).Value = "X" Or Sheets("Jeu").Cells(colonne, ligne).Value = "O")
        colonne = Int(10 * Rnd) + 3
        ligne = Int(10 * Rnd) + 3
    Wend
    
    End If
    
    If (Sheets("Jeu").Cells(colonne, ligne).Value = "") Then
    
        Sheets("Jeu").Cells(colonne, ligne).Value = "O"
    
    End If
    
    If (Sheets("Jeu").Cells(colonne, ligne).Value <> "" And Sheets("Jeu").Cells(colonne, ligne).Value <> "X" And Sheets("Jeu").Cells(colonne, ligne).Value <> "O") Then
    
        Sheets("Jeu").Cells(colonne, ligne).Value = "X"
        detection = True
        DTC = colonne
        DTL = ligne
    
    End If

  2. #2
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2016
    Messages : 27
    Par défaut
    Bonjour

    Déjà une remarque. Si ligne contient le numéro de ligne et colonne le numéro de colonne, tu les as inversés. Il faudrait écrire ....Cells(Ligne, colonne). D'un autre côté, si c'est systématiquement inversé ... ça pourrait fonctionner.

    Concernant ton plantage, quelles sont les valeurs de ligne et de colonne au moment du plantage ?

    Une piste : L'une des valeurs est inférieure à 1 ou supérieure au nombre de lignes ou de colonnes de ta feuille ?

    Je n'ai pas cherché à analyser la logique de ton code, j'ai juste tenté de comprendre ce qui pouvait faire planter les lignes que tu indiques.

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour,
    Je vais personnellement (en plus des remarques déjà faites et fort justifiées) me contenter de m'interroger sur le mécanisme de l'esprit qui conduirait à écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SI toto = "X" ou  toto = "O" alors
           SI  toto <> "" et  toto <> "X" et  toto <> "O" alors
                '......
           fin si
    fin si
    Informatique ou pas !

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 54
    Par défaut
    Ha oui effectivement si j'ai tout inversé c'est pas top
    Les valeurs de lignes et colonnes sont les bonnes (malgré qu'elles soient inversées)
    Je vais regarder quand même

    En effet il y a des conditions en trop

Discussions similaires

  1. VBA SQL Update avec DSum problème de quote dans mon code
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/07/2017, 17h39
  2. Problème avec condition WHERE dans commande SELECT
    Par Badouba76 dans le forum Objective-C
    Réponses: 3
    Dernier message: 08/11/2013, 18h19
  3. [ODBC] problème de table dans mon fichier avec ODBC
    Par cdevl32 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 28/03/2009, 13h55
  4. Réponses: 6
    Dernier message: 17/08/2005, 12h38
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo