Convertir formule Excel en code VBA

Bonjour à tous,

j'ai une formule excel qui fonctionne très bien sous excel seulement quand je traduit la formule en code vba une erreur apparaît

" erreur d'exécution '13': Incompatibilité du type "

et je n'arrive pas à comprendre d'où vient l'erreur dans le code et ce malgré mes recherches.

Je précise que mon niveau en VBA est encore un peu limité pour ne pas dire proche de zéro je suis donc en apprentissage

Je vous remercie infiniment pour votre aide.

Bonjour

teste avec

Selection.FormulaArray= ta formule

Mais cela n'ira pas plus vite

Bonjour M12,

j'ai testé mais j'ai toujours le même message d'erreur... Peut être que je rédige mal le code.

Worksheets("FRFO").Range("K" & k).FormulaArray = WorksheetFunction.Index(Worksheets("Journal_Retraité_OP").Range("K:K"), WorksheetFunction.Match(1, (Worksheets("Journal_Retraité_OP").Range("G:G") = Worksheets("FRFO").Cells(k, 6)) * (Worksheets("Journal_Retraité_OP").Range("A:A") = "FAUX") * (Worksheets("Journal_Retraité_OP").Range("E:E") = Worksheets("FRFO").Cells(k, 4)), 0))

C'est bien ça?

Merci

Bonjour David,

Salut M12,

Salut le Forum,

Alors moi je comprend pas la formule Excel que tu veux utiliser avec le code que tu a mis dans ton message [...]

Worksheets("FRFO").Range("K" & k).FormulaArray = WorksheetFunction.Index(Worksheets("Journal_Retraité_OP").Range("K:K"), WorksheetFunction.Match(1, (Worksheets("Journal_Retraité_OP").Range("G:G") = Worksheets("FRFO").Cells(k, 6)) * (Worksheets("Journal_Retraité_OP").Range("A:A") = "FAUX") * (Worksheets("Journal_Retraité_OP").Range("E:E") = Worksheets("FRFO").Cells(k, 4)), 0))

[...] mais je conseillerai de plutôt utiliser la propriété FormulaLocal car elle permet d'écrire en VBA une formule tel que tu l'écrirais directement sur Excel.

Par exemple, si je veux écrire une SOMME en cellule A1de ma feuille 1 avec FormulaLocal :

Sheets(1).Cells(1,1).FormulaLocal = "=SOMME(B1:B10)"

ou

Sheets("Feuil1").Range("A1").FormulaLocal = "=SOMME(B1:B10)"

Restant à dispo!

Bonjour Juice,

Merci pour l'info! j'ai testé le message d'erreur ne s'affiche plus seulement deux problèmes se posent:

1- Résultat est #N/A parce que c'est une formule matricielle et doit donc être validée par Ctrl+Alt+Entrée. Je ne sais pas comment le faire avec FormulaLocal

2- vu qu'il y a plusieurs cellule concernées par la formule, comment faire pour prendre en compte automatiquement le changement de cellule (passage de la cellule F8 par exemple à F9)

=+INDEX(Journal_Retraité_OP!$K:$K;EQUIV(1;(Journal_Retraité_OP!$G:$G=FRFO!F8)*(Journal_Retraité_OP!$A:$A=FAUX)*(Journal_Retraité_OP!$E:$E=FRFO!D8);0))

Pour répondre à ta question sur le code, en fait je souhaite convertir ou intégrer cette formule dans le code vba. Cette formule me permet de récupérer des données dans un tableau en fonction de critère bien spécifique. j'ai donné un peu plus de précision dans le fichier excel joint. Par contre s'il n'est pas suffisamment explicite n'hésite pas à me le dire je vais apporter encore plus d'éclaircissements.

Merci pour vos réponses.

parce que c'est une formule matricielle

D'où le FormulaArray de M12!

Le FormulaLocal ne permet pas d'écrire des formules matricielles :p

okkkk

Juice, tu l'auras compris, tu ne discute pas en ce moment avec une lumière en VBA

J'ai pourtant testé le FormulaArray mais j'ai quand même eu le message d'erreur

Bonjour et Bonne année à tous,

A toute fin utile, j'ai finalement utilisé directement la formule excel combiné au code ci-dessous pour améliorer significativement mon problème de performance.

Sub OptimizeVBA(isOn As Boolean)
    Application.Calculation = IIf(isOn, xlCalculationManual, xlCalculationAutomatic)
    Application.EnableEvents = Not (isOn)
    Application.ScreenUpdating = Not (isOn)
    ActiveSheet.DisplayPageBreaks = Not (isOn)
End Sub

Merci à tous pour votre aide!

Rechercher des sujets similaires à "convertir formule code vba"