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 :

[excel] probleme de résultat de date avec sql en vba


Sujet :

VBA Access

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut [excel] probleme de résultat de date avec sql en vba
    Bonjour

    Alors j'ai un fichier.fic qui a pour nom "SALZONLI" et plusieurs colonne dont "valdate" qui est en format date jj/mm/aaaa lorsque qu'il n'y a pas de date le format est vide sinon une date quelconque. Si je vais chercher une ligne de date qui est vide, il n'y a rien dans SZ("Valdate") et l'execution s'arret et me revoye a ma cellule #valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Liste = " SELECT valdate FROM SALZONLI WHERE Etcode = '" & vNumEtab & "' AND Rucode = '" & vNumZone & "' AND Sacode = '" & vNumSalarDeb & "'"
                SZ.Open Liste, ConnWinpaie, adOpenStatic, adLockReadOnly
                If Not SZ.EOF Then
                    vResult = SZ("Valdate") 
                Else
                    vResult = Null
                End If
    J'aimerai qu'il revoye null et qu'il continu la suite du code?
    Comment je peux faire???

    Cordialement Law56100

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    regarde la fonction Nz() qui gère cet aspect null des variables
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    Mon problème est que ma colonne n'est null mais vide. par exemple si je consulte une case vide, cela plante ma fonction au niveau de ZS("datevale").

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Il serait intéressant que tu détailles ce que tu comptes faire après (montre le code qui suit), car j'ai l'impression que tu ne dis pas tout et que tu t'y prends mal.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    voici mon code
    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
    
         If Defaut = False Then
            
            Set SZ = New ADODB.Recordset
    
            
            If vNumSalarDeb = vNumSalarFin Then
                    
                Liste = " SELECT Etcode,Sacode,Rucode,Valtexte,valmonet,valdate FROM SALZONLI WHERE Etcode = '" & vNumEtab & "' AND Rucode = '" & vNumZone & "' AND Sacode = '" & vNumSalarDeb & "'"
                SZ.Open Liste, ConnWinpaie, adOpenStatic, adLockReadOnly
                If Not SZ.EOF Then
                    Select Case vTypeZone
                        Case 1, 51, 4, 54  ' Texte & dico
                            vResult = Trim(SZ("Valtexte"))
                        Case 2, 52  ' Monétaire
                            vResult = SZ("Valmonet") 'MonetWindevVB(SZ("Valmonet"))
                        Case 3, 53  ' Date
                            vResult = SZ("Valdate") 'ConvDateWindevVBA2(SZ("Valdate"))
    
                    End Select
                Else
                    vResult = CVErr(xlErrValue)
                End If
                SZ.Close
                Set SZ = Nothing
            Else
                Select Case vTypeZone
                    Case 2, 52
                        Liste = " SELECT SUM(Valmonet) AS ValeurTotal FROM SALZONLI WHERE Etcode = '" & vNumEtab & "' AND Rucode = '" & vNumZone & "' AND Sacode BETWEEN '" + vNumSalarDeb + "' AND '" & vNumSalarFin & "'"
                        SZ.Open Liste, ConnWinpaie, adOpenStatic, adLockReadOnly
                        If Not SZ.EOF Then
                            vResult = SZ("ValeurTotal")
                        Else
                            vResult = CVErr(xlErrValue)
                        End If
                    SZ.Close
                    Set SZ = Nothing
                    
                    Case Else
                        vResult = CVErr(xlErrValue)
                End Select
            End If        
        End If
            
        'Application.Cursor = xlDefault
        'Application.ScreenUpdating = True
        PZoneLibreSalarie = vResult
        
    End Function
    la partie Case 1, 51, 4, 54 renvoye une chaine de carractère.
    la partie Case 2, 52 renvoyer un nombre.
    la partie Case 3, 53 renvoye une date.

    mon fichier .fic a ete créé à l'aide de windev sauf que sur ce proget la colonne date est vide et renvoye rien a SZ("Valdate") lorsque la souris survole SZ("Valdate") car dans un autre projet windev le fichier .fic colonne date renvoye null a SZ("Valdate") lorsque la souris survole SZ("Valdate"), elle affiche SZ("Valdate") = Null

    je ne sais pas si je suis plus claire ou pas.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    1. Si ton champ ValDate est un champ de type date, il ne peut pas être vide. Il ne peut être que null ou contenir une valeur de date. Si ton champ ValDate est un champ texte, il peut éventuellement contenir une chaine vide ("").

    2. Ton code ne montre pas comment tu as dimensionné ta variable VResult. Elle ne pourra "contenir" NULL que si elle est de type VARIANT.

    3. As-tu compilé ton code? (menu Débogage/Compiler). Si la souris ne donne rien comme infobulle, c'est peut-être que tu as une erreur de compilation quelque par.

    4. As-tu fait fonctionner ton code? Si oui, quel est le résultat? As-tu un message d'erreur? Lequel?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    1) Le fichier .fic a été créé par windev grâce a l’analyse de windev suaf qu’a l’époque c’étais sous windev5.5 et maintenant windev11 il y a une option null supporté c'est-à-dire que la colonne vide a pour valeur null. J’ai essayé sur un autre fichier identique mais avec cette option et la fonction SQl me renvoye null.
    2) Alors Vresult est un variant et je retourne un varaint
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Function PZoneLibreSalarie(CodeZone As String, Optional CodeEtablissement As String = "", Optional CodeSalarieDebut As String = "", Optional CodeSalarieFin As String = "") As Variant
       ' Application.Volatile vRaff
        Dim vResult As Variant
    3) J’ai compilé, il n’y a pas d’erreur de programmation, le code fonctionne.
    4) il me renvoie un #valeur
    5) explication
    Voici ma table :
    Etcode|Sacode|Rucode|Valtexte|valmonet|valdate |
    01 |001 | CARO | abc | 100 |01/01/2009|
    02 |001 | CARO | abc | 100 | |

    Selon etcode, sacode et rucode et si autrevaraible =1 alors Vresult= Valtexte
    Selon etcode, sacode et rucode et si autrevaraible =2 alors Vresult= valmonet
    Selon etcode, sacode et rucode et si autrevaraible =3 alors Vresult= valdate
    Dans pour la première ligne j’ai bien vResult=01/01/2009
    Et pour la première ligne j’ai un #valeur car il n’y a pas de valeur. Et dans l’autre fichier j’ai null

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je suppose que la valeur renvoyée par la fonction est utilisée dans un contrôle. Ce contrôle est-il lié à un champ d'une table? Si oui, ce champ est-il de type date? Si oui, tu ne peux y renvoyer une chaine vide.

    Il faudrait donc, en pas à pas, aller jusqu'à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vResult = SZ("Valdate")
    l'exécuter, puis regarder le type de la variable vResult (via les valeurs espions). S'il est de type string, il faut en tirer les conclusions et adapter la valeur de cette variable pour qu'elle soit du type souhaité.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    j'ai testé plusieurs foi en pas à pas et voici le résultat

    expression---------valeur-----------type

    vResult-------------vide-------Variant/empty
    ZS("Valdate")-------------------objet/field

    et sur mon autre projet

    vResult-------------vide-------Variant/empty
    ZS("Valdate")-------Null---------objet/field

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

Discussions similaires

  1. Probleme de date avec sql
    Par ascheriit dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/05/2015, 07h57
  2. Problème date avec SQL
    Par langelot222 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/04/2007, 09h45
  3. Réponses: 6
    Dernier message: 10/08/2006, 15h45
  4. Date avec SQL Server
    Par RodEpsi dans le forum WinDev
    Réponses: 5
    Dernier message: 12/05/2006, 17h10
  5. Gérer les dates avec SQL Server 2000
    Par saby dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/01/2006, 18h06

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