VBA Formule dans une cellule

Résolu/Fermé
Xixi - 11 juin 2008 à 15:18
 Xixi - 12 juin 2008 à 08:44
Bonjour,

Je souhaite insérer une formule dans ma cellule.
En fait je souhaite faire C1=A1*B1 sauf que je ne veux pas de la valeur de A1 et B1 car dans ce cas C1 reste fixe.
Je veux que C1 se mette a jour si je modifie la valeur de A1 ou B1

Si je fais Range("C1").Value = "=A1*B1" ca fonctionne nickel
A1 = 3 B1 = 2 --> C1 = 6
Si je modifie A1 = 2 alors C1 = 4

Je veux faire cela mais je ne connais pas mes cellules A1 et B1 elles sont définis dans des boucles etc etc, il me faudrait donc plutot quelque chose du genre :

Range("C13").Value = "=" & Range("A1") & "*" & Range("B1")
ou
Cells(1,3).Value = "=" & Cells(1, 1) & "*" & Cells(1, 2)

La je suis capable d'intégrer mes coordonnées dans les range ou les cells.
Mais ces formules ne fonctionnent pas. Je lance ma macro la valeur se met, mais si je modifie le contenu de A1 ou B1 alors ma cellule résultat ne se met pas à jour.

Merci de votre aide

4 réponses

Question bonus ^^
Comment fait on pour copier un onglet d'un fichier vers un autre fichier?

Workbooks("Fichier1.xls").Sheets("MaFeuille").Select
Selection.Copy
Workbooks("Fichier2.xls").Sheets("MaFeuille2").Range("A1").PasteSpecial xlPasteValues

J'ai tenté ca mais le paste est KO et euhhh je sais pas trop il y a surement un moyen tout bete que je ne connai spas non?

Merciiiiii
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 juin 2008 à 15:52
Bonjour,
En tenant compte de ..
Si je fais Range("C1").Value = "=A1*B1" ca fonctionne nickel
Tu est sur le VBA
Si tu veux mettre une formule dans une cellule faut mettre...
Si je fais Range("C1").Formula = "=A1*B1"
ca dev arit fonctionner.
Je vois pour ton autre question
A+

0
Mon problème ne vient pas vraiment de là lermite le problème est que dans ma boucle je ne sais pas mes coordonnées A1 et B1, ca varie.

Et si je met Range("C1").formula = "=" & Range("A1").value & "*" & Range("B1").value
ca marche lorsque je lance mon prog j'ai la bonne valeur dans C1 mais si je modifie manuellement A1 alors C1 ne se met pas a jour snif

Merci pour le copier coller de sheets
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > Xixi
11 juin 2008 à 16:48
Si tu a un problème sur cette macro, montre ce que tu veux faire. (Met ta macro sur le poste suivant)
0
Xixi > lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
11 juin 2008 à 17:07
Bah ce que je veux faire c'est plus dans ce style la

for i = 1 to 10
Cells(i,1).formula = "=" & Range(j,3).value & "*" & Cells(i,2).value
j = j + 1
next i

Mais le calcul doit se faire lorsqu'on lance la macro, et ensuite lorsqu'on change a l'arrache dans une feuille la valeur d'une cellule.

Exemple de ce que je veux faire:
C1 = 3
B1 = 2
Je lance ma macro
A1 = C1*B1 = 6
Je modifie manuellement dans ma feuille la valeur de C1 pour mettre 4
A1 doit prendre = 8

Je sais faire en mettant en dur le nom des cellules dans la formule et ca marche (ca met bien a jour si je modifie ds ma feuille une valeur)
Range("A1").Value = "=C1*B1"
Par contre je n'arrive pas a le faire en mettant des Cellules de ma boucle
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > Xixi
11 juin 2008 à 17:17
c'est pas possible ( a ma connaissance) de mettre des adresses relative dans les formules.
Tu doit faire un traitement par macro.
Et si tu veux lancer une macro qui fait ce que tu dit tu ne doit pas mettre une formule dans la cellule mais le résultat du calcul des cellules.
Explique un peu mieux ce que tu veux et ont se ferra un plaisir de t'aiguiller.
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120 > Xixi
11 juin 2008 à 19:50
Je me permets de m'immicer dans la conversation et j'espère que lermite222 ne m'en tiendra pas rigueur :

est ce que ca correspond à ce que tu veux faire ?

For i = 1 To 10
Cells(i, 1).Formula = "=" & Cells(j, 3).Address & "*" & Cells(i, 2).Address
j = j + 1
Next i
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 juin 2008 à 16:05
Pour ta 2ém question..
Sheets("Feuil1").Copy After:=Workbooks("Classeur2").Sheets(3)

A+
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 juin 2008 à 07:55
Une solution....
Tu colle cette macro dans un module standard
Function CalculCell()
Dim Lig As Long
Dim Col As Long
    Application.Volatile
    Lig = Application.Caller.Row
    Col = Application.Caller.Column
    CalculCell = Cells(Lig, Col - 1) * Cells(Lig, Col - 2)
End Function


Dans C1 tu met =CalculCell()
exécution exemple :
dans A1 tu met 6
dans B1 tu met 8
C1 Affiche automatiquement 48
tu modifie A1 ou B1 la modif est immédiate...
Tu peu mettre cette formule dans n'importe quelle cellule C2..C3..C4 .. etc..
J'ai tester y a pas d'erreur.
A+
0