Problème : Erreur 400 lors de l'application d'une formule via VBA

Contexte :

Je travaille sur un projet où j'essaie d'insérer une formule dans une cellule via VBA. La formule que je veux insérer est :

=SIERREUR(FILTRE('[Pour la mise en forme.xlsm]Annexe!_7_Annexe[Lien]; '[Pour la mise en forme.xlsm]Annexe'!_7_Annexe[Num - Copier]=SUPPRESPACE(A8) & " A" ); """")

Lorsque j'essaie de l'appliquer par VBA dans le code suivant :

For i = 8 To 8
    With ws.Cells(i, 19)
        .Formula = "=SIERREUR(FILTRE('[Pour la mise en forme.xlsm]Annexe'!_7_Annexe[Lien]; '[Pour la mise en forme.xlsm]Annexe'!_7_Annexe[Num - Copier]=SUPPRESPACE(A8) & "" A""); """")"
    End With
Next i

Cela me renvoie une erreur 400.

Ce qui fonctionne manuellement :

Si j'envoie la même formule directement dans la cellule sans le = c'est à dire de cette façon en tant que texte :

For i = 8 To 8
    With ws.Cells(i, 19)
        .Formula = "SIERREUR(FILTRE('[Pour la mise en forme.xlsm]Annexe'!_7_Annexe[Lien]; '[Pour la mise en forme.xlsm]Annexe'!_7_Annexe[Num - Copier]=SUPPRESPACE(A8) & "" A""); """")"
    End With
Next i

cela fonctionne sans problème lorsque j'ajoute le = avant SIERREUR à la main.

Questions :

  1. Pourquoi l'ajout du = dans VBA ne fonctionne-t-il pas correctement pour cette formule, alors que tout marche bien lorsque je la tape manuellement ?
  2. Existe-t-il une meilleure manière d'écrire cette formule dans VBA pour qu'elle fonctionne sans générer d'erreur ?

Bonjour,

Quand ça bug, appuyez sur F1 pour lire la doc

Range.Formula => formule en Anglais (US)

Si vous voulez entrer la formule en français (ou plus précisément, dans la langue de votre système), vous devez utiliser Propriété Range.FormulaLocal (Excel) | Microsoft Learn

Mais bon, toujours en lisant la doc, il est indiqué pour les fonctions de type dynamique (filtre, trier, etc.) d'utiliser plutôt Propriété Range.Formula2 (Excel) | Microsoft Learn, avec la formule en Anglais, que vous pouvez convertir ici.

bonjour Easy9394jbrir, salut saboh12617,

je suis un peu paresseux, donc ce que je fais, c'est écrire la formule dans la première cellule et je suppose qu'elle est la H19 chez vous. Si elle fonctionne comme vous le voulez, j'utilise l'enregistreur des macros, je fais F2 sur la cellule H19 et puis enter et je sors de l'enregistreur. Puis je copie la partie après "formular1c1" du code enregistré vers ma macro. Comme ça, vous l'avez directement en anglais et si l'enregistreur utilise ".formula2r1c1", je l'utilise aussi ce "2", donc c'est comme Saboh12617 le dit, mais d'une façon paresseusse.

bonjour Easy9394jbrir, salut saboh12617,

je suis un peu paresseux, donc ce que je fais, c'est écrire la formule dans la première cellule et je suppose qu'elle est la H19 chez vous. Si elle fonctionne comme vous le voulez, j'utilise l'enregistreur des macros, je fais F2 sur la cellule H19 et puis enter et je sors de l'enregistreur. Puis je copie la partie après "formular1c1" du code enregistré vers ma macro. Comme ça, vous l'avez directement en anglais et si l'enregistreur utilise ".formula2r1c1", je l'utilise aussi ce "2", donc c'est comme Saboh12617 le dit, mais d'une façon paresseusse.

Je fais pareil, ou dans la fenêtre immédiate je tape "? Selection.Formula2" comme ça pas d'erreur de copie.

c'est même plus vite/pratique ...

Rechercher des sujets similaires à "probleme erreur 400 lors application formule via vba"