Je tente vie l'enregistreur de macro et, en définissant une plage de remplacer une formule et sa recopie vers le bas par un code vba mais cela ne marche pas.
Dim Plage As Range
'Application.Calculation = xlCalculationManual
Sheets("Feuil1").Select
Set Plage = Range("b2:b" & range("A65536").end(xlup).row)
Plage.FormulaR1C1 = "=IF(RC[-1]=""Aucune MER"",""Oui"",IF(VALUE(RC[-1])>59,""Oui"",""Non""))"
'Plage.Calculate
Sub PlageDeFormules()
Dim Plage As Range, c As Range
Sheets("Feuil1").Select
Set Plage = Range("b2:b10000")
Plage.Clear
For Each c In Plage
c.Formula = "=IF(RC[-1]=""Aucune MER"",""Oui"",IF(VALUE(RC[-1])>59,""Oui"",""Non""))"
Next
End Sub
Toutes vos solutions fonctionnent mais je recherche la plus rapide d'entre elles car je souhaite la dupliquer sur une trentaine de formules sur plus de 4000 lignes
La première me plaît bien (sans vouloir vexer les autres contributeurs), car elle permet de détecter directement le nombre de formules à "descendre" qui peut être variable.
J'ai souhaité modifier les autres ainsi :
Range("a1").Activate ' selectionne la cellule a1 comme cellule de depart
fin = Range("a3").End(xlDown).Row 'Definit jusqu'ou les cellules sont remplis dans le colonnes A
Sheets("Feuil1").Range("B2: & fin").FormulaR1C1 = "=IF(RC[-1]=""Aucune MER"",""Oui"",IF(VALUE(RC[-1])>59,""Oui"",""Non""))"
Mais cela ne fonctionne pas, de plus, je doute que cela soit plus rapide que la 1ère soluce, qu'en pensez-vous ?
With Sheets("Feuil1")
.[b2].Resize(.[A65536].End(xlup).Row).FormulaR1C1 = "=IF(RC[-1]=""Aucune MER"",""Oui"",IF(VALUE(RC[-1])>59,""Oui"",""Non""))"
End with
Comme l'embarras du choix se Resize lui aussi
PS: Une variante si comme moi on a de vieux yeux
Code:
Dim Formu$
Formu="=IF(RC[-1]=""Aucune MER"",""Oui"",IF(VALUE(RC[-1])>59,""Oui"",""Non""))"
With Sheets("Feuil1")
.[b2].Resize(.[A65536].End(xlup).Row).FormulaR1C1 = Formu
End with