Bonjour,
C'est un bon début !
La principale erreur que vous faites est:
If .Range("BV" & i) <> vbNullString
L'objet Range dispose de nombreuses propriétés, et l'interpréteur VBA ne sait pas que vous souhaitez regarder sa Valeur, il serait donc plus correct d'utiliser
If .Range("BV" & i).Value <> vbNullString
Ensuite quitte à utiliser le VBA, au lieu d'utiliser la fonction copier/coller valeurs, je vous conseille d'utiliser ceci:
Comme je vous le disait l'objet Range dispose de plusieurs propriétés, dont une qui contient sa formule. Ainsi en appliquant:
.Range(blablabla).Formula = .Range(blablabla).Valeur
Vous remplacez la Formule de la cellule (ou du groupe de cellules, puisque range renvoie une liste de cellules) blablabla par sa valeur en une étape.
Ci-après une proposition de code
Sub formuleByValue()
Dim dl As Integer, i As Integer
Dim rng As Range
With Sheets("Carnet de commande ")
dl = .Range("A10").CurrentRegion.Rows.Count
For i = 10 To dl
'Vérifie si texte en BV
If .Range("BV" & i).Value2 <> vbNullString Then
'Remplacement de la formule par son résultat
.Range("BV" & i).EntireRow.Formula = .Range("BV" & i).EntireRow.Value2
End If
'ligne suivante
Next i
End With
End Sub
Si le code met trop de temps à s'exécuter vous pouvez désactiver ScreenUpdating et/ou le calcul automatique. Je vous renvoi vers le sujet traité récemment sur ce forum "Temps d'execution d'une macro demesure".