Définir une cellule en fonction d'un compteur

Bonjour à tous !

Alors je suis totalement débutant en ce qui concerne le VBA et ne possède que les grosses bases et quelques connaissances perso sur la syntaxe et ce genre de chose glanées lors de mon année de DUT informatique.

Aujourd'hui en chimie je me retrouve à devoir faire un programme VBA pour une évaluation.

En soit l'objectif est assez simple : on a un tableau avec des notes et des coefficients et on doit calculer les moyennes de chaque étudiant, optimiser la mise en page etc etc.

Pour calculer les moyennes pondérées je suis parti de cette manière :

Worksheets("Tab Final").Range("N4").Value = "=(D4*E4+F4*G4+H4*I4+J4*K4+L4*M4)/(E4+G4+I4+K4+M4)"

Worksheets("Tab Final").Range("N4:N13").FillDown

For i = 4 To 13 Step 1

X = Worksheets("Tab Final").Range("N" & i).Value

Worksheets("Tab Final").Range("N" & i).Value = Round(X, 2)

Next i

J'ai deux problèmes :

  • Déjà je trouve que ça fait très lourd la façon dont j'ai écrit le calcul à faire. Etant donné qu'ici la fonction SommeProd n'est pas utilisable car les données ne sont pas rangées sous forme de matrice (elles sont rangées en colonne avec par exemple en colonne B la matière 1, la colonne C le coeff de matière 1, la colonne D matière 2, etc..). Connaîtriez vous un moyen d'améliorer ça ?
  • Ensuite je pense que la ligne .FillDown est inutile et qu'il faudrait passez la première ligne du code dans la boucle. Mais comment faire comprendre à excel que lorsqu'il arrive à la Colonne N5 il doit prendre les colonnes D5,E5, etc.. et non D4,E4,.. ?

J'ai conscience que ça fait beaucoup de question pour une première apparition et en soit le code que j'ai écrit fonctionne très bien mais je trouve qu'il n'est pas opti du tous.

En vous remerciant d'avance pour vos réponse !

Lucas.

Bonjour,

Quelques remarques :

  • Il serait judicieux de déclarer les variables i et X en début de code, et peut-être leur donner un nom plus explicite
  • Vous écrivez une formule, pas une valeur dans la cellule. Attention à la propriété utilisée !
  • Plutôt que de répéter plusieurs fois le nom de feuille (Worksheets("Tab Final")), utilisez une structure With Truc...End With
  • Step 1 est inutile dans la boucle, car 1 est la valeur par défaut et donc implicite si elle n'est pas précisée
  • Pas besoin de passer par une variable intermédiaire (X) pour l'arrondi, qui peut d'ailleurs être directement inclut dans la 1ère formule
  • Si seul le résultat du calcul présente un intérêt, inutile d'écrire une formule Excel dans la cellule, autant l'évaluer directement sous VBA
  • Un exemple de référence à une adresse de cellule variable :
For Lig = 1 To 100
   Range("A" & Lig) = Application.Sum(Range("B" & Lig & ":Z" & Lig))
Next Lig

Merci pour votre réponse,

Pour réponde à vos remarques :

  • Les variables sont bien déclarés en début de code, c'est juste qu'avant ce que je viens d'envoyer il y a déjà un bout de code pour le quel je n'ai pas de problème qui répond au première question de l'éval.
  • Donc il faut que j'utilise Formula plutôt que Value.
  • Je n'ai jamais appris à utiliser la fonction With. j'utilise plusieurs fois le nom de feuille (Workseets("Tab Final")) car mon classeur utilise deux feuilles : une d'où sont issus les données et l'autre celle qui résultera de la macro. C'était pour être sur que VBA prenne bien en compte la bonne feuille, mais s'il y a un moyen de condenser ça je suis preneur.
  • Lorsque j'essayais d'intégrer l'arrondi à la première formule sans la variable (X) excel me renvoyait 0. Il y a une syntaxe particulière à adopter lorsqu'on veut l'intégrer à une formule ?

-Donc il faut que j'utilise Formula plutôt que Value.

-Lorsque j'essayais d'intégrer l'arrondi à la première formule sans la variable (X) excel me renvoyait 0. Il y a une syntaxe particulière à adopter lorsqu'on veut l'intégrer à une formule ?

Je vous invite à aborder le problème un peu différemment : utiliser l'enregistreur de macro pour voir le code produit par Excel lorsque vous saisissez votre formule incluse dans une fonction ARRONDI.

Il existe différentes propriétés formula, qui impliquent chacune leur syntaxe.

Aussi, le code que j'ai mis en exemple dans mon premier post intègre une fonction SOMME évaluée directement sous VBA.

Rechercher des sujets similaires à "definir fonction compteur"