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

VBA Access Discussion :

Attribuer un champ vide dans une table si valeur listBox Nulle


Sujet :

VBA Access

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut Attribuer un champ vide dans une table si valeur listBox Nulle
    Bonjour, je voudrais savoir comment attribuer une valeur nulle dans une table avec une requête insert, si je ne choisi rien dans une liste déroulante.

    En fait dans mon INSERT, j'ai mis des variables, qui sont définies au préalable comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariable=Me.LeNomDeMaListBox
    Pour le moment si je laisse comme ceci j'ai une erreur du type "Utilisation incorecte du null"

    MaVariable est un integer.

    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Points : 161
    Points
    161
    Par défaut
    Salut, il te suffit de tester si la valeur est null ou pas, et le traiter en code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim MaVariable as String
    if IsNull(Me.LeNomDeMaListBox) then
       MaVariable=""
    else
       MaVariable=Me.LeNomDeMaListBox
    end if
    PS : Le code marrant qui fonctionne dans cette situation est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim MaVariable as String
    if Me.LeNomDeMaListBox="" then
       MaVariable=""
    else
       MaVariable=Me.LeNomDeMaListBox
    end if
    Algorithmiquement, ça se simplifie en "MaVariable=Me.LeNomDeMaListBox" mais bon.... XD

  3. #3
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Sauf que ma variable est de type Integer!!!

    Et que si je met comme tu m'a dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNull(Me.listeIntervenant2) Then
       Id_technicien2 = ""
    Else
       Id_technicien2 = Me.listeIntervenant2
    End If
    J'ai une erreur d'incompatibilité de type...

    SOS

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 20
    Points
    20
    Par défaut
    cette errer apparait par ce que tu a choisi interdit valeur null dans ton champ Id_technicien2
    en plus tu ne peux pas ajouté un nouveau technicien sans id
    si tu priserais ce que tu veux faire dans ce ca je peux t'aider
    désoler pour mon null franÇai

  5. #5
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    Ne pourrais-tu pas contourner le problème : dans ta liste déroulante, tu rajoutes par une requête union 0, "(aucun)"

    A+

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut tous le monde,

    je n'ai pas bien compris le rapport avec l'insertion dans la table mais:
    un integer ne peut être null donc soit tu déclares maVariable en Variant soit tu utilises la fonction NZ().

    s'il y a pb poste ton sql d'insertion.

  7. #7
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Voici mon sql d'insertion:

    En fait j'en ai plusieurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'initialisation de la requete sql comme réquete d'ajout à la table tbl_Intervention (INSERT)
    sql = " insert into tbl_Intervention values( " & id_Intervention & ", '" & DateIntervention & "'," & ID_Machine & "," & ID_Type & "," & ID_Categorie & ",'" & Descriptif & "'," & ID_Diagnostic & "," & DuréeIntervention & "," & DuréeArrêtMachine & ");"
    odb.Execute (sql)
    sql = " insert into tbl_Intervenir values( " & id_Intervention & ", " & Id_Technicien1 & ");"
    'Excecution de la requete Sql d'ajout dans la base de donnée
    odb.Execute (sql)

  8. #8
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Id_technicien2 <> 0 Then
        sql = " insert into tbl_Intervenir values( " & id_Intervention & ", " & Id_technicien2 & ");"
     
        'Excecution de la requete Sql d'ajout dans la base de donnée
        odb.Execute (sql)
    Alors en bref, j'ai 3 requetes insert puisque la première m'insert dans ma table intervention

    Ma seconde, si j'ai uen technicien qui est intervenu, sa m'insert dans ma table intervenir qui est en fait une table couple Intervention/Personnel

    Ma troisième, si j'ai un second technicien qui est intervenu, sa m'insert dans ma table intervenir également...

    N'hésitez pas si vous avez besoin d'autres infos!

  9. #9
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    et ceci ne te conviens pas?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If not IsNull(Me.listeIntervenant2) Then
        sql = " insert into tbl_Intervenir values( " & id_Intervention & ", " & Id_technicien2 & ");"
    ...
    Else

  10. #10
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Euuuuuuu c'est pas que sa ne me convient pas mais c'est au moment de déclarer mes variable quer sa bloque. Pour résumer ma structure, sa donne environ sa (en 1000 fois plus simple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MaVariable as Integer
    MaVariable=Me.MaListBox.value
    Mon code sql
    Et sa bloque au niveau de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariable=Me.MalistBox.value
    Puisque MaListBox est vide

    Donc sa ne va même pas jusqu'au sql

    C'est pourquoi je me demandais comment détourner le problème, en insérant à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariable=Me.MalistBox.value
    Mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If MalistBox.value="" then
    MaVariable=""
    else
    MaVariable=Me.MalistBox.value
    end if
    Mais quand je fait sa j'ai un erreur de mauvaise utilisation du null.

  11. #11
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    je te rappel mon précédent post, dans ce cas pourquoi pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim MaVariable as Variant
    ?
    et dans le dernier code: tu ne passes pas par la variable, ce qui t'évite ce pb.

  12. #12
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Mais sa ne va rien changer pour le reste que je passe ma variable de Integer à Variant?

    Sa peut influer sur quoi?

    En fait avant sa marché parce que mes variables étaient déclarées comme variant, sans que je le fasse exprès, parce que j'avais déclaré mes variables comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ..., ..., ..., ..., ... as Integer
    Donc seul ma dernière variable était déclarée comme integer, les autres étaient par défaut déclarées comme variant!!!

    Mais ensuite j'ai donc eu une reflexion comme quoi il fallait déclarer mes variables comme sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim .. as Integer, .. as Integer, ... as Integer
    Donc j'ai fait sa pour mes 130 formulaires et maintenant j'ai des soucis de utilisation incorecte de null alors que sa fonctionné avant...

    Mais en fait je ne sais pas à quel niveau sa risque de me poser des problèmes si je déclare en variant à la place de en Integer?

    Moi comme c'est une GMAO que je suis en train de créer, je vais ensuite faire du traitement de mes infos avec des calculs, des graphs, des analyses croisées... Il ne faut donc pas que cela me pose problème par la suite si mes variables n'ont pas étaient déclarées corectement, mais si sa ne pose aucun souci, je les redéclare en variant comme sa je ne vais pas avoir de soucis...

    A voir, si quelqu'un peut m'éclairer?

  13. #13
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    un integer c'est un nombre au qui "minimum" peut être Empty=0
    mais jamais inexitant.

    variant lui peut ne pas exister comme exister sous différente forme: integer, double... voir être un objet.
    c'est la super variable

    le problème que tu peux avoir avec un variant c'est justement sa nullité qu'il faut parfois gérer. surtout lors de calcul, la nullité absorbe tout: 10+Null = Null
    c'est pour cela que existe NZ(). cf <F1>

    on peut toujours s'en sortir sans variant en se réservant une valeur pour la nullité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim maVariable As Integer
    maVariable=NZ(Me.MaListBox,-1)   'puisque la liste démarre par défaut à 0
    if maVariable<>-1 then ....

  14. #14
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Bon ba pour cette variable ça à l'air de fonctionner parce que avant d'executer la requête sql, on fait le test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Id_technicien2 <> -1 Then
    Mais la je rencontre le même probème avec ma variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ID_Diagnostic = Me.listDiagnostic
    Mais je n'ai pas de test de ce genre avant ma requête, donc je ne peut pas utiliser la fon ction Nz comme on a fait précédement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = " insert into tbl_Intervention values( " & id_Intervention & ", '" & DateIntervention & "'," & ID_Machine & "," & ID_Type & "," & ID_Categorie & ",'" & Descriptif & "'," & ID_Diagnostic & "," & DuréeIntervention & "," & DuréeArrêtMachine & ");"

  15. #15
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    es ce bien utile que tu passes par des variables?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = " insert into tbl_Intervention values( " & id_Intervention & ", '" & DateIntervention & "'," & ID_Machine & "," & ID_Type & "," & ID_Categorie & ",'" & Descriptif & "'," & NZ(Me.listDiagnostic,"''") & "," & DuréeIntervention & "," & DuréeArrêtMachine & ");"

  16. #16
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    C'est vrai, mais j'ai récupéré le programme derrière quelqu'un donc je n'ai pas cherché à modifier, j'ai copié la structure quasi à l'identique.

    Si je ne mets pas de variable, je n'ai pas besoin de définir les Dim ... as ... ?

    Sava me réduire considérablement mon code, mais sa va être long....

    Ya pas d'autres solutions de toute façon? Sauf si je remets tout en variant?!

  17. #17
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    la commande Remplacer du menu édition est fait pour cela.
    tu peux remettre en variant.
    un bon principe de base: pas toucher quand ca marche même si on sait qu'il y a mieux.

Discussions similaires

  1. Utiliser les champs vides d'une table dans un code
    Par marcelstan dans le forum Access
    Réponses: 1
    Dernier message: 23/03/2015, 12h34
  2. [AC-2010] Somme de champs vides dans une table
    Par jlv25 dans le forum Modélisation
    Réponses: 2
    Dernier message: 14/07/2011, 12h53
  3. recherche de champ vide ou non vide dans une table
    Par milan dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/07/2008, 10h42
  4. Réponses: 13
    Dernier message: 20/06/2007, 16h55
  5. Test evenement sur champ vide dans une table
    Par eddyG dans le forum Access
    Réponses: 3
    Dernier message: 30/05/2006, 17h02

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