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

Macros et VBA Excel Discussion :

Function ISnull en vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut Function ISnull en vba
    Bonjour,

    dans le cas ou ma requete ne renvoie rien, la fonction isnull ne fonctionne pas.
    Pouvez-vous me dire ce qui ne fonctionne pas?

    Merci

    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 GetMarginCLITRESODay(dateJour As Date) As Double
    
    Dim requete As String, reponse As Recordset
    'ouverture de la base de données
    Set dbClio = OpenDatabase(databaseChemin)
    requete = "SELECT sum(c.eur)+sum(c.jpy)/t.jpy + sum(c.usd)/t.usd + sum(c.cad)/t.cad + sum(c.nok)/t.nok + sum(c.aud)/t.aud + sum(c.dkk)/t.dkk + sum(c.gbp)/t.gbp AS totalCliTreso" _
    & " FROM clitreso c, tauxchangedujour t where c.opening_date = #" & Format(dateJour, "mm/dd/yyyy") & "# GROUP BY t.jpy, t.usd, t.cad, t.nok, t.aud, t.dkk, t.gbp"
    Set reponse = dbClio.OpenRecordset(requete)
    If IsNull(reponse.Fields("totalCliTreso")) Then
    GetMarginCLITRESODay = 0
    Else
    'Range("m1").Value = requete
    GetMarginCLITRESODay = reponse.Fields("totalCliTreso").Value
    End If
    reponse.Close
    dbClio.Close
    
    End Function

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    dans le cas d'une requête c'est eof qui retourne si il n'y a pas d'éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if rs.eof = false then 'false il y a des élments
    msgbox "ok"
    else
    msgbox "ko"
    end if

  3. #3
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut
    j'ai mis cela pour corriger le problème, qu'en penses tu?

    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 GetVolumeEmpruntsMonth(devise As String, month As Integer) As Double
     
        Dim requete As String, reponse As Recordset
        'ouverture de la base de données
        Set dbClio = OpenDatabase(databaseChemin)
        requete = " select sum(volume_Emprunt)as sommeEmprunt from transactions where month(opening_date) = '" & month & "' and currency1 = '" & devise & "'"
        Set reponse = dbClio.OpenRecordset(requete)
    '   If IsNull(reponse.Fields("sommeEmprunt")) Then
        If reponse.RecordCount = 0 Then
            GetVolumeEmpruntsMonth = 0
        Else
            GetVolumeEmpruntsMonth = reponse.Fields("sommeEmprunt").Value
        End If
        reponse.Close
        dbClio.Close
     
    End Function

  4. #4
    Invité
    Invité(e)
    Par défaut Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If reponse.RecordCount = 0 Then
    GetVolumeEmpruntsMonth = 0
    Else
    GetVolumeEmpruntsMonth = reponse.Fields("sommeEmprunt").Value
    End If
    en théorie oui en pratique non!
    par défaut, OpenRecordset ouvre un recordset en Dynaset ??????? ça veut dire dynamiquement, tu peux le modifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    reponse.Fields("totalCliTreso")=152
    reponse.Update
    tu peux ajouter des enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    reponse.AddNew
    reponse.Fields("totalCliTreso)"=152
    reponse.Update
    le reponse.RecordCount te donnera la position du curseur dans les enregistrements du Recordset par zéro après exécution de la requête 1 après un reponse.MoveNext.
    pour obtenir la bonne valeur il faut soit faire reponse.MoveLast pour te positionner à la fin du Recordset, mais il y a erreur si la requête ne retourne rien;
    soit définir ton RecordSet en lecture seule;
    soit un requête don le scripte SQL ne permet pas de mise à jour dynamique exemple 2 table lier sans clé d'index.
    la solution la plus pratique est de vérifier la position du curseur dans le recordSet au début ou à la fin sachant que le début n'est pas la fin sauf si la requête ne retourne rien dans ce cas c'est la même chose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If reponse.BOF=reponse.EOF Then 'BOF le début et EOF la fin
          GetVolumeEmpruntsMonth = 0
    Else
         GetVolumeEmpruntsMonth = reponse.Fields("sommeEmprunt").Value
    End If

  5. #5
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut
    Ok merci pour ton aide c est parfait !

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

Discussions similaires

  1. Function dlookup sous vba
    Par b.noureddine dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/12/2013, 01h21
  2. [VBA-E]function sub declaration
    Par trach.sam dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/08/2006, 20h14
  3. [VBa-E] Function ou Sub comment choisir?
    Par gootsu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 15h20
  4. [VBA-E]function dans les cellules
    Par bibidi dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 21/05/2006, 13h55
  5. [VBA-E]bloquage sur end function
    Par ogenki dans le forum Macros et VBA Excel
    Réponses: 27
    Dernier message: 23/02/2006, 18h50

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