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 :

Dépassement de limite [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité actif passionné
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité actif passionné

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Par défaut Dépassement de limite
    Bonjour,

    Ce sujet abondamment traité sur le net se résout à ma connaissance
    par la solution de déclarer en long au lieu d'integer, single ou double, ce qui semble satisfaire beaucoup de monde.

    Mais comment expliquer que mon appli génère ce message sur une machine qui tourne sous le même XP et le même excel (pack office pro 2010) que les 3 autres sur lesquelles je n'ai aucun problème ?

    Petite précision :
    Mon appli est installée sur chacune des machines et toutes ont la même version
    Les tables de données utilisées sont uniques et stockées sur un serveur

    Modifier mon code résoudrait apparemment le problème mais pas l'incohérence et j'aime bien comprendre mes erreurs si erreur il y a.
    N'y aurait-il pas plutôt une option d'excel concernant les calculs à modifier sur la machine en cause qui m'aurait échappé ?
    Merci

    Cordialement

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Merci d'avoir créé un sujet spécifique pour ton problème.

    Par contre, je pense qu'il nous manque des informations sur ce que ton application fait.

    Et idéalement, au moment ou se produit le dépassement de capacité, la ligne de code en question et les valeurs des variables concernées.

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité actif passionné
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité actif passionné

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Par défaut Bonjour Zebreloup
    Mon appli est de type gestion co spécifique dédiée à la réalisation de devis d'impression de livres (Gestion titres, clients, articles, devis)
    L'erreur se produit dans la proc de calcul qui est lancé à chaque traitement d'un article du devis.
    Il y a bien sur Explicit et cie en amont
    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
    Private Sub CalculPv()
    
         
    Dim i As Integer
    Dim vCaLi As Single
    Dim vPv As Single
    Dim tCalc(7, 4) As Single
    tCalc(1, 3) = Val(TxtMargeMo.Text)
    tCalc(2, 3) = Val(TxtMargeSousTraitance.Text)
    tCalc(3, 3) = Val(TxtMargeTransport.Text)
    tCalc(4, 3) = Val(TxtMargeLivre.Text)
    'Initialisation des variables
    vCaLi = 0
    vTemp = 0
    vPv = 0
        For i = 1 To 4
            tTva(i, 3) = 0
            tTva(i, 4) = 0
        Next i
        
    '-----Calcul & Imputation des Prix de Revient et de vente HT de l'article dans les familles de CA
        For i = 1 To LvwDétail.ListItems.Count
            vCaLi = Val(LvwDétail.ListItems(i).ListSubItems(1)) * Val(LvwDétail.ListItems(i).ListSubItems(5)) 'Qté * Pr
            vTemp = Val(LvwDétail.ListItems(i).ListSubItems(9)) 'vTemp charge le code TVA
                Select Case LvwDétail.ListItems(i).ListSubItems(8)  'Famille
                    Case "LIBELLÉS"
                        'Pour sortir de select
                    Case "MO"
                        tCalc(1, 2) = tCalc(1, 2) + vCaLi   'prix de revient
                        vPv = vCaLi / ((100 / 100) - (tCalc(1, 3) / 100))  'Calcul du prix de vente HT
                        tCalc(1, 4) = tCalc(1, 4) + vPv ' Montant HT par famille
                        tTva(vTemp, 3) = tTva(vTemp, 3) + (vPv / Val(TxtNbEx.Text) * tTva(vTemp, 2)) ' 'Tva pour 1 ex
                        tTva(vTemp, 4) = tTva(vTemp, 4) + (vPv / Val(TxtNbEx.Text)) ' Montant hors taxe par code Tva
                    .../...    
                End Select
                ' si l'article est de famille libellés on ne le traite pas
                If InStr("LIBELLÉS", LvwDétail.ListItems(i).ListSubItems(8)) = 0 Then
                    'MAJ LvwDétail avec le prix de vente unitaire de l'article
    
    'ligne qui déclenche l'erreur
                    vPv = vPv / Val(LvwDétail.ListItems(i).ListSubItems(1)) 'prix de vente total / Qté
                    LvwDétail.ListItems(i).ListSubItems(6).Text = Format(vPv, "###0.##0") 'Prix de vente HT
                
                    ' chargement des totalisateurs
                        If CmdTva.Caption = "TVA Exonérée" Then tTva(vTemp, 3) = 0
                    
                    tCalc(5, 2) = tCalc(5, 2) + vCaLi   '  total pr HT
                    tCalc(5, 4) = tCalc(5, 4) + vPv     '  total pv HT
                    tCalc(6, 2) = tCalc(6, 2) + Val(LvwDétail.ListItems(i).ListSubItems(1)) * Val(LvwDétail.ListItems(i).ListSubItems(10)) 'Qté * poids
                    tCalc(7, 2) = tCalc(7, 2) + Val(LvwDétail.ListItems(i).ListSubItems(1)) * Val(LvwDétail.ListItems(i).ListSubItems(11)) 'Qté * temps
                    vTemp = 0
                    vCaLi = 0
                    vPv = 0
                End If
        Next i
    Merci de te pencher sur ce qui dépasse mes capacités...

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    J'avoue qu'ici j'ai du mal à voir pourquoi il y aurait un dépassement de capacité avec un Single. Et tu dis que ça marche avec un Double ?

    Quelles sont les valeurs de vPv et de LvwDétail.ListItems(i).ListSubItems(1) au moment où l'erreur se produit ?
    On peut penser à une division par 0, mais je ne vois pas en quoi un double résoudrait le problème, à moins d'un arrondi lors d'une conversion quelconque (le fameux Integer 1 qui devient le Double 1.00000000000001457581...)

    Tu as essayé en faisant un CSng au lieu d'un Val ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité actif passionné
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité actif passionné

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Par défaut
    Citation Envoyé par ZebreLoup Voir le message
    Et tu dis que ça marche avec un Double ?
    Non le code fonctionne sur les autres machines tel que le vois là

    Quelles sont les valeurs de vPv et de LvwDétail.ListItems(i).ListSubItems(1) au moment où l'erreur se produit ?
    On peut penser à une division par 0, mais je ne vois pas en quoi un double résoudrait le problème, à moins d'un arrondi lors d'une conversion quelconque (le fameux Integer 1 qui devient le Double 1.00000000000001457581...)
    Seul vCaLi peut avoir une valeur = 0 et seulement s'il s'agit d'un article de famille libellés, or vPv n'est impacté que si la famille article est différente de Libellés puisque je sors du select avant et ne rentre pas dans la boucle If

    Tu as essayé en faisant un CSng au lieu d'un Val ?
    non

    Si je peux me mettre en télémaintenance je vais tenter autre chose et reviendrais par ici.

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Tu es sûr qu'il n'y aura jamais de quantité nulle dans ta ListView ?

    Pour ma question sur le Double, je te demandais si ça marchait avec un Double sur la machine sur laquelle ça plantait.

    En attendant d'éventuelles précisions, bon courage à toi

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité actif passionné
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité actif passionné

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Par défaut
    Traduction de cette ligne de code qui charge vCaLi, ici dans le cas d'un article à calculer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         vCaLi = Val(LvwDétail.ListItems(i).ListSubItems(1)) * Val(LvwDétail.ListItems(i).ListSubItems(5)) 'Qté * Pr
    vCaLi = une qté * par un prix de revient
    les données sont :
    vCaLi = val("0.04")*val("6.018")
    et vCaLi = 0 !!!

    Donc comme c'est un article à calculer je reste dans le select et vPv prend forcément la valeur 0 à cause vCaLi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                        vPv = vCaLi / ((100 / 100) - (tCalc(1, 3) / 100))  'Calcul du prix de vente HT
    puis plante dans le If à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                   vPv = vPv / Val(LvwDétail.ListItems(i).ListSubItems(1)) 'prix de vente total / Qté
    Je prends l'avion dans une heure et je ne pourrai pas tester le CSng avant mardi mais pour autant que cela fonctionne, ça ne répondrait pas à ma putain de bonne question, pourquoi cette machine et pas les autres !

    Je crois avoir envoyé cette réponse 2 fois désolé...
    Bon WE à tous

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

Discussions similaires

  1. Dépassement limites d'un tableau
    Par Seeverine dans le forum Collection et Stream
    Réponses: 37
    Dernier message: 29/10/2014, 16h05
  2. dépassement limite de tables
    Par Invité dans le forum Développement
    Réponses: 12
    Dernier message: 19/12/2008, 11h58
  3. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 22h09
  4. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31

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