Message d'erreur dans Excel VBA [Résolu]

Maxou le petit 47 Messages postés jeudi 16 juin 2005Date d'inscription 21 mai 2007 Dernière intervention - 15 juil. 2006 à 08:46 - Dernière réponse : Maxou le petit 47 Messages postés jeudi 16 juin 2005Date d'inscription 21 mai 2007 Dernière intervention
- 18 juil. 2006 à 05:56
Bonjour;

Petit Pb tout bête dans macro ci-dessous, aprés exécution il me renvoie un message d'erreur n°6 "Dépassement de capacité" sur la ligne "Prix = Montant / Quantite"
. Je dois avoir un PB avec mes variables !

Encore un fois ça doit être un truc bête qui m'échappe !

Sub Calcule_Prix()
DerLigne = Range("E1").End(xlDown).Row
Dim Prix, Montant, Quantite As Double
For i = 2 To DerLigne
    Montant = Cells(i, 3).Value
    Quantite = Cells(i, 2).Value
    Prix = Montant / Quantite    Cells(i, 4).Value Prix: NumberFormat "#,##0.00"
Next i
End Sub

D'avance Merci

Maxou
Afficher la suite 

Votre réponse

12 réponses

Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 15 juil. 2006 à 13:01
+3
Utile
Donc, au final le code suivant devrait fonctionner :

Sub Calcule_Prix()
DerLigne = Range("E1").End(xlDown).Row
Dim Prix As Double, Montant As Double, Quantite As Double
For i = 2 To DerLigne
Montant = Cells(i, 3).Value
Quantite = Cells(i, 2).Value
If Montant > 0 And Quantite > 0 Then
Prix = Montant / Quantite
Cells(i, 4).NumberFormat = "#,##0.00"
Cells(i, 4).Value = Prix
End If
Next i
End Sub
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Dolphin Boy
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 17 juil. 2006 à 18:45
+3
Utile
Euh... rajouter : Dim DerLigne As Long

Us.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de us_30
cs_Stephane33 630 Messages postés samedi 15 février 2003Date d'inscription 9 octobre 2011 Dernière intervention - 15 juil. 2006 à 09:27
0
Utile
Vérifie que Montant et Quantité sont différents de 0

Juste faites-le
Commenter la réponse de cs_Stephane33
Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 15 juil. 2006 à 12:23
0
Utile
OK avec Stephane33 et j'ajouterai qu'en VBA, la syntaxe de déclaration :

Dim Prix, Montant, Quantite As Double

veut dire que Prix et Montant sont considérés comme Variant et non comme Double, ce qui peut entraîner certaines erreurs.
Cette syntaxe est comprise en .NET mais pas dans les précédentes versions de VB. Donc, il vaut mieux déclarer comme ça :

Dim Prix As Double, Montant As Double, Quantite As Double

ou

Dim Prix As Double
Dim Montant As Double
Dim Quantite As Double
Commenter la réponse de Dolphin Boy
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 15 juil. 2006 à 12:32
0
Utile
Salut,

J'ai pas regardé en détail, mais la ligne :
    Cells(i, 4).Value Prix: NumberFormat "#,##0.00"

me parait étrange... NumberFormat s'applique à quoi ?

actuellement à rien ! c'est peut-être cela le problème...

Amicalement,
Us.
Commenter la réponse de us_30
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 15 juil. 2006 à 18:23
0
Utile
Salut,

Dolphin Boy, tu dis "Dim Prix, Montant, Quantite As Double"
Il n'y a que Quantite qui est 'Double', le reste est en 'Variant', voici la bonne syntaxe :
Dim Prix As Double, Montant As Double, Quantite As Double

@++

Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
Commenter la réponse de mortalino
Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 15 juil. 2006 à 19:36
0
Utile
Heu, Mortalino, je crois que tu confusionnes. Relis mes 2 posts ;-)
Commenter la réponse de Dolphin Boy
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 15 juil. 2006 à 19:50
0
Utile
Je me cache où ?
Bon allez, je sors...

Désolé, Dolphin, je t'offre toutes mes excuses.
(ça fait 3 jours, je dis n'importe quoi ! J'ai besoin de repos)

Je vais aller lire le règlement, ça me fera du bien ! ;-|
Commenter la réponse de mortalino
Maxou le petit 47 Messages postés jeudi 16 juin 2005Date d'inscription 21 mai 2007 Dernière intervention - 16 juil. 2006 à 08:01
0
Utile
Merci Dolphin Boy;

La correction que tu m'as proposée marche au poil ! Je ne suis pas encore trés à l'aise avec les variables et leur déclaration.

Bonne journée à toi.

A+
Commenter la réponse de Maxou le petit
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 17 juil. 2006 à 18:43
0
Utile
Mouais... et les autres ? ... sniff....


Si je peux tout de même donner encore un conseil, l'utilisation de :


"DerLigne = Range("E1").End(xlDown).Row" est porteuse d'un certain" risque"... dans le sens où si l'utilisateur supprime une ligne, il y aura un blanc, donc la dernière ligne s'arrêtera à ce blanc, et non à la fin... c'est donc à controler avant.

L'inverse est peut-être préférable, selon le cas. Ainsi partir de la dernière ligne de la feuille et remonter te donnera probablement la dernière ligne que tu recherches... Avec la déclaration de la variable, on a :
DerLigne = Range("E65536").End(xlUp).Row

Mais, le mieux serait d'utiliser UserRange (ou quelque chose qui ressemble à ça, j'ai un peu oublié le mot clé excat )

Amicalement,
Us.


 


 
Commenter la réponse de us_30
Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 17 juil. 2006 à 18:57
0
Utile
N'étant pas féru de VBA, j'ai laissé passer ça. Effectivement us_30 à raison et mérite d'avoir ses réponses acceptées.
Commenter la réponse de Dolphin Boy
Maxou le petit 47 Messages postés jeudi 16 juin 2005Date d'inscription 21 mai 2007 Dernière intervention - 18 juil. 2006 à 05:56
0
Utile
Merci US;

Te te remercie également pour tes propositions.

J'ai modifié la déclaration des variables comme tu l'as proposé.
En ce qui concerne la ligne "DerLigne = Range("E1").End(xlDown).Row" elle ne pose pas de PB pour cette macro. Par contre pour les autres fois j'en tiendrai compte.

Bonne journée à toi.

Maxou
Commenter la réponse de Maxou le petit

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.