Microsoft 365 Convertir formule excel en vba

nsapg

XLDnaute Nouveau
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
 

Dudu2

XLDnaute Accro
Bonjour,
Si ta formule en français fonctionne sous Excel (à vérifier préalablement), valorise plutôt la propriété
.Range("A10").FormulaLocal = "=SI(ESTERREUR..."
 

nsapg

XLDnaute Nouveau
Merci staple1600 pour la réduction de ma formule. Toutefois je n'arrive pas à la faire fonctionner via vba.
Dudu2, cela ne fonctionne pas non plus.
 

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).
 

nsapg

XLDnaute Nouveau
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

Si tu veux utiliser du VBA, il faut passer par une macro
Je vais te faire un autre exemple en "pur" VBA, sans formule ;)
 

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 ;)
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas