Intégrer une variable "integer" dans une Formula R1C1

thaclemclem Messages postés 10 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 13 mars 2012 - 9 mars 2012 à 11:09
thaclemclem Messages postés 10 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 13 mars 2012 - 13 mars 2012 à 15:43
Bonjour à tous !
Après avoir effectué quelques recherches sur internet, je ne trouve toujours pas bon bonheur et me voici donc sur le forum ! Je pense que mon petit problème est insolvable mais je tente quand même !!

J'ai une liste que je sépare de 3 lignes entre chaque clients. En dessous de chaque "sous-liste", je souhaite calculer une somme. Bien entendu, chaque client ne possède pas le même nombre de ligne. Et pour corser l'affaire, je souhaite que vba calcul cette somme en utilisant le FormulaR1C1 qui permet ensuite de pouvoir "dynamiser" le résultat lorsque l'utilisateur modifie les différents cellules en mode graphique.... Je ne suis pas sur de me faire comprendre..... mais je poursuis quand même avec mon bout de code....

Pour le client 1, ca donnera ça :
ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)"

Pour le client 2, ca donnera ça :
ActiveCell.FormulaR1C1 = "=SUM(R[-12]C:R[-1]C)"

Ce que je souhaite, c'est pouvoir intégrer une variable à la place de -8 et -12 dans le corps de la formule. j'ai bien essayé ceci mais ça ne marche pas :
ActiveCell.FormulaR1C1 = "=SUM(R[-myvar]C:R[-1]C)"
ActiveCell.FormulaR1C1 = "=SUM(R[-"cstr(myvar)"]C:R[-1]C)

Si quelqu'un a une idée... mais je pense que VBA n'est pas fait pour ce genre de manipulation...

Je vous remercie d'avance !!

ThaClemClem

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 mars 2012 à 11:21
Bonjour,
Que ferait donc ceci :
toto = 8
MsgBox "=SUM(R[" & -toto & "]C:R[-1]C)"

?
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
9 mars 2012 à 18:20
Bonjour,

Je n'ai pas la tête à programmer pour l'instant, mais juste quelques idées comme cela :

Si tu choisis la première cellule de la plage qui va accueillir les données d'un client en particulier, tu peux retrouver le numéro de ligne en récupérant l'adresse de la cellule :

place1 = activecell.address
numero = instr(place,":")
laligne = mid(place1,numero + 1,len(place1)-numero-1))


Ensuite tu fais la même chose pour la dernière ligne de données

'on récupère le numéro de la dernière
'ligne utilisée et on lui ajoute 1
'pour laisser une ligne vide
place2 = activecell.address
numero2 = instr(place,":")
laligne2 = mid(place2,numero2 + 1,len(place2)-numero2-1)) + 1
'En ne bougeant pas manuellement le curseur dans la feuille de
'calcul on fait une somme 2 lignes plus bas, pour séparer les
'données de leur somme
Set plage = Range(ActiveCell.Offset(ligne - 1, 0).Address & ":" & _
                ActiveCell.Offset(ligne - 4, 0).Address)
ActiveCell.Formula = Application.WorksheetFunction.Sum(plage)


En théorie, tu devrais avoir une colonne de données et leur somme deux lignes
après la dernière donnée.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 mars 2012 à 18:37
Bonjour, cmarcotte
Je n'ai pas la tête à programmer pour l'instant

Mama mia ! (cela se voit !)
dans ton 1er bout de code, déjà
laligne = activecell.row

et dans le second : ouille encore plus
Mais je ne suis de toutes manières ps certain de ce que ce soit là la vraie préoccupation de thaclemclem
Comme, d'ailleurs, je ne suis pas certain non plus que thaclemclem ne prenne pas un chemin assez "tortueux"

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
thaclemclem Messages postés 10 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 13 mars 2012
10 mars 2012 à 12:33
Bonjour à tous,
Merci pour vos message, voici (de mémoire) ce que j'ai finalement trouvé :
ActiveCell.FormulaR1C1 = "=SUM(R["&cstr(-myvar)&"]C:R[-1]C)"
Je n'ai pas mon code sous les yeux donc c'est à prendre avec des pincettes, je vous poste dès lundi la vrai formule ainsi qu'une autre version qui permet de figer la cellule.
A lundi !!!
ThaClemClem
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 mars 2012 à 14:17
ton cstr est ici inutile
Relis ma réponse d'hier à 11 h 21


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
thaclemclem Messages postés 10 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 13 mars 2012
13 mars 2012 à 12:38
Bonjour à tous,
voici les 2 codes utilisés :

Somme : Avec des cellules non figées :
Cells(i, 7).FormulaR1C1 = "=SUM(R[" + CStr(-myvar) + "]C:R[-1]C)"

Division : Avec une cellule figée :
Cells(i, 8).FormulaR1C1 = "=RC[-1]/R" + CStr(myvar) + "C[-1]"

@ ucfoutu, j'ai essayé sans le cstr, ca bug...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 mars 2012 à 12:55
ouais ...
surtout si tu mets un "+" à la place (relis donc) d'un "&"
où vois-tu un "+" dans ce que je t'ai dit (et testé, en plus !) :
Pour mémoire :
toto = 8
MsgBox "=SUM(R[" & -toto & "]C:R[-1]C)"

Il est clair que si tu mets un "+", VBA a besoin de savoir s'il s'agit ou non d'une addition (et le cstr est alors nécessaire
Si tu utilises l'opérateur de concaténation "&", comme je te l'ai montré, VBA sait qu'il ne s'agit pas d'une opération arithmétique mais d'une concaténation de texte ===>> le cstr est alors complètement inutile !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
thaclemclem Messages postés 10 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 13 mars 2012
13 mars 2012 à 15:43
je comprends tout juste ces histoire de cstr, je dois reconnaitre que je ne l'utilise jamais...
Sinon, c'est vrai que j'utilise un chemin tortueux, car il aurait été plus simple de laisser vba faire les calculs; mais comme ensuite on modifie ce qui se trouve dans les cellules, le passage par formulaR1C1 est indispensable afin de ne pas avoir à faire tourner la macro sans cesse...
En tout cas merci beaucoup, je garde ces morceaux de code précieusement !
++
ThaClemClem
0
Rejoignez-nous