Mise en place d'un calcul dans un tableau avec VBA

Bonjour,

Je cherche à faire un calcul simple grâce a VBA mais je ne comprends pas pourquoi cela ne marche pas.

Sur une feuille j'ai un tableau de 6 colonnes regroupant des données de plusieurs feuilles(une ligne par feuille à partir de la ligne 3). Dans ce tableau (commençant en A1) j'ai au niveau de la ligne 2 une constante indépendante des autres feuilles.

Le tableau est formé de cette facon :

Colonne A : libellé des lignes

Colonne C : 1er critère

Colonne D : 2ème critère

Colonne E : 3 ème critère

Colonne F : 4ème critère

Colonne I : résultat du calcul

Ligne 1 : intitulé des colonnes

Ligne 2 constantes

Ligne 3 à infini : des entités

(j'ai omis certaines colonnes car elles ne rentre pas dans le calcul.

Je cherche à faire un calcul simple en ligne 2 dont le résultat se trouverai en colonne I pour chaque entité (chaque ligne) le calcul que je cherche à mettre en place est le suivant :

Ii = ((Ci*100)*C2) + ((Di*100)*D2) + (Ei*E2) + (Fi*F2) pour i = 3 à infini (nombre de feuilles)

Voici mon code actuel :

For i = 4 To Sheets.Count

Sheets("Comparatif Sortie").Cells(i - 1, 9) = ((Sheets("Comparatif Sortie").Cells(i - 1, 3)) * 100 * (Sheets("Comparatif Sortie").Cells(2, 3)))

+ ((Sheets("Comparatif Sortie").Cells(i - 1, 4)) * 100 * (Sheets("Comparatif Sortie").Cells(2, 4)))

+ ((Sheets("Comparatif Sortie").Cells(i - 1, 5)) * (Sheets("Comparatif Sortie").Cells(2, 5)))

+ ((Sheets("Comparatif Sortie").Cells(i - 1, 6)) * (Sheets("Comparatif Sortie").Cells(2, 5)))

Next i

(bien sur dans excel le calcul est en une seule ligne)

J'avais réussi à mettre ce code en place avec un chiffre à la pace des constante de la ligne 2, cela marchait mais quand j'ai remplacé ces chiffre par "Sheets("Comparatif Sortie").Cells(2,3)" par exemple le code ne fonctionne plus donc je ne comprends pas pourquoi pouvez-vous m'aider svp ?

Bonjour,

anonymisé au besoin

P.

Bonjour,

Si tu fais une boucle sur tes lignes, Sheets.Count qui renvoie le nombre de feuille, ne semble guère être le paramètre adéquat !

Pourquoi pas le paramètre adéquat ? car il y a autant de ligne dans mon tableau que de feuilles d'où l'utilisation de Sheets.Count.

Dis moi si je me trompe et ce que dois rectifier si c'est le cas stp.

Et Patrick je sais bien que c'est plus simple avec un fichier joint mais je ne peux pas le joindre car il concerne l'entreprise dans laquelle je bosse et il y a déjà trop d'infos dessus. De plus je n'ai pas le droit de télécharger un fichier externe en xlsm donc je ne pourrait pas voir ta solution. Don c'est pour ça que je'ai expliqué au maximum la situation.

JuniorVBAPro a écrit :

Pourquoi pas le paramètre adéquat ? car il y a autant de ligne dans mon tableau que de feuilles d'où l'utilisation de Sheets.Count.

Dis moi si je me trompe et ce que dois rectifier si c'est le cas stp.

Et Patrick je sais bien que c'est plus simple avec un fichier joint mais je ne peux pas le joindre car il concerne l'entreprise dans laquelle je bosse et il y a déjà trop d'infos dessus. De plus je n'ai pas le droit de télécharger un fichier externe en xlsm donc je ne pourrait pas voir ta solution. Don c'est pour ça que je'ai expliqué au maximum la situation.

Faudrait peut être lire toutes les réponses...

Bah j'ai lu les deux seules réponses présentes avant d'écrire ce message je ne comprends pas ce que tu as voulu dire...

Et je ne peux pas l'anonymiser car il y a desja beaucoup d'infos dessus et j'imagine que tu vas écrire une correction directe sur le fichier et le remettre en pièce jointe mais je ne pourrait pas le télécharger je n'ai pas le droit, question de sécurité informatique

JuniorVBAPro a écrit :

Bah j'ai lu les deux seules réponses présentes avant d'écrire ce message je ne comprends pas ce que tu as voulu dire...

Faut alors changer de lunettes...

Un fichier , tu vois ?

Pourquoi pas le paramètre adéquat ? car il y a autant de ligne dans mon tableau que de feuilles d'où l'utilisation de Sheets.Count.

Dis moi si je me trompe et ce que dois rectifier si c'est le cas stp.

Et Patrick je sais bien que c'est plus simple avec un fichier joint mais je ne peux pas le joindre car il concerne l'entreprise dans laquelle je bosse et il y a déjà trop d'infos dessus. De plus je n'ai pas le droit de télécharger un fichier externe en xlsm donc je ne pourrait pas voir ta solution. Donc c'est pour ça que j'ai expliqué au maximum la situation.


patrick1957 a écrit :
JuniorVBAPro a écrit :

Bah j'ai lu les deux seules réponses présentes avant d'écrire ce message je ne comprends pas ce que tu as voulu dire...

Faut alors changer de lunettes...

Un fichier , tu vois ?

Patrick je sais bien que c'est plus simple avec un fichier joint mais je ne peux pas le joindre car il concerne l'entreprise dans laquelle je bosse et il y a déjà trop d'infos dessus. De plus je n'ai pas le droit de télécharger un fichier externe en xlsm donc je ne pourrait pas voir ta solution. Donc c'est pour ça que j'ai expliqué au maximum la situation.

MFerrand a écrit :

Bonjour,

Si tu fais une boucle sur tes lignes, Sheets.Count qui renvoie le nombre de feuille, ne semble guère être le paramètre adéquat !

Que devrais-je utiliser comme paramètre alors ?

J'ai utilisé Sheets.Count car il y a autant de lignes que de feuilles dans mon tableau. Comme je l'ai dit lorsque j'avait mis des chiffres exact dans ma formule elle fonctionnait donc est-ce vraiment ce paramètre le problème ?


Je suis vraiment bloqué et j'ai absolument besoin de réussir ce calcul.

HELP svp

Mets au moins le code en entier, sans omettre les déclarations de procédures, et sous balises Code, qu'on le voit tel qu'il est.

Et pourquoi ces multiplication par 100... ! ?

Pourquoi des i-1 d'un côté et pas de l'autre ?

Et qu'est-ce qui ne fonctionne plus ? Erreur ? Quelle erreur ?

Je ne sais pas comment mettre le code sous balise code maleureusement j'ai cherché, c'est la première fois que je post sur un forum :s

Multiple de 100 car les valeurs des cellules ne sont pas à la même échelle donc c'est juste pour que toutes les valeurs soient à la même échelle.

Des i-1 d'un coté et pas de l'autre car il y 4 constante dans le calcul qui sont stocké dans les cellles sans i.

C'est une erreur de type si je ne me trompe pas.

Si tu prends la peine de regarder les boutons de la fenêtre de rédaction de message, le bouton Code finira bien par te crever les yeux !

Il génère une paire de balises (début et fin) entre lesquelles placer le code, de façon qu'il soit plus lisible, et conserve l'indentation.

Je posais la question sur i-1, car pourquoi démarrer la boucle sur la ligne 4 pour servir la ligne 3 (i-1) , plutôt que de la démarrer sur 3 et servir la ligne i !

Je ne sais de quelle erreur il s'agit, tu ne l'as pas précisée ! Cela peut être, parmi d'autres possibilités mais sans informations suffisantes on ne pourra le définir...

    With Sheets("Comparatif Sortie")
        For i = 4 To Sheets.Count + 3
            .Cells(i - 1, 9) = 0
            For j = 3 To 4
                .Cells(i - 1, 9) = .Cells(i - 1, 9) + .Cells(i - 1, j) * .Cells(2, j) * 100 _
                 + .Cells(i - 1, j + 2) * .Cells(i - 1, j + 2)
            Next j
        Next i
    End With

Ton bout de code réécrit d'une façon un peu plus conviviale et un peu moins laborieuse.

Et relis le chapitre sur la priorité des opérateurs, cela t'évitera nombre de parenthèses inutiles...

Cordialement.

Rechercher des sujets similaires à "mise place calcul tableau vba"