VBA Formule dans une cellule

Résolu
Xixi -  
 Xixi -
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

  1. Xixi
     
    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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. Xixi
       
      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
    2. lermite222 Messages postés 9042 Statut Contributeur 1 199 > Xixi
       
      Si tu a un problème sur cette macro, montre ce que tu veux faire. (Met ta macro sur le poste suivant)
      0
    3. Xixi > lermite222 Messages postés 9042 Statut Contributeur
       
      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
    4. lermite222 Messages postés 9042 Statut Contributeur 1 199 > Xixi
       
      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
    5. onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention   120 > Xixi
       
      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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Pour ta 2ém question..
    Sheets("Feuil1").Copy After:=Workbooks("Classeur2").Sheets(3)

    A+
    0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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