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 :

Erreur d'exécution '94' Utilisation incorrecte de Null [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 131
    Points : 151
    Points
    151
    Par défaut Erreur d'exécution '94' Utilisation incorrecte de Null
    Bonjour,

    je dois ecrire dans un fichier txt les enregistrements d'une requete lors de l’exécution j'obtiens l'erreur 94 et je n'arrive pas à résoudre le pb.

    je vous joins le code vba associé
    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
    87
    88
    89
    90
    91
     
    Private Sub Commande1_Click()
    Dim oFSO As Scripting.FileSystemObject
    Dim oFl As Scripting.File
    Dim oTxt As Scripting.TextStream
    Dim i As Integer
    Dim nomfichier, nomrequete, datefic, ligne1 As String
    Dim lignesuiv, lignesuiv2, lignesuiv3 As String
    'Dim qdf As DAO.QueryDef
    Dim drendezvous, censemble, cetage, cporte, cbatiment As String
    Dim cescalier As String
     
    '---------------------------------
    Dim enr As DAO.Recordset
    Set enr = Me.Recordset                 '<== pour travailler sur les données
    ' Libération de la référence
    '------------------------------------------------------------
    lignesuiv = ""
    nomfichier = "c:\netoi\NOI974_"
    monmsg = MsgBox(Me.DateDeb, vbOKOnly)
    'transforme la chaine date en format date
    'cdate(
    'Récupère la date du jour au format anglais et transforme en chaine de caratères
    datefic = Str(Format(Me.DateDeb, "yyyymmdd"))
    datefic = LTrim(datefic)
     
    nomfichier = nomfichier + datefic + "_01" + ".dsp"
     
    monmsg = MsgBox("Génération du fichier " & nomfichier, vbOKOnly)
     
    'Instanciation du FSO
    Set oFSO = New Scripting.FileSystemObject
    Set oTxt = oFSO.CreateTextFile(nomfichier, True)
    ligne1 = "NOI974;" + datefic + ";DSP;3.0;RE"
    oTxt.WriteLine (ligne1)
     
    'Se positionne sur le 1er enregistrement de la requete
     
    If Not enr.EOF Then enr.MoveFirst
     
    Do
    'On récupère les données mon enregistrement encours
    'On vérifie que ces champs ne sont pas vide car la fonction writeln n'ecrit pas de donnés vides
     
    If Me.[DATE DE RENDEZ-VOUS] = "" Then
       drendezvous = LTrim(Str(Format(Me.[DATE DE RENDEZ-VOUS], "yyyymmdd")))
    Else
       drendezvous = " "
    End If
     
    If Me.ENSEMBLE = "" Then
       censemble = " "
    Else
       censemble = Me.ENSEMBLE
    End If
     
    If Me.BATIMENT = "" Then
       cbatiment = " "
    Else
       cbatiment = Me.BATIMENT
    End If
     
    If Me.ESCALIER = "" Then
       cescalier = " "
    Else
       cescalier = Me.ESCALIER
    End If
     
    If Me.ETAGE = "" Then
       cetage = " "
    Else
       cetage = Me.ETAGE
    End If
    If Me.PORTE = "" Then
       cporte = " "
    Else
       cporte = Me.PORTE
    End If
     
    lignesuiv = Me![STATUS] + ";" + Me.[ORDRE] + ";" + Me.[TYPE DE RACCORDEMENT] + ";" + Me.[STATUS DE RACCORDEMENT] + ";" + Me.[TYPE DE DEGROUPAGE] + ";" + Me.[TECHNOLOGIE] + ";;" + Me.[PROFIL] + ";;" + Me.[BI-INJECTION] + ";;;;;" + Me.[IDENTIFIAN DE RACCORDEMENT] + Me.[LIGNE ASSOCIEE] + ";;;;;;;NOI974" + Me.NUMCONTRAT + ";" + Me.Z0BPQ + ";;;;;;;;;;;;;;;;;;;;;;;;;;" + drendezvous + ";" + Me.[CRENEAU RENDEZVOUS] + ";;;;;;;;;;;;;;;;;;;;;;" + Me.NOMPRENOMS + ";" + Me.[LIBELLE DE LA VOIE] + ";" + Me.[CODE RIVOLI] + ";" + Me.[NUM DE LA VOIE] + ";" + censemble + ";" + cbatiment + ";" + toto + ";" + cetage + ";" + cporte + ";;" + Me.[CODE INSEE] + ";" + Me.VILLE + ";" + Me.NOMPRENOMS + ";" + Me.[GSM CLIENT] + ";Contact NETOI;0692046570;;;" + Me.[TYPE TECHNOLOGIE MODEM] + ";" + Me.[REGIME SAV] + ";" + Me.[NBRE DE PAIRE] + ";;;;;;;;;"
     
     
    oTxt.WriteLine (lignesuiv)
     
    'On passe à l'enregistrement suivant
        enr.MoveNext
     
    Loop Until enr.EOF = True
     
     
    End Sub
    il s'arrete sur la ligne 60 quand eje demande un deboguage.


    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Il faudrait faire le teste en utilisant la fonction Nz

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Nz(Me.BATIMENT,0) = 0 Then
       cbatiment = " "
    Else
       cbatiment = Me.BATIMENT
    End If
    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 131
    Points : 151
    Points
    151
    Par défaut
    Merci pour votre reponse,

    En fait je crois que mon problème vient du fait que j'ai une requete paramétré et que je n'arrive pas à l'ouvrir correctement et du coup il me retourne aucun enregistrement.

    voici le code de la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Client.[DATE CONTRAT], Client.NUMCONTRAT, Client.REFCLIENT, Client.[GSM CLIENT], Client.NOMPRENOMS, Client.[LIBELLE DE LA VOIE], Client.[NUM DE LA VOIE], Client.ENSEMBLE, Client.BATIMENT, Client.ESCALIER, Client.ETAGE, Client.PORTE, Client.[CODE RIVOLI], [CODE POSTAL].[CODE INSEE], Client.ORDRE, Client.STATUS, [CODE POSTAL].VILLE, Client.[TYPE DE RACCORDEMENT], Client.[STATUS DE RACCORDEMENT], Client.[TYPE DE DEGROUPAGE], Client.TECHNOLOGIE, Client.PROFIL, Client.[BI-INJECTION], Client.[IDENTIFIAN DE RACCORDEMENT], Client.[LIGNE ASSOCIEE], Client.[MODELE UTILISE], Client.[IDENTIFIANT STATION RADIO], Client.[IDENTIFIANT OPERATEUR], Client.[REF INTERNE OPERATEUR], Client.[ENCAPSULATION VLAN], Client.[CODE OPERATEUR INTERCONNECTION], Client.NUMCONTRATOPERATEURINTERCONNECTION, Client.[MAINTIENT PORTABILITE], Client.[DATE DE RENDEZ-VOUS], Client.[CRENEAU RENDEZVOUS], Client.[ACCES SITE PARTICULIER], Client.[ADRESSE GEOLOCALISATION X], Client.[REGIME SAV], Client.[NBRE DE PAIRE], Client.Z0BPQ, Client.[TYPE TECHNOLOGIE MODEM]
    FROM Client INNER JOIN [CODE POSTAL] ON Client.[CODE POSTAL] = [CODE POSTAL].[Code Postal]
    WHERE (((Client.[DATE CONTRAT])>=[Formulaires]![Commande de ligne]![DateDeb] And (Client.[DATE CONTRAT])<=[Formulaires]![Commande de ligne]![Datefin]));
    Es ce quelqu'un peut m'aider a traduire cela en vba s'il vous plait?

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour volsan, Jeannot45,

    Il y a peut-être d'autres erreurs qui ne sont pas soulevées à cause de ta manière de déclarer les variables.

    Tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim drendezvous, censemble, cetage, cporte, cbatiment As String
    Ce qui veut dire que la variable drendezvous est de type variant, idem pour censemble, idem pour cetage, idem pour cporte tandis que cbatiment est de type string.
    Pour que toutes tes variables soient de type string il aurait fallu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim drendezvous As string, censemble As string, cetage As string, cporte As string, cbatiment As String
    Tu ne peux affecter une valeur nulle à une variable de type string, donc la raison de l'erreur sur la ligne 60, tandis que les autres variables qui sont elles de type variant vont accepter une valeur nulle.
    Enfin quand tu inscrits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Me.BATIMENT = "" Then
       cbatiment = " "
    Else
       cbatiment = Me.BATIMENT
    End If
    S'il n'y a pas d'infos saisie dans ce champ le résultat est un nul. Donc pour être certain de ton test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Me.BATIMENT = ""  Or IsNull("Me.BATIMENT") Then
       cbatiment = " "
    Else
       cbatiment = Me.BATIMENT
    End If
    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 131
    Points : 151
    Points
    151
    Par défaut
    Désolé pour le délais dans ma réponse
    Je vous remercie pour vos contributions en ulisant la méthode de Jeannot cela a été suffisant pour résoudre mon probleme

    Cordialement,
    D.VOLSAN

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

Discussions similaires

  1. [AC-2002] erreur d'exécution '94' utilisation incorrecte de null
    Par Mpgam2 dans le forum VBA Access
    Réponses: 0
    Dernier message: 08/07/2013, 20h02
  2. Erreur d'exécution 94, Utilisation incorrecte de Null
    Par redojackson dans le forum VBA Access
    Réponses: 5
    Dernier message: 29/05/2013, 23h07
  3. [AC-2003] [VBA] Erreur d'exécution 94 - Utilisation incorrecte de Null aléatoire
    Par chahine92 dans le forum VBA Access
    Réponses: 3
    Dernier message: 19/04/2011, 22h00
  4. Réponses: 10
    Dernier message: 07/12/2010, 14h30
  5. Erreur d'exécution '94' Utilisation incorrecte du Null.
    Par zeine77 dans le forum VBA Access
    Réponses: 6
    Dernier message: 11/08/2008, 16h53

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