Beurk
![:vomi: :vomi:]()
Il y a longtemps que je n'avais pas vu un code aussi horrible.
Alors pour commencer, il faut virer tous les Machin.Select/Selection.Truc Machin.Activate/ActiveBidule.Truc et les remplacer par des Machin.Truc. C'est une question d'hygiène.
Ensuite, sers-toi d'une variable pour pointer la case en cours. C'est tellement plus facile. Au lieu d'utiliser l'adresse d'une cellule , utilise la cellule elle-même.
Moche :
Dim casefin As String
casefin = Sheets("Feuil2" ).Range("A1" ).End(xlDown).Address
Beau
Dim casefin As Range
Set casefin = Worksheets("Feuil2" ).Range("A1" ).End(xlDown)
Allez, c'est parti : casefin, ce n'est pas assez parlant. je l'appelle cible, parce que c'est là que je veux mettre mes données.
Dim cible As Range
Set cible = Worksheets("Feuil2").Range("A1").End(xlDown).Offset(1, 0)
cible.FormulaR1C1 = "='Feuil1'!R1C2"
Set cible = cible.Offset(0, 1)
cible.FormulaR1C1 = "='Feuil1'!R2C2"
Set cible = cible.Offset(0, 1)
cible.FormulaR1C1 = "='Feuil1'!R3C2"
Set cible = cible.Offset(0, 1)
cible.FormulaR1C1 = "='Feuil1'!R1C4"
C'est mieux. Mais finalement, le coup de la cible, c'est un peu lourd. Revenons à ta première idée, on ne va garder que la case de fin :
Dim casefin As Range
Set casefin = Worksheets("Feuil2").Range("A1").End(xlDown)
casefin.Offset(1, 0).FormulaR1C1 = "='Feuil1'!R1C2"
casefin.Offset(1, 1).FormulaR1C1 = "='Feuil1'!R2C2"
casefin.Offset(1, 2).FormulaR1C1 = "='Feuil1'!R3C2"
casefin.Offset(1, 3).FormulaR1C1 = "='Feuil1'!R4C1"
Ah, là ça a de le gueule !
Bon, en attendant, des données sur Feuil2 varient toujours en fonction de Feuil1.
C'est emmerdant, mais c'est exactement ce que tu demandes : Formule dans Feuil2 = Ceux qu'il y a en Feuil1.
En fait tu ne veux pas de formule, tu veux les valeurs :
Dim casefin As Range
Set casefin = Worksheets("Feuil2").Range("A1").End(xlDown)
casefin.Offset(1, 0).Value = Worksheets("Feuil1").Range("B1").Value
casefin.Offset(1, 1).Value = Worksheets("Feuil1").Range("B2").Value
casefin.Offset(1, 2).Value = Worksheets("Feuil1").Range("B3").Value
casefin.Offset(1, 3).Value = Worksheets("Feuil1").Range("A4").Value
Qu'en penses-tu ?
Qu'on peut toujours mieux faire ? - Ben oui. Mais après, c'est une question de goût :
Dim casedeb As Range
Set casedeb = Worksheets("Feuil2").Range("A1")
Dim casefin As Range
Set casefin = Worksheets("Feuil2").Range("A1").End(xlDown)
casefin.Offset(1, 0).Value = casedeb.OffSet(1, 0).Value
casefin.Offset(1, 1).Value = casedeb.OffSet(1, 1).Value
casefin.Offset(1, 2).Value = casedeb.OffSet(1, 2).Value
casefin.Offset(1, 3).Value = casedeb.OffSet(0, 3).Value