Probleme de définition de formule en vba

Résolu/Fermé
ED75 - 30 juin 2011 à 10:42
 ED75 - 30 juin 2011 à 11:03
Bonjour à tous,

Je cherche à automatiser un calcul en vba. J'ai néanmoiuns un petit problème, voici le code commenté :



Sub comptage()
Sheets("Test").Select 'Selection de la feuille
Dim i, j As Integer
i = Sheets("Test").Range("A3").End(xlDown).Row - 2 'Compte le nombre de ligne non vide entre la ligne 2 et la première cese vide
j = i + 3
Range("E" & j).Select 'selection d'une cellule
ActiveCell.FormulaR1C1 = "=SUM(R[-i]C[-3]:R[-1]C[-3])" 'Application d'une formule : l'erreur semble etre le i qu'il ne comprend pas...
End Sub



Comme je le dit en commentaire, vba n'aime pas le i dans "=SUM(R[-i]C[-3]:, en revanche lorsque je mets un 6 (à la place du i) par exemple, ca marche très bien...

Je suis totalement débutant en vba et j'éspère que quelqu'un pourra m'aider.

Merci d'avance.
A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 30/06/2011 à 10:59
Bonjour,
i étant une variable, il faut la "sortir" des guillemets. Comme ceci :
ActiveCell.FormulaR1C1 = "=SUM(R[" & -i & "]C[-3]:R[-1]C[-3])"

Juste au passage, et comme tu débutes autant prendre de bonnes habitudes, une variable doit être facilement compréhensible. Tu dois, juste à la lire, savoir à quoi elle correspond. Pour cela, il convient d'utiliser des variables d'au moins 3 caractères.
Un exemple :
Dim Lign As Integer, Col As Integer
est bien mieux que :
Dim i As Integer, j As Integer

Dans ton cas, j'utiliserais :
Dim NbLign As Integer, Lign As Integer 
NbLign = Sheets("Test").Range("A3").End(xlDown).Row - 2 
Lign = NbLign + 3 
'au lieu de Range, je préfères Cell, mais c'est juste moi... 
Cells(Lign, 5).FormulaR1C1 = "=SUM(R[" & -NbLign & "]C[-3]:R[-1]C[-3])"

Bon je précise que je n'ai rien testé, c'est juste pour t'orienter...

EDIT : j'ai cru lire quelque part qu'il faut affecter un type systématiquement à chaque variable. La déclaration : Dim Lign, NbLign As Integer fait que Lign est déclaré comme variant et NbLign comme integer. Préférer : Dim Lign As Integer, NbLign As Integer
Si un pro pouvait confirmer...
Cordialement,
Franck P
1
Merci beaucoup pour ta réponse aussi rapide
0