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

  1. #1
    Membre actif 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 : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    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 sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonjour,

    sur quelle ligne l'erreur ..?

  3. #3
    Membre actif 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 : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

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

  4. #4
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    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
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    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
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre actif 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 : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    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
    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
    Points : 3 685
    Points
    3 685
    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.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  8. #8
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    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
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Membre actif 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 : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    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"!

  10. #10
    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
    Points : 3 685
    Points
    3 685
    Par défaut
    Dans ce cas, tu ne devrais pas utiliser un booleen, qui ne connait que 2 états et non pas 3, mais une valeur de type string par exemple, ta fonction deviendrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function getGagnant() As String
    'Renvoie la valeur de la ligne gagnante
    For i = 1 To 8
        If Val(Lbl_Ligne(i)) = 3 Then
          getGagnant = "Gagné"
          Exit For
        ElseIf Val(Lbl_Ligne(i)) = -3 Then
          getGagnant = "Perdu"
          Exit For
        Else
          getGagnant = "Egalité"
        End If
    Next i
    End Function
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  11. #11
    Membre actif 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 : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Hum, je viens de me rendre compte que le code qui je vous ai présenté, ce n'est pas celui que j'ai, en fait c'est un code test... qui fonctionne.

    Le code que j'ai actuellement a un Null à la place du zéro. J'ai apporté la modification.

    OhMonBateau, c'est un Morpion!

    Le fonctionnement serait:
    3, Il y a 3 Croix alignées, renvoie True
    -3, il y a 3 Ronds alignés, renvoie False
    ni 3, ni -3, aucun alignement de 3 symbole n'a été trouvé, renvoie Null

  12. #12
    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
    Points : 3 685
    Points
    3 685
    Par défaut
    C'est pour celà qu'il est recommandé à mon avis de "typer" ta fonction, byte, integer, boolean, string, etc... au moins tu es sûr de ne pas lui faire sortir une valeur incompatible.

    Une petite couche de "Option Explicit" en début de module pour la finition et on évite déjà bien des erreurs
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  13. #13
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par Goupo
    Hum, je viens de me rendre compte que le code qui je vous ai présenté, ce n'est pas celui que j'ai, en fait c'est un code test... qui fonctionne.

    Le code que j'ai actuellement a un Null à la place du zéro. J'ai apporté la modification.

    Le fonctionnement serait:
    3, renvoie True
    -3, renvoie False
    ni 3, ni -3, renvoie Null
    et comment compte tu afficher un Null ..? avec ton message box ..?

  14. #14
    Membre actif 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 : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Donc, le problème c'était le MsgBox ne peut pas afficher de Null, c'est bien ça?

    Comme le Sub Cmd_Gagne_Click ne me sert qu'à contrôler la fonction pour l'utiliser plus tard ailleurs si c'est Null, on n'affiche rien.

    D'ailleurs je viens de tester ça, et ça ne marche pas. Il y a un contrôle spécifique pour savoir si c'est Null?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Cmd_Gagne_Click()
        If getGagnant = Null Then
            MsgBox getGagnant
        End If
    End Sub

  15. #15
    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
    Points : 3 685
    Points
    3 685
    Par défaut
    "Mais pourquoi faire simple quand on peut faire compliqué ?", ce serait pas ta devise des fois ?
    Généralement dans un message box on met une phrase donc une variable String conviendrait non ? En tout cas ce mélange Booléen et Null est assez "surprenant"
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  16. #16
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    pour tester si nul voir is Nothing mais tu devrai réfléchire à la façon dont tu vas utiliser ta fonction ...! dans ton exemple tu l'appelle 2 fois ...!

  17. #17
    Membre actif 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 : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Is Nothing c'est une fonction?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If is nothing getGagnant Then
    Citation Envoyé par OhMonBateau
    En tout cas ce mélange Booléen et Null est assez "surprenant"
    Moi je trouve que c'est le mélange booléen/entier qui est bizarre.
    Je pense que c'est une question d'"élégance". Un peu comme le Goto et le Exit For...

  18. #18
    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
    Points : 3 685
    Points
    3 685
    Par défaut
    Ou ça un mélange booléen / entier ? Ce que je veux dire c'est que normalement on n'utilise les variables de type booléen quand on a 2 et seulement deux (two, dos ) états possibles.
    Sinon on utilise autre chose, mais comme quoi il y a autant de point de vue que de gens qui se penchent sur un code, là je crois que je vais me relever avant de tomber d'ailleurs.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  19. #19
    Membre actif 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 : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Citation Envoyé par OhMonBato
    Ou ça un mélange booléen / entier ?
    J'ai peut-être un peu de brume dans ma tête... Je parlais du premier code que je vous ai présenté...
    Citation Envoyé par OhMonBato
    Ce que je veux dire c'est que normalement on n'utilise les variables de type booléen quand on a 2 et seulement deux (two, dos ) états possibles.
    Sinon on utilise autre chose, mais comme quoi il y a autant de point de vue que de gens qui se penchent sur un code, là je crois que je vais me relever avant de tomber d'ailleurs.
    Ok, je vois. Donc plus besoin de is nothing.

    Merci, tu peux rester assis.

+ 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