Problème avec les formules de base (multiplication, sommes)

Fermé
lulu - 23 avril 2014 à 13:19
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 - 24 avril 2014 à 11:25
Bonjour,

Je suis en train d'écrire un code pour mon projet tutoré et dans ce code j'ai une colonne de prix, une colonne de quantité et je souhaite multiplier les deux pour avoir un total. Tant que les quantités ou les prix sont entier tout fonctionne mais dès qu'il y a des chiffres après la virgule, j'ai droits à un message d'erreurs 13... J'ai pourtant bien définis mes variables en currency pour pouvoir utiliser les chiffres après la virgule mais cela ne fonctionne pas, j'ai également essayer en déclarant mes variables en tant que double mais ça ne marche pas non plus et je ne sais plus quoi faire.
Je ne suis pas experte donc si quelqu'un peut m' éclairer ça serait cool.
Et j'ai un autre souci avec mon programme, dès que je veux additionner toutes les multiplications calculé précédemment, il ne fait pas de somme, mais il ajoute les nombres à la suite (si je veux additionner 1+1+200+1, le total est de 112001 et non de 203).

Merci d'avance

Ludivine


4 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
23 avril 2014 à 13:43
Bonjour,

j'ai droits à un message d'erreurs 13... vous avez un probleme avec le separateur de decimales point ou virgule

le total est de 112001 et non de 203). Il nous faut voir votre programme
0
lulu74500 Messages postés 6 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 28 avril 2014
23 avril 2014 à 14:40
Jai essayer de modifier les virgules en point mais cela ne change rien et le programme pour laddition est dds plus simple:
Total= var1 +var2 +var3 ...
Sachant que toute mes variable sont declarer en tant que currency et que jai essayer single et double.
Merci de votre reponse en tout cas !
0
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
23 avril 2014 à 16:44
Bonjour

Comme dit f894009 que je salue cordialement, il y a un problème de type

Peux tu une partie de ton fichier au format excel 2003 (fichier/enregistrer sous/type ... xls) sur cjoint.com et joindre le lien obtenu à ton prochain message

Cdlmnt
0
lulu74500 Messages postés 6 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 28 avril 2014
23 avril 2014 à 21:03
merci CCM81
voici le lien ou vous trouverez mon code : https://www.cjoint.com/?0Dxu5bBx5Ty
je n'est pas pu envoyer qu'une parti car tous est lié. vu que je ne suis pas une experte il doit y avoir beaucoup de ligne inutiles j'en suis consciente mais j'ai coder avec ce que je savais c'est à dire pas grand chose, mais j'ai fait comme j'ai pu !
mes erreurs viennes des macros : _calcul_estimatif_.... et _calcul_total_...
si vous voulez plus de précision n'hésitez pas j'essaierais d'être plus rapide à répondre

cordialement
lulu
0
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
Modifié par ccm81 le 23/04/2014 à 22:02
Effectivement il y a de grosses maladresses/erreurs dans la programmation

Un exemple

Module Général

Public Sub i_CALCUL_TOTAL_ESPACES_VERTS()
i_COPIE3_ESPACES_VERTS
TOTAL_ESTIMATIF_ESPACES_VERTS = F174 + F175 + F176 + F177 + F178
....

RQ1. Les variables F174, ... sont sensées déclarées comme string (en fait seule F178 l'est, les précédentes sont de type variant car non typées)
RQ2. Or ton addition suppose qu'elle sont de type numérique sinon tu fais une concaténation (mise bout à bout des valeurs)

elle fait un appel à la procedure

Public Sub i_COPIE3_ESPACES_VERTS()
Sheets("Rubrique DQE").Select

'copie des prix estimatif

' - ce que tu as écrit (à supprimer)
'Range("F174").Select
'F174 = ActiveCell.FormulaR1C1
'Range("F175").Select
'F175 = ActiveCell.FormulaR1C1
'Range("F176").Select
'F176 = ActiveCell.FormulaR1C1
'Range("F177").Select
'F177 = ActiveCell.FormulaR1C1
'Range("F178").Select
'F178 = ActiveCell.FormulaR1C1

' ce qu'il faut écrire
F174 = Range("F174").Value
F175 = Range("F175").Value
F176 = Range("F176").Value
F177 = Range("F177").Value

End Sub

RQ3. F174 = ActiveCell.FormulaR1C1
renvoie dans F174 la formule qu'il y a dans Range("F174") donc une chaine et non un nombre
Pour récupérer la valeur de la cellule et non la formule
F174 = Range("F174").Value

RQ4. tu remarqueras que le compilateur ne dit rien sur cette ligne, ce qui montre bien que le type numérique du résultat ne le contrarie pas (F174 est de type variant et non string)

RQ5. Il y aurait énormément d'améliorations/optimisations à faire dans ton code.

Bon courage
0
lulu74500 Messages postés 6 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 28 avril 2014
24 avril 2014 à 08:18
Bonjour
Tout d'abbord merci en tout cas pour l'efficaciter !
Donc si j'ai bien compris les modifications en .value fonctionneraient ?
Et j'ai bien conscience que mon code est un peu maladroit mais avant j'avais aucune notion de code hormis quelque cours que j'avais eu en DUT et cetait sur libre office donc le principe est a peu pres le meme mais la redaction totalement differente donc j'ai fait des recherche sur internet et j'ai reussi a faire cela mais j'ignorais ce genre de subtiliter. Apres cest vrai que j'aurais aimee optimiser encore plus mon programme et je l'avais imaginee autrement mais je n'e ai pas les capacités.

merci encore
Cordialement

lulu
0
lulu74500 Messages postés 6 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 28 avril 2014
24 avril 2014 à 08:18
Bonjour
Tout d'abbord merci en tout cas pour l'efficaciter !
Donc si j'ai bien compris les modifications en .value fonctionneraient ?
Et j'ai bien conscience que mon code est un peu maladroit mais avant j'avais aucune notion de code hormis quelque cours que j'avais eu en DUT et cetait sur libre office donc le principe est a peu pres le meme mais la redaction totalement differente donc j'ai fait des recherche sur internet et j'ai reussi a faire cela mais j'ignorais ce genre de subtiliter. Apres cest vrai que j'aurais aimee optimiser encore plus mon programme et je l'avais imaginee autrement mais je n'e ai pas les capacités.

merci encore
Cordialement

lulu
0
lulu74500 Messages postés 6 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 28 avril 2014
24 avril 2014 à 08:18
Bonjour
Tout d'abbord merci en tout cas pour l'efficaciter !
Donc si j'ai bien compris les modifications en .value fonctionneraient ?
Et j'ai bien conscience que mon code est un peu maladroit mais avant j'avais aucune notion de code hormis quelque cours que j'avais eu en DUT et cetait sur libre office donc le principe est a peu pres le meme mais la redaction totalement differente donc j'ai fait des recherche sur internet et j'ai reussi a faire cela mais j'ignorais ce genre de subtiliter. Apres cest vrai que j'aurais aimee optimiser encore plus mon programme et je l'avais imaginee autrement mais je n'e ai pas les capacités.

merci encore
Cordialement

lulu
0
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
24 avril 2014 à 11:25
1. Donc si j'ai bien compris les modifications en .value fonctionneraient ?
Oui,
Range(cellule).Value renvoie la valeur contenue dans la cellule, et apparemment, c'est ce que tu veux

2. lors de tes déclarations de variables, il te faut indiquer pour chacune d'elle son type
dim a as long, b as long
et non
dim a, b as long
qui n'attribue le type long qu'à la variable b, et a est alors de type Variant

3. Je ne pourrais pas faire grand chose de plus pour toi, mon vieil excel 2003 refuse de sauvegarder ton fichier une fois modifier

Cordialement
0