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

IHM Discussion :

Compter dans un état


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    Bon soir,

    je cherche à compter dans mon état.

    lorsque j’exécute ma procédure pas à pas j'obtient bien le résultat, mais impossible d'attribuer une valeur à mon champ dans l'état.
    Nom du champ dans l'état: Cerf_Vu
    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
    Private Sub Report_Open(Cancel As Integer)
     
    Dim DateRef, DateDebut, DateFin, DateRef2 As Date
    Dim TotalGibier
    DateRef = Now
     
    If DateRef >= #1/6/2012# And DateRef <= #5/31/2013# Then
        DateDebut = "01/06/2012"
        DateFin = "31/05/2013"
    end if
     
    TotalCerf = DSum("[Quantité]", "TbeGibierSortant", "[Gibier]='Cerf(s)' AND [DateSaisie]>=#" & Format(DateDebut, "mm-dd-yyyy") & "# AND[DateSaisie]<= #" & Format(DateFin, "mm-dd-yyyy") & "#")
    Cerf_Vu = TotalCerf
    message d'erreur

    impossible d'attribuer une valeur à cet objet

    cordialement

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 351
    Points : 23 816
    Points
    23 816
    Par défaut
    Presonnellement voici comment je procéderai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim DateRef, DateDebut, DateFin, DateRef2 As Date
    Note que c'est un piège de VBA, quand tu utilises la ligne prédédente voici ce que tu écris réellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim DateRef as variant, DateDebut as variant, DateFin as variant, DateRef2 As Date
    et non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim DateRef as date, DateDebut as date, DateFin as date, DateRef2 As Date
    comme tu en avais sans doute l'intention.

    L'usage de Goto ne se justifie plus que rarement avec les langages modernes. D'où son remplacement par le End if.

    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
     
    Private Function CalculerTotalCerf() as long
     
        Dim DateRef as date
        Dim DateDebut as date
        Dim DateFin as date
        Dim DateRef2 As Date
        Dim TotalGibier as long
     
        DateRef = Now
     
        If DateRef >= DateSerial(2012, 6, 1) And DateRef <= DateSerial(2013, 05,31) Then
            DateDebut = DateSerial(2012, 06, 01)  'Utiliser DateSerial() évite les ambiguité sur la date
            DateFin = DateSerial(2013, 05, 31)
        end if
     
        TotalCerf = DSum("[Quantité]", "TbeGibierSortant", "[Gibier]='Cerf(s)' AND [DateSaisie]>=#" & Format(DateDebut, "yyyy-mm-dd") & "# AND [DateSaisie]<= #" & Format(DateFin, "yyyy-mm-dd") & "#") 'Utiliser yyyy-mm-dd évite les ambiguité sur la date
     
       CalculerTotalCerf = TotalCerf
    end function
    et dans la propriété Source du contrôle Cerf_Vu : =CalculerTotalCerf()et tu enlèves le code Report_OpenUne dernière recommandation : il faut généralement éviter de mettre des valeurs en dur dans le code. Dans ton exemple, si tu exécute ton rapport dans 1 an les résultats ne seront probablement pas ce que tu attends. Il est plus simple de mettre les valeurs en paramètre. Cela pourrait donner :

    Private Function CalculerTotalCerf(prmDateDebut as date, prmDateFin as date) as longprmDateDebut, prmDateFin pourrait être renseignés dans un formulaire où l'utilisateur déciderai de la période.

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    bonsoir,

    en premier merci pour ta procedure, je vais modifier tout ça demain.
    Sachant que tout les ans, je dois utiliser une meme place de date entre le 01 juin de l''année et le 30 mai de l'année suivante je pensai utiliser une procedure pour le faire automatiquement
    comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateRef = DateSerial(Year(Now), Month(12), 1) 'determiner la date 1 janvier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDebut = Format(DateSerial(Year(DateRef), Month(DateRef) + 5, 1))'Determiner la date du 1 juin de l'année en cour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateFin = Format(DateSerial(Year(DateRef), Month(DateRef) + 17, 30))'determiner la date du 30 mai de l'année suivante
    sa devrait me permettre de supprimer mes lignes IF

    quand pense tu

    cordialement

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    bonjour,

    j'ai modifier mon etat sa fonctionne merci pour ton aide

    un détaille quand le résultat est égal à 0, il m'affiche erreur dans mon champ.
    cordialement

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    bonjour,

    J'ai modifier comme cela et sa a l'air de fonctionner.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If IsNull(TotalCerf) Then
               TotalCerf2 = "0"
               CalculerTotalCerf = TotalCerf2
                  Else
                        CalculerTotalCerf = TotalCerf
    End If

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 351
    Points : 23 816
    Points
    23 816
    Par défaut
    On peut faire un peu plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If IsNull(TotalCerf) Then
         CalculerTotalCerf = 0
       Else
         CalculerTotalCerf = TotalCerf
    End If
    De plus si tu sais que c'est un nombre inutile de passer par une chaîne de caractère. Access va faire la conversion pour toi mais cela rajoute de la complexité pour rien.

    A+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    bjr,

    ok et merci

    tient j'ai essayé un code pour ne pas avoir à changer mes dates chaque année.
    tu peux me dire ce que tu en pense stp.
    J'ai essayé de mettre le format date comme tu me l'avais dit mais sa passe pas.

    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
    Private Function CalculerTotalCerf() As Long
     
        Dim DateRef As Date
        Dim DateControle As Date
        Dim DateDebutSaison As Date
        Dim DateFinSaison As Date
        Dim DateDebutSaisonPrecedente As Date
        Dim DateFinSaisonPrecedente As Date
        Dim DateRef2 As Date
        Dim DateJour As Date
        Dim TotalGibier As Long
        Dim TotalCerf2 As Long
     
        DateJour = Now
        DateRef = DateSerial(Year(Now), Month(12), 1) 'determiner la date 1 janvier
        DateControle = Format(DateSerial(Year(DateRef), Month(DateRef) + 5, -1)) 'Determiner la date du Bascule d'une année sur l'autre (1 juin de chaque année)
    ' Determiner les dates de debut et fin saison précedente
        DateDebutSaisonPrecedente = Format(DateSerial(Year(DateRef), Month(DateRef) - 7, 1)) '1 juin année précedente
        DateFinSaisonPrecedente = Format(DateSerial(Year(DateRef), Month(DateRef) + 5, -1)) '30mai  de l'année en cour
    ' Determiner les dates de debut et fin saison en cours
        DateDebutSaison = Format(DateSerial(Year(DateRef), Month(DateRef) + 5, 1)) 'Determiner la date du 1 juin de l'année en cour
        DateFinSaison = Format(DateSerial(Year(DateRef), Month(DateRef) + 17, -1)) 'determiner la date du 30 mai de l'année suivante
     
    If DateJour <= DateControle Then
        TotalCerf = DSum("[Quantité]", "TbeGibierSortant", "[Gibier]='Cerf(s)' AND [DateSaisie]>=#" & Format(DateDebutSaisonPrecedente, "dd-mm-yyyy") & "# AND [DateSaisie]<= #" & Format(DateFinSaisonPrecedente, "dd-mm-yyyy") & "#")  'Utiliser yyyy-mm-dd évite les ambiguité sur la date
    End If
     
    If IsNull(TotalCerf) Or (TotalCerf) = "" Then
        CalculerTotalCerf = = "0"                          ' pour éviter le message d'erreur dans mon champ
     
            Else
                CalculerTotalCerf = TotalCerf
    End If
     
    End Function

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    re bjr,

    j'ai oublier
    a inserer à partir de la ligne 26
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Else
            TotalCerf = DSum("[Quantité]", "TbeGibierSortant", "[Gibier]='Cerf(s)' AND [DateSaisie]>=#" & Format(DateDebutSaison, "dd-mm-yyyy") & "# AND [DateSaisie]<= #" & Format(DateFinSaison, "

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 351
    Points : 23 816
    Points
    23 816
    Par défaut
    Pour le format c'est "yyyy-mm-dd" que je recommande.

    A+

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    re bjr,

    oui je sais j'ai essayé mais sa ne passe pas !!
    et pour le reste sa tient la route ou pas
    cdlt

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    bjr,
    je viens encore d'essayer mon champ affiche erreur
    cdlt

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    bjr,
    toute mes excuses, j'avais fait une erreur
    "yyyy-mm-aa" au lieu de "yyyy-mm-dd""
    cdlt

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 351
    Points : 23 816
    Points
    23 816
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If IsNull(TotalCerf) Then
        CalculerTotalCerf = 0                          ' pour éviter le message d'erreur dans mon champ
     
            Else
                CalculerTotalCerf = TotalCerf
    End If
    Le TotalCerf="" ne devrait servir à rien, DSum() retourne soit un nombre, soit Null.

    A+

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 351
    Points : 23 816
    Points
    23 816
    Par défaut
    Ajoute aussi en tout début de ton code, à l'extérieur de tes procédures.

    Tu peux en faire le défaut en activant l'option déclaration des varaibles obligatoire dans le menu Outil/Options de l'éditeur de code.

    Cela oblige à déclarer les variables dans ton cas cela va te forcer à mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim TotalCerf as variant
    dans ta procédure.

    La déclaration explicite des variables aide vraiment à avoir du code de bonne qualité. Quand j'ai débuté en informatique j'ai passé une semaine à chercher un bug dans un des mes programmes et finalement c'est mon prof qui l'a trouvé. Dans un cas j'avais utilisé une variable PI et ailleurs une variable P1.

    De plus avec une déclaration explicite le compilateur peut vérifier, dans certaines circonstances, que l'opération que tu veux faire sur une variable est valide ou pas.

    A+

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    re bjr,

    ok je corrige.

    cdlt

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Compter dans un état
    bjr,

    merci c fait,
    le découvre le vba je rame pas mal
    merci pour ton aide
    cdlt
    ++

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

Discussions similaires

  1. Compter dans un état
    Par theolivier dans le forum Access
    Réponses: 1
    Dernier message: 24/03/2014, 17h43
  2. Compter dans un état
    Par Domi70 dans le forum IHM
    Réponses: 4
    Dernier message: 23/01/2009, 08h06
  3. Réponses: 16
    Dernier message: 25/03/2007, 09h56
  4. Dans un état compter si..
    Par paspayer dans le forum IHM
    Réponses: 4
    Dernier message: 10/01/2007, 11h52
  5. Réponses: 17
    Dernier message: 06/09/2006, 15h23

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