Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2011, 11h30   #1
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
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
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h38   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 12h26   #3
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
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 :
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...
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 13h22   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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 ?
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 14h25   #5
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
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à

Citation:
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

Citation:
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.
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 14h36   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 15h15   #7
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
Traduction de cette ligne de code qui charge vCaLi, ici dans le cas d'un article à calculer :
Code :
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 :
1
2
 
                    vPv = vCaLi / ((100 / 100) - (tCalc(1, 3) / 100))  'Calcul du prix de vente HT
puis plante dans le If à la ligne
Code :
               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
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 15h36   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Je pense que ça doit être une histoire de séparateur de décimal. Sur une machine, ce n'est pas reconnu comme un nombre par Val à cause d'une virgule à la place d'un point ou inversement.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 10h13   #9
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
Merci ZebreLoup !!!
C'était bien le symbole décimal qui posait problème.
Je vais voir pour coder ce paramètre au lancmeent et à la sortie de mon appli et vérifier que ce soit la méthode pertinente.
Bonne journée
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h41.


 
 
 
 
Partenaires

Hébergement Web