Microsoft 365 Convertir formule excel en vba

de_hanstrapp

XLDnaute Occasionnel
Bonsoir le forum,

Je souhaiterai convertir cette formule excel en vba :
=SI(ESTERREUR(RECHERCHEV($B10;Sports!$A$2:$C$100;3;FAUX)); "";(RECHERCHEV($B10;Sports!$A$2:$C$100;3;FAUX)))

J'ai essayé le code ci-après... mais cela ne fonctionne pas... :
With ThisWorkbook.Worksheets("Tableau_de_bord")
.Range("A10").Formula = "=IF(ISERROR(VLOOKUP($B10,Sports!$A$2:$C$100,3,FALSE)), "",(VLOOKUP($B10,Sports!$A$2:$C$100,3,FALSE)))"
End With

Un coup de pouce ?
Merci par avance.

nsapg
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Ta formule peut se réduire à:
=SIERREUR(RECHERCHEV($B10;Sports!$A$2:$C$100;3;0); "")
Et dans ce cas, l'enregisteur de macros nous donne
VB:
Sub Macro1()
ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(R[6]C2,Sports!R2C1:R100C3,3,0), """")"
End Sub

EDITION: Bonsoir Dudu2
 

Staple1600

XLDnaute Barbatruc
Re

Donc voila le petit exemple pour test
Dans un classeur vierge avec deux feuilles
(dont une nommée Sports)
1) Lance la macro nommée Creation_Exemple
2) Rends-toi ensuite sur la seconde feuille et lance la macro nommée Formule_VBA puis regarde la formule dans la cellule jaune.

VB:
Sub Creation_Exemple()
With Sheets("Sports")
.[A2] = 1: .[A2:A100].DataSeries
.[B2:C100] = "=ADDRESS(ROW()-1,COLUMN(),4)"
End With
End Sub

Sub Formule_VBA()
[B10] = 5
[C10].FormulaR1C1 = "=IFERROR(VLOOKUP(RC2,Sports!R2C1:R100C3,3,0), """")"
[B10:C10].Borders.Weight = 2
[C10].Interior.Color = vbYellow
End Sub
Conclusion:
Ca marche, non ? ;)
 

jmfmarques

XLDnaute Accro
Bonjour Dudu2
Si ta formule en français fonctionne sous Excel (à vérifier préalablement), valorise plutôt la propriété
.Range("A10").FormulaLocal = "=SI(ESTERREUR..."
Qu'est cette assertion ? :rolleyes:
A nsapg : il est en effet (comme tu le fais très bien) bien plus adroit d'utiliser la propriété formula, toujours bonne quelle que soit la machine/version
Ton erreur est dans la construction dynamique de la chaîne de caractères (puisque construction dynamique). IL faut donc y remplacer tes "", par """", tout simplement -->>>
VB:
Range("A10").Formula = "=IF(ISERROR(VLOOKUP($B10,Sports!$A$2:$C$100,3,FALSE)), """",(VLOOKUP($B10,Sports!$A$2:$C$100,3,FALSE)))"

(sans préjudice d'autres aspects. Je me contente ici de corriger ton erreur).
 

de_hanstrapp

XLDnaute Occasionnel
Merci staple1600.
Je pense que ma demande n'était pas bien formulée... et je m'en excuse.
Ma question était de savoir si il était possible d'appliquer cette formule via vba sans activer une macro et sans mention de la formule dans la cellule concernée.
Toutefois, ton exemple fonctionne.
nsapg
 

Staple1600

XLDnaute Barbatruc
Re

Donc sans "formule" ;)
Sur le même classeur exemple que tout à l'heure
lance cette macro sur la seconde feuille
(en ayant effacé avant la plage B10:C10)
VB:
Sub No_Formule_VBA()
Sheets("Sports").Range("A2:C100").Name = "d_BAse"
[B10] = 5
With Cells(10, "C")
  .Value = Application.VLookup(.Offset(, -1), [d_Base], 3, 0)
  .Offset(, -1).Resize(, 2).Borders.Weight = 2
  .Interior.Color = vbYellow
End With
End Sub
Le résultat est le même, mais sans formule ;)
 

Discussions similaires