Faire référence à une cellule

Bonjour à tous,

je vais essayer d'être le plus compréhensible et d'utiliser le vocabulaire (ça va être dur) approprié concernant le problème que je rencontre.

Voilà mon code (C'est un exemple pour vous expliquer ce que je souhaite faire):

Sub test()
Dim l, c As Integer

l = 1
i = 1

For i = 1 To 10

    cells(l,3).value=cells(l,1).value*cells(l,2).value

    l = l + 1

Next

End Sub

Avec comme données:

A1:A10=2

B1:B10=1, 2, 3, ...

Ce code permet de mettre le résultat dans la colonne C (3) de la table de 2. Après avoir exécuter le code, lorsque je vais aller sur mon fichier Excel, sur la cellule C1 (par exemple), il y aura de marqué "2", ce qui est logique me direz-vous. Mais moi j'aimerai aussi que ça affiche 2 mais que lorsque je clique sur la cellule C1 il y a: =A1*B1. Vous me suivez?

Ce que je veux, c'est qu'après avoir exécuter la macro, je peux modifier les donnés de la colonne A et B et que la cellule C affiche le nouveau résultat (en fonction des changements).

Vous me direz qu'il y a:

range("XX").formula="="

mais je ne peux pas appliquer cette formule au code que je vous ai écrit un peu plus haut. En effet, je pourrai régler mon problème avec cette formule, mais il me faudrait la répéter 10 fois:

Range("C1").formula="=A1*B1"
......
Range("C10").formula="=A10*B10"

Avec ce code, si je clique sur C1 il y a bien la formule "=A1*B1"

Même si c'est incorrect ce que je vais écrire, voilà "l'idée":

Sub test()
Dim l, c As Integer

l = 1
i = 1

For i = 1 To 10

    cells(l,3).formula="=cells(l,1)*cells(l,2)"

    l = l + 1

Next

End Sub

C'est un peu long, mais j'espère que certains d'entre vous sauront m'apporter LA réponse. Merci à vous et bon week-end.

Bonsoir,

Je ne vois pas l'intérêt d'utiliser une macro, tu peux placer ta formule en C1, puis la recopier.

Sinon :

Range("C1:C10").Formula = "=A1*B1"

Bonsoir Oyobrans,

Le code que j'ai mis est seulement un exemple pour vous expliquer ce que je recherche. La formule que je recherche et que j'espère trouver ici, me permettra de continuer à coder une macro beaucoup plus complexe! C'est sur qu'il existe une réponse à ce que je cherche!

Regarde le bout de code que j'ai mis.

Pour une plage donnée, tu peux juste saisir la formule correspondant à la première cellule de la plage, le reste va s'adapter automatiquement.

Bonjour à tous,

à tester,

Sub test()
Dim i As Long

For i = 1 To 10
    Cells(i, 3).Formula = "=" & Cells(i, 1).Address(0, 0) & "*" & Cells(i, 2).Address(0, 0)
Next
End Sub

re,

un autre possibilité sans boucle,

Sub test2()
Cells(1, 3).Formula = "=" & Cells(1, 1).Address(0, 0) & "*" & Cells(1, 2).Address(0, 0)
Range(Cells(1, 3), Cells(10, 3)).FillDown
End Sub

Bonsoir Antoine, le forum,

je te propose ce fichier Excel :

fais Ctrl e


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Merci beaucoup i20100, c'est exactement ce que je cherchais. J'ai vu que ça marchait mais j'ai besoin de quelques infos supplémentaire:

-> À quoi correspond Address(0,0)?

-> Comment faire si je veux avoir le même résultat mais en allant chercher dans un autre classeur les cellules, voilà par exemple ce que je sais faire:

Sub test()
Dim i As Long

For i = 1 To 10
    Workbooks("Classeur1").Worksheets("Feuil1").Cells(i, 3) = Workbooks("Classeur2").Worksheets("Feuil1").Cells(i, 1) * Workbooks("Classeur2").Worksheets("Feuil1").Cells(i, 2)
Next
End Sub

Comment faire pour suivre le même résultat qu'avec ton code mais en allant chercher les cellules dans un autre classeur ?

Le code ci-dessus permet seulement d'avoir le résultat mais si je change les données du deuxième classeur, les résultat dans le 1er classeur ne changeront pas. Je veux le même résultat qu'avec ton code mais en allant chercher les données dans un autre classeur!

Merci beaucoup dans tous les cas i20100!

Dhany, j'ai essayé ton code et oui ça marche, mais je t'avoue que j'ai un peu du mal. J'avais aussi trouver cette formule en enregistrant une macro pour voir ce qu'il allait me donner! Le problème, c'est que je ne peux pas insérer ton code dans une boucle.

Merci à vous deux

Bonjour,

Un peu de lecture matinale pour la propriété Range.Address :

https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.address

Bonjour Antoine, le forum,

tu a écrit :

Le problème, c'est que je ne peux pas insérer ton code dans une boucle.

mon code VBA est celui-ci :

Sub test()
  Application.ScreenUpdating = 0
  [C1].Resize(10).FormulaR1C1 = "=RC[-2]*RC[-1]"
End Sub

* pas besoin de boucle : si tu veux 20 lignes au lieu de 10, il suffit de mettre .Resize(20)

* si tu veux un nombre de lignes variable, il suffit d'utiliser une variable, comme ceci :

Sub test()
  Dim n%
  n = Val(InputBox("n :")): Application.ScreenUpdating = 0
  If n > 0 Then [C1].Resize(n).FormulaR1C1 = "=RC[-2]*RC[-1]"
End Sub

dhany

Re,

si tu tiens absolument à une boucle, je te propose ce code VBA :

Sub test()
  Dim i%: Application.ScreenUpdating = 0
  For i = 1 To 10
    Cells(i, 3).FormulaR1C1 = "=RC[-2]*RC[-1]"
  Next i
End Sub

avec boucle, et pour un nombre de lignes variable :

Sub test()
  Dim n%, i%
  n = Val(InputBox("n :")): Application.ScreenUpdating = 0
  For i = 1 To n
    Cells(i, 3).FormulaR1C1 = "=RC[-2]*RC[-1]"
  Next i
End Sub

dhany

re,

à tester,

Sub test()
Dim i As Long
For i = 1 To 10
    Cells(i, 3).Formula = "=[Classeur2]Feuil1!" & Cells(i, 1).Address(0, 0) & "*[Classeur2]Feuil1!" & Cells(i, 2).Address(0, 0)
Next
End Sub

(0, 0) est pour définir Absolue ou Relatif

Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo) .Address = $A$1 .Address(0, 0) =A1 .Address(, 0) =$A1

