Macro - ajouter une cellule créée
Bonjour
Je débute dans les macro... et un petit soucis, j'aimerais ajouter à une formule une valeur d'une cellule nouvellement créée.
Exemple dans la pièce jointe :
J'ai créé une macro me permettant d'ajouter des objets ainsi que leur valeur.
Sur la 1ère feuille : ajouter un objet... nom + nombre + prix unitaire
Ma macro copie mon modèle et l'insère dans la page récapitulatif... et doit modifier la formule dans le cadre précédent :
sur ce cadre : nombre d'objets (=D13) Bénéfice vente (=(D13*D15)
J'ajoute un objet : ma macro déplace le 1er objet... ajoute le 2ème.
modifie ma formule sur le cadre : nombre d'objets (=D21 car 1er objet déplacé donc normal ==> =D21+D13) Bénéfices (=(D21*D23) ==> =(D21*D23)+(D13*D15)
Pour le 1er objet ajouté pas de soucis par contre si je veux ajouter un 3ème objet ce n'est pas bon car au lieu de faire
nombre d'objets =D29+D21+D13 il me fait =D21+D13
J'aimerais avoir vos lumière sur comment faire. Merci par avance
Bonjour et bienvenue sur le forum
Un essai à tester.
J'ai fait quelques petits arrangements, que je te laisse découvrir, pour les besoins de la cause.
Cela te convient-il ?
Bye !
Bonjour un grand merci pour ton aide rapide ! c'est exactement ce que je souhaite !
Je vais étudier cela pour pouvoir l'appliquer à d'autres classeurs. Je reviens si je ne comprends pas quelque chose... (désolé je ne maîtrise pas encore les macros)
EDIT : comment cela fonctionne les R1C1 ? à quoi cela correspond-il ?
==> R[7]C[-1] ? merci
Pourrais-tu m'expliquer ces 2 lignes merci d'avance pour ton aide précieuse
fr.Range("D5").FormulaR1C1 = "=SUMPRODUCT((R[7]C[-1]:R[" & lgn - 5 & "]C[-1]=""Nombre"")*(R[7]C:R[" & lgn - 5 & "]C))"
fr.Range("D6").FormulaR1C1 = "=SUMPRODUCT((R[7]C[-1]:R[" & lgn - 5 & "]C[-1]=""Total"")*(R[7]C:R[" & lgn - 5 & "]C))"
fr (feuille Récap)
Range("D5") ==>cellule D5
Formula (appliquer la formule ? en gros faire = ? C'est ça ?)
R1C1 ?
SUMPRODUCT (somme des produits)
(R[7]C[-1]:R[" & lgn - 5 & "]C[-1] ==> là je ne comprends rien
""Nombre" : cela doit correspondre à une recherche "nombre" (un peu comme rechercheV) ?
* : multiplier (ouf)
(R[7]C:R[" & lgn - 5 & "]C) ==> ?
Bon une fois que j'aurais compris la 1ère ligne, la 2ème viendra d'elle même !
Merci
comment cela fonctionne les R1C1 ?
Cela ne fonctionne pas. Associé à une cellule,’’ FormulaR1C1’’ cela sert à indiquer que le contenu sera une formule.
Exemple :
Range("D5").FormulaR1C1 = "=… ‘’
R[7]C[-1] Indique, par rapport à la cellule désignée qu’il faut prendre la cellule située 7 lignes plus bas et une colonne à gauche
Pourrais-tu m'expliquer ces 2 lignes
fr.Range("D5").FormulaR1C1 = "=SUMPRODUCT((R[7]C[-1]:R[" & lgn - 5 & "]C[-1]=""Nombre"")*(R[7]C:R[" & lgn - 5 & "]C))"
fr.Range("D6").FormulaR1C1 = "=SUMPRODUCT((R[7]C[-1]:R[" & lgn - 5 & "]C[-1]=""Total"")*(R[7]C:R[" & lgn - 5 & "]C))"Ces deux lignes permettent d’écrire les formules dans les cellules D5 et D6 de la feuille RECAPITULATIF
En fait, on commence par écrire la formule sur la feuille Excel puis, on l’enregistre et on l’adapte pour la macro afin qu’elle se mette à jour à chaque boucle.
Ainsi, quand on a un seul objet, on doit avoir en D5 :
=SOMMEPROD((C12:C16="Nombre")*(D12:D16))
Je te renvoie pour cette formule aux explications de Excel, qui seront bien meilleures que les miennes.
On enregistre cette formule en VBA :
• On fait : ‘’Développeur – Enregistrer une macro’’
• On clique dans la barre de formule de la feuille, en fin de formule
• On valide
• On fait ‘’Développeur – Arrêter l’enregistrement ‘’
On recherche la macro que l’on vient d’enregistrer et on y cherche la formule :
ActiveCell.FormulaR1C1 = _
"=SUMPRODUCT((R[7]C[-1]:R[11]C[-1]=""Nombre"")*(R[7]C:R[11]C))"Le premier 7 entre crochets indique la ligne (R) où commence la plage de référence de la formule : 7 lignes plus bas que la cellule où on a cliqué, soit la ligne 12. Chaque fois qu’on ajoutera un objet, cette ligne sera la même.
Le ‘’-1’’ entre crochets indique la colonne (C) où commence la plage de référence de la formule : une colonne à gauche de la colonne D soit la colonne C. Elle aussi ne changera pas.
Donc, la plage de référence de la formule commencera toujours à la cellule C12.
En revanche, la valeur qui suit, entre crochet le deuxième R donne la ligne de la fin de la plage de référence de la formule. Elle va changer à chaque nouvel objet. C’est 11 lignes plus bas que D5 pour le 1er objet , puis ce sera 19 pour le second, 27 pour le 3°….
Or, si on remarque que la variable lgn, qui indique la dernière ligne de collage de chaque nouvel objet est lgn -5 lignes plus bas que la cellule D5, il suffit de remplacer le 11 par lgn -5.
Et comme on remplace une valeur dans du texte, il faut arrêter le texte en mettant un guillemet, puis concaténer la variable en mettant ‘’& lgn -5 et repasser en texte en concaténant la suite de la formule : & ‘’…
Pareil pour la 2° partie de la formule et pour la formule de D6.
OK ?
Bye !
Nickel ! J'ai testé un peu différemment (moins pro que toi) et ça fonctionne sur d'autres tableaux plus complexes ! ce qui veux dire que j'ai à peu près compris !
Merci mille fois !