Calcul avec different type de variable

Bonjour,

Dans un boucle itérative, je souhaite cumuler le resulat d'un calcul avec le résultat précédent enregistrer dans une variable de type "Integer".

Le problème c'est que j'ai besoin de nombre décimaux et quand je change "Interger" par "Double" dans ma déclaration, j'ai une erreur "1004" et le calcul ne se fait plus. Je me demande si metre une formule avec des adresse + un nombre stocké n'est valable que si le nombre stocké n'est un entier("Integer").

Savez vous pourquoi?

Ci dessous, le morceau de code qui ne fonctionne pas:

Dim LevNb As Integer

Dim Last As Range

Dim MaxLev As Integer

Dim NBEL As Integer

Dim NbLig As Integer

Dim Found As Range

Dim dercol As Integer, derlig As Integer

Dim K As Integer

Dim LignVar1 As Integer

Dim LignVar2 As Integer

Dim ColVar1 As Integer

Dim colVar2 As Integer

Dim SProdTemp as Double

.../..

For K = 29 To 39

.../...

LignVar1 = First.Row

ColVar1 = First.Column

LignVar2 = Last.Row

colVar2 = Last.Column

Cells(derlig + 4, colVar2).Formula = "=SUMPRODUCT((" & Cells(LignVar1, ColVar1 - K).Address & "." & Cells(LignVar2, ColVar1 - K).Address & "=" & LevNb & ")*(" & Cells(LignVar1, ColVar1).Address & "." & Cells(LignVar2, colVar2).Address & ")*(" & Cells(LignVar1, ColVar1 - K + 6).Address & "." & Cells(LignVar2, colVar2 - K + 6).Address & ")) * " & Cells(LignVar1 - 1, ColVar1 - K + 6).Address & "+" & SProdTemp

SProdTemp = Cells(derlig + 4, colVar2)

bonjour

ton principe te fait perdre l'historique des saisies. Pas glop

conserve TOUTES les saisies, en lignes successives, comme dans toute bonne gestion de données

et fais un TCD pour visualiser des totaux (simples ou cumulatifs)

VBA est inutile

amitiés

Bonjour,

Est-ce bien ce code qui fonctionne avec integer et plus avec double ?

j'ai un doute, pour moi ce code n'a jamais pu fonctionner.

ta formule est incorrecte : Elle contient des . au lieu de : dans la définition des plages.

donc merci de nous donner les éléments corrects pour t'aider.

bonjour ,

Meric pour os remarques.

Je te confirme que ma formule fonctionne avec "." car il renvoie dans .Formula le " : ".

Ma fonction fait une sommeprod, stocke un résultat intermédiaire (dans SProdTemp) et l'ajoute à la boucle suivante qui fait un nouveau sommeprod sur d'autres valeurs. L'ensemble m'amène à une somme de Sommeprod.

La formule fonctionne j’obtiens par exemple:

=SOMMEPROD((L13C2:L173C2=1)*(L13C32:L173C32)*(L13C8:L173C8)) * L12C8+33

Où "+33" est le résulat du sommeprod précédent (=SProdTemp)

Sauf que cette valeur est toujours un entier alors que le calcul est parfois un nombre décimal. Aisni, le code arrondi à la valeur sans décimal. Mais 'jai des résulta de 0, 7 par exemple, arrondis à 0 qui se cumule à d'autres arrondis à 0.

Ce qui me donne 0 alors qu'ein réalité c'est par exemple 3 ou 4 ou autre.

Je voudrai donc que cette formule

         Cells(derlig + 4, colVar2).Formula = "=SUMPRODUCT((" & Cells(LignVar1, ColVar1 - K).Address & "." & Cells(LignVar2, ColVar1 - K).Address & "=" & LevNb & ")*(" & Cells(LignVar1, ColVar1).Address & "." & Cells(LignVar2, colVar2).Address & ")*(" & Cells(LignVar1, ColVar1 - K + 6).Address & "." & Cells(LignVar2, colVar2 - K + 6).Address & ")) * " & Cells(LignVar1 - 1, ColVar1 - K + 6).Address & "+" & SProdTemp

         SProdTemp = Cells(derlig + 4, colVar2)

aboutisse à un résultat en conservant les valeurs décimales. Le problème (à mon avis) vient du mélange des genres: Entier, Adresse, plage, variable,...

Bonjour,

Je te confirme que ma formule fonctionne avec "." car il renvoie dans .Formula le " : ".

en effet, au temps pour moi.

peux-tu nous mettre ton classeur ?

Bonjour,

Ci joint le fichier épuré.

N’hésitez pas à améliorer le code si besoin!!

Bonjour,

je ne vois pas de problème en remplaçant cette instruction

Dim SProdTemp As Integer

par celle-ci

Dim SProdTemp As Double

re,

J'ai le message:

Erreur d'éxecution '1004'Erreur définie par l'application ou par l'objet'

Bonjour,

ton code suppose que tu aies sélectionné la feuil2 avant de lancer la macro. est-ce bien la cas ?

euh...

où dans le code?

mais si je sélectionne la Feuil2 la problème d’exécution est toujours présent.

Bonjour,

comme tu ne précises pas le nom de la feuille lorsque tu utilises les instructions cells et range, ces instructions s'appliquent à la feuille active, qui si je ne m'abuse est censée être la feuil2.

je ne parviens pas à reproduire ton problème sur ton fichier exemple lorsque la feuil2 est sélectionnée. Sur quelle instruction reçois-tu le message d'erreur ?

re,

la ligne qui sort en erreur est

Cells(derlig + 4, colVar2).Formula = "=SUMPRODUCT((" & Cells(LignVar1, ColVar1 - K).Address & "." & Cells(LignVar2, ColVar1 - K).Address & "=" & LevNb & ")*(" & Cells(LignVar1, ColVar1).Address & "." & Cells(LignVar2, colVar2).Address & ")*(" & Cells(LignVar1, ColVar1 - K + 6).Address & "." & Cells(LignVar2, colVar2 - K + 6).Address & ")) * " & Cells(LignVar1 - 1, ColVar1 - K + 6).Address & "+" & SProdTemp

j'ai joitn une version 2 du fichier avec la variable SProdTemp As Double (au lieu de Integer). Aisni tu devrai voir l'erreur.

Re-bonjour,

pas d'erreur avec ce fichier, si l'on sélectionne la feuil2 avant de lancer la macro.

Re,

Comment tu fais concrètement?

Tu te places dans la feuille (clic sur cellule).

Tu lances depuis où ta macro?

Bonjour,

je sélectionne la feuille, puis je fais alt-f8 pour lancer la macro.

ou autre manière

je sélectionne la feuille, puis je vais dans vbe et lance la macro en la sélectionnant puis F5 pour l'exécuter.

Bah c’est bien ce que je fais ma ça plante comme indiqué ci dessus (1004)

Rechercher des sujets similaires à "calcul different type variable"