Merci à vous tous! Merci beaucoup I20100.

Quand je marque directement ton code ça marche parfaitement. Mais quand j'essaye de reprendre la même base pour d'autres classeur, ça ne marche pas et ça m'affiche "Erreur d'exécution "1004": Erreur définie par l'application ou par l'objet".

Sub macrotest()

Workbooks("EXEMPLE DE MACRO.xls").Sheets("JANVIER").Cells(4, 4).Formula = "=[LA VIE EST BELLE]ONGLET 1!" & Cells(46, 4).Address(0, 0)

End Sub

Avez-vous une idée de la raison de ce message?

Ça m'affiche ça seulement avec ces deux fichiers. Quand j'essaye la formule cells(l,c).formula sur des fichiers excel nouveaux, je n'ai aucun soucis, ça marche parfaitement!

ps: J'ai vérifié le nom du fichier, onglet pas mal de fois, ça ne vient pas d'une erreur de frappe concernant le nom du fichier, onglet.

Merci à vous.

re,

Workbooks("EXEMPLE DE MACRO.xls").Sheets("JANVIER").Cells(4, 4).Formula = "=[LA VIE EST BELLE]ONGLET 1!" & Cells(46, 4).Address(0, 0)

essaie de faire la formule manuellement,

sélectionne la cellule D4 sur l'ongelet "JANVIER" du fichier "EXEMPLE DE MACRO.xls"

ta le signe =

puis avec la souris sélectionne

le fichier "LA VIE EST BELLE"

l'onglet "ONGLET 1"

et la cellule D46,

maintenant regarde bien la formule qui en résulte, il devrais y avoir un extension au fichier (.xls ou xlsx ou xlsm)

cette extension tu ne la pas mis dans ton code.

quand on fait un lien vers un fichier qui n'est pas enregistrer il n'y a pas d'extension, mais il y en a une si celui-ci est enregistrer.

Merci infiniment I20100! Merci pour ton temps vraiment! J'espère pouvoir aider comme tu fais un jour. Bonne semaine à vous!

je t 'y encourage vivement,

comme toi j'ai commencé en posant des questions et j'ai reçu de l'aide,

alors je te souhaite une bonne continuation!

Rechercher des sujets similaires à "reference"