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

VB 6 et antérieur Discussion :

Dépassement de capacité?


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut Dépassement de capacité?
    Voici la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Function CalculAncienneté(ByVal d As Date)
        Dim NbrA As String, NbrM As String, NbrJ As String
        Dim TotalJours As Integer
     
        TotalJours = Date - d
        NbrA = TotalJours \ 365
        TotalJours = TotalJours Mod 365
        NbrM = TotalJours \ 30
        NbrJ = TotalJours Mod 30
        CalculAncienneté = NbrA & " ans, " & NbrM & " mois et " & NbrJ & " jours"
    End Function
    Le but de cette fonction est d'afficher l'ancienneté d'un client à partir de sa date d'entrée.
    Pourtant quand j'exécute ma fonction, j'obitens une erreur me disant qu'il y a "un dépassement de capacité" et me surligne "TotalJours = Date-d"...
    J'ai beau chercher je vois (une fois de plus j'avoue) où est l'erreur, ma fonction me semble bonne pourtant.
    Alors pourquoi? Si vous avec une idée ou qu'il vous faut des précisions.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    Citation Envoyé par Ryuuku

  3. #3
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Tu peux aussi utiliser datediff

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NbMois = DateDiff("m",DteNaissance,Date)
    NbAns = NbMois \12
    NbMois = NbMois-NbAns
    Note : j'ai remarqué des problemes avec DateDiff quand on demande une difference en années : DateDiff("y",DteNaissance,Date)

  4. #4
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Citation Envoyé par Vld44
    Ben quoi????

    Pourtant mon code devrais fonctionner, non?
    C'est quoi cette erreur

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Par défaut
    -> Tu essaies d'affecter une variable de type Date à une variable de type Integer

  6. #6
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    L'appel à ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1 = CalculAncienneté(CDate("13/04/1956"))
    Pour moi, ta fonction donne le bon resultat.
    Peux tu nous donner un exemple de l'appel a cette fonction qui te genère une erreur.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    attend, corrige d'abord les fautes de typage ...


    NbrM = TotalJours \ 30

    String := double ?

    cf ma signature xD

  8. #8
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Citation Envoyé par Vld44
    attend, corrige d'abord les fautes de typage ...


    J'allais y venir,

    Dim NbrA As String, NbrM As String, NbrJ As String
    Dim TotalJours As Integer
    Label1 = CalculAncienneté(13 / 4 / 1956) 'erreur
    alors que

    Dim NbrA As Integer, NbrM As Integer, NbrJ As Integer
    Dim TotalJours As Long
    Label1 = CalculAncienneté(13 / 4 / 1956) pas d'erreur
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Ah un long pourquoi pas, je n'y avait pas pensé.
    Je vais essayer ça de suite (oui pardon le retard de réponse, faut bien que je mange *burp* oups pardon )

    Après essai :
    Et bien non ça déconne toujours

    j'utilise ma fonction pour afficher dans un formulaire le nombre de jours d'ancienneté.

    j'ai donc en gros :
    Ancienneté.Text = Ancienneté(Client.date1)

    Allez pour préciser complètement, voilà ce que j'ai :
    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
     
    Option Explicit
     
    Private Type Client
        nom As String * 15
        prénom As String * 15
        adresse As String * 30
        tél As String * 14
        date1 As Date
    End Type
     
    Dim IndiceClient As Integer
     
    Private Function CalculAncienneté(ByVal d As Date)
        Dim NbrA As Integer, NbrM As Integer, NbrJ As Integer
        Dim TotalJours As Long
     
        TotalJours = Date - d
        NbrA = TotalJours \ 365
        TotalJours = TotalJours Mod 365
        NbrM = TotalJours \ 30
        NbrJ = TotalJours Mod 30
        CalculAncienneté = NbrA & " ans, " & NbrM & " mois et " & NbrJ & " jours"
    End Function
     
    Private Sub Afficher()
        Dim Cl As Client
        Dim Num As Integer
        Dim NbrEléments As Integer
     
        Num = FreeFile
        Open "Fichier des clients" For Random As #Num Len = Len(Cl)
        If LOF(Num) > 0 Then
            Get #Num, IndiceClient, Cl
            Seek #Num, Seek(Num) - 1
            nom.Text = Cl.nom
            prénom.Text = Cl.prénom
            adresse.Text = Cl.adresse
            tél.Text = Cl.tél
            date1.Text = Cl.date1
            ancienneté.Text = CalculAncienneté(Cl.date1)
        End If
        NbrEléments = LOF(Num) / Len(Cl)
        Close #Num
        ActivationBoutons (NbrEléments)
    End Sub
    Les dates sont écrit sous cette forme : 01/12/1998 (par exemple)

    Je précise que j'ai apporté les corrections de types de variables, mais rien n'y fait l'erreur reste la même au même endroit :s

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    et en utilisant datediff comme le suggère Delbeke ?

  11. #11
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Citation Envoyé par Vld44
    et en utilisant datediff comme le suggère Delbeke ?
    C'est à dire? Ecrire comme ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Function CalculAncienneté(ByVal d As Date)
        Dim NbrA As String, NbrM As String, NbrJ As String
     
    NbrM = DateDiff("m",d,Date)
    NbrA = NbrM \12
    NbrM = NbrM-NbrA
    NbrJ = NbrM * 30
     
        CalculAncienneté = NbrA & " ans, " & NbrM & " mois et " & NbrJ & " jours"
    End Function
    C'est ça? J'avoue avoir du mal à comprendre datediff

    Heu bah non, et mon nombre de jour le calcul comment? S'il y a des jours qui restent?

    Désolé, mais ma fonction me semble pourtant correct (voir meilleur en changeant les typages, ça rend plus logique il est vrai). Alors qu'est ce que c'est que cette erreure qui (à mon avis de newb^^) n'a rien à foutre là

    D'autant que pour ProgElecT, ça semble fonctionner

  12. #12
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    J'ai fait un copier/coller de ta fonction plus sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub AfficherBis()
        Dim Cl As Client
        Cl.date1 = "01/12/1998"
        ancienneté.Text = CalculAncienneté(Cl.date1)
    End Sub
    essais avec ce Sub AfficherBis pour voire
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  13. #13
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Citation Envoyé par ProgElecT
    J'ai fait un copier/coller de ta fonction plud sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub AfficherBis()
        Dim Cl As Client
        Cl.date1 = "01/12/1998"
        ancienneté.Text = CalculAncienneté(Cl.date1)
    End Sub
    essais avec ce Sub AfficherBis pour voire
    Ca reviens au même non?
    Le soucis c'est que dans mon exo je dois saisir la date via le formulaire et ce que tu me propose reviens exactement au même Ceci dit je vais essayer quand même en saisissant la date directement par programmation, mais ça m'avancera pas dans mon problème...

    Je pige pas du tout pourquoi VB me fait une crise par que je cherche à calculer le nombre de jours en deux date (bref en faisant une différence). Ca doit forcément marcher non?

    [Edit]
    En saisissant par programmation la date, ça fonctionne... J'y pige plus du tout rien...

    J'ai essayé un truc du genre :
    CalculAncienneté("01/12/1998") et le calcul se fait nikel.
    Alors pourquoi ça déconne quand je saisi à l'identique la date via mon formulaire "graphique"

  14. #14
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    si Private Sub AfficherBis() fonctionne, c'est que la recuperation de la date du fichier est pas retournée dans le bon type, voilà pourquoi je te demande de faire l'essais, chez sa fonctionne, si pas chez toi, là .............??
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  15. #15
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    met un espion sur Cl.date1 ligne ->
    Seek #Num, Seek(Num) - 1
    nom.Text = Cl.nom
    prénom.Text = Cl.prénom
    adresse.Text = Cl.adresse
    tél.Text = Cl.tél
    date1.Text = Cl.date1 'un point darret ICI
    Avec l'espion, il t'indiquera le type de recuperation, sa peut être interressant
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  16. #16
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Citation Envoyé par ProgElecT
    si Private Sub AfficherBis() fonctionne, c'est que la recuperation de la date du fichier est pas retournée dans le bon type, voilà pourquoi je te demande de faire l'essais, chez sa fonctionne, si pas chez toi, là .............??
    Je vais pété un plomb J'y comprend plus rien, c'est pourtant censé marché, j'y comprend plus rien
    Alors c'est quoi qui déconne? l'enregistrement dans le fichier? Le fait d'aller chercher la date dans le fichier qui déconne

    [Edit] BOn j'ai recommencé à 0, j'ai tout réécrit (mon fichier client et ma fonction) de A à Z et aller comprendre... Ca marche maintenant, j'ai pourtant réécrit à l'identique

  17. #17
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    ton pc / le calendrier du formulaire est programmé français ?

    Ca peut être con, mais si ta date est retournée en version de je ne sais où il va pas apprécier (genre il comprends "25° mois de l'anneé" au lieu de 25° jour du mois ...)

  18. #18
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Citation Envoyé par Vld44
    ton pc / le calendrier du formulaire est programmé français ?

    Ca peut être con, mais si ta date est retournée en version de je ne sais où il va pas apprécier (genre il comprends "25° mois de l'anneé" au lieu de 25° jour du mois ...)
    Le genre de connerie que j'ai dû réparer en réécrivant le fichier... Y a vraiment des jours où la programmation et moi (déjà que je suis pas bon à grand chose) ça passe pas.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 17/10/2014, 16h08
  2. Transaction, Dépassement de capacité
    Par SkYsO dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 23/12/2008, 14h56
  3. Dépassement de capacité
    Par jean-pierre96 dans le forum Access
    Réponses: 2
    Dernier message: 10/05/2006, 16h04
  4. Réponses: 8
    Dernier message: 06/02/2006, 14h34
  5. détection de dépassement de capacité
    Par tut dans le forum C++
    Réponses: 10
    Dernier message: 01/12/2004, 22h11

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