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

VB 6 et antérieur Discussion :

[VB6]Utilisation non autorisée de Null


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut [VB6]Utilisation non autorisée de Null
    Salut,

    J'ai une erreur qui me dit : "Utilisation non autorisée de Null".
    C'est à cause du MsgBox "getGagnant" où du "getGagnant = Null"?
    Comment je peu résoudre le problème sans le contourner (par une chaîne ou autre bricolage)?

    Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Cmd_Gagne_Click()
        MsgBox getGagnant <--------------------- ligne de l'erreur
    End Sub
    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
    Public Function getGagnant()
    'Renvoie la valeur de la ligne gagnante
    For i = 1 To 8
        If Lbl_Ligne(i) = 3 Then
            getGagnant = True
            Exit For
            Else
            If Lbl_Ligne(i) = -3 Then
                getGagnant = False
                Exit For
                Else
                getGagnant = Null
                Exit For
            End If
        End If
    Next i
    End Function

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    sur quelle ligne l'erreur ..?

  3. #3
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    L'erreur est sur la ligne du msgbox...

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bon c'est pas vraiment clair.. je n'arrive pas à reproduire l'erreur essai le pas à pas ... rajoute un point d'arrêt sur ton msgbox (F9 en sélectionnant la ligne..) lance ton code puis lors qu'il "s'arrête" utilise la touche F8 pour exécuter pas/pas ton code et voir où il y as probléme...

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Il me semble que ....
    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
    Public Function getGagnant()
    'Renvoie la valeur de la ligne gagnante
    getGagnant = 0 'initialise le retour si aucune des conditions If ne sont True
    For i = 1 To 8
        If Lbl_Ligne(i) = 3 Then
            getGagnant = True
            GoTo sortIf
            Else
            If Lbl_Ligne(i) = -3 Then
                getGagnant = False
                GoTo sortIf
                Else
                getGagnant = 0
            End If
        End If
    Next i
    sortIf:
    End Function
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    C'est déjà fait.

    Lorsque le programme arrive sur "MsgBox getGagnant",
    il rentre dans la fontcion getGagnant et l'éxecute jusqu'au bout,
    c'est lorsqu'il arrive au "End Function" que le message d'erreur aparaît.

    D'après ça, je croix que c'est la fonction qui est en cause.

    ProgElect, il me semble que non. Voici une fonction qui marche très bien, sans l'initialisation de la variable du nom de la fonction. De plus, j'ai testé au cas où et ça ne change rien.
    Merci quand même.


    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
    Public Function estTermine()
    Dim control As Boolean
    control = False
     
    'Si le tableau est plein, alors la partie est finie
    If estPlein Then
        control = True
    End If
     
    'Si l'un des joueurs a gagné
    If Victoire Then
        control = True
    End If
     
    'Renvoyer
    estTermine = control
    End Function

  7. #7
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Je veux bien, mais ........
    Public Function estTermine()
    Dim control As Boolean
    control = False
    .......
    .......
    'Renvoyer
    estTermine = control ' ici la fonction renvoie bien un non null
    End Function
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Le Goto SortIf et l'étiquette SortIf pourraient être remplacés de manière plus élégante par Exit For

    Lbl_Ligne c'est Lbl_Ligne.Caption ou une variable ? Parce que s'il s'agit d'un contrôle tu dois avoir une erreur si tu mets du texte dedans et non pas un chiffre ou alors il faut faire une comparaison de chaine si je dis pas de betise (If Lbl_Ligne(i) = "3" Then ... 3 entre guillemets)

    Mais à part ça je n'ai pas d'erreur non plus, GetGagnant est il déclaré quelquepart ? En tant que quoi ? Parce que tu lui affecte True, False ou 0, ce qui revient à False

    A priori il y a un gagnant ou il n'y en a pas, donc seules 2 valeurs devraient être possible, si c'est ça, GetGagnant = True si Lbl_Ligne = 3 sinon dans tous les autres cas, c'est False, ce qui allège un chouille ta boucle de test.

  9. #9
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Merci pour le End For!


    Le Lbl_Ligne(i), c'est un C'est un Caption.

    A priori il y a un gagnant ou il n'y en a pas
    Non, en fait, le jeu, c'est un morpion, donc, il peut y avoir égalité!

    ProgElect, oui, mais alors la problématique ici, ça serait : "Est-ce qu'une fonction peut renvoyer un Null?"

    Pour plus d'élégance, j'ai remplacé mes Goto par des "Exit For"!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Info][Mémoire] utilisée pour un pointeur null
    Par thomas_strass dans le forum Langage
    Réponses: 14
    Dernier message: 04/11/2004, 12h48
  2. [VB6] utilisation de Property LET / GET pour un tableau
    Par titounne dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 18/10/2004, 22h06
  3. [CR 9] Mise en forme non affichée when null
    Par Yorglaa dans le forum Formules
    Réponses: 2
    Dernier message: 28/06/2004, 17h27
  4. [VB6] Utilisation de Implements
    Par Babyneedle dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/01/2003, 20h21
  5. [VB6] Utiliser un ou plusieurs datareports ?
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/11/2002, 10h44

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