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

lulu -  
ccm81 Messages postés 11033 Statut Membre -
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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. lulu74500 Messages postés 6 Statut Membre
       
      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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. lulu74500 Messages postés 6 Statut Membre
       
      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
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. lulu74500 Messages postés 6 Statut Membre
       
      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
    2. lulu74500 Messages postés 6 Statut Membre
       
      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
    3. lulu74500 Messages postés 6 Statut Membre
       
      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
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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