Formule calculé en VBA, comment l'appliquer à une cellule ??

jojo2006

XLDnaute Occasionnel
bonjour,

j'ai reconstitué une formule dans mon code VBA et j'aimerai appliquer cette formule en Matricielle à une cellule ici cells(2,2) et étendre la formule à

toutes les lignes du dessous


j'ai stocké la formule dans un string a savoir:

' cells(1,1) contient "'=SI(MAX(1*ESTNUM(CHERCHE(categorie!H$3:I$XX;""&D2&"")));INDEX(categorie!I:I;MAX(SI(ESTNUM(CHERCHE(categorie!H$3:I$XX;" "&D2&""));LIGNE(categorie!H$3:I$XX))));"")"

formule_finale= cells(1,1).value

'je lance mon code de reconstitution et j'obtiens une nouvelle valeur de la ligne XX, ici le numero de ligne est 12

'et donc


formule_finale= "'=SI(MAX(1*ESTNUM(CHERCHE(categorie!H$3:I$12;" "&D2&" ")));INDEX(categorie!I:I;MAX(SI(ESTNUM(CHERCHE(categorie!H$3:I$12;" "&D2&" "));LIGNE(categorie!H$3:I$12))));"")"



je souhaite maintenant appliquer la formule dans formule_finale dans la cellule cells(2,2)

Sheets("data").Cells(2, 2).Select

ActiveCell.Formula = formule_finale

et la ca ne marche pas, j'ai une erreur d'exécution 1004 :mad:


Vous avez une idée sur la question :confused:



Merci à tous
 

wilfried_42

XLDnaute Barbatruc
Re : Formule calculé en VBA, comment l'appliquer à une cellule ??

bonjour jojo2006, le forum

.formula implique que ta formule soit traduite en anglais. pour utiliser une formule dans la langue locale et la placer dans une cellule en VBA, il faut utiliser formulalocal

il semblerait aussi que ta formule soit une formule matricielle à ce titre, traduit la en anglais et utilse FormulaArray
 

job75

XLDnaute Barbatruc
Re : Formule calculé en VBA, comment l'appliquer à une cellule ??

Bonjour jojo2006, wilfried 42, le forum,

La formule est celle du post #6 de ce fil :

https://www.excel-downloads.com/threads/recherchev-comment-categoriser-avec-des-mots-clef.131912/

Mais elle n'est pas correcte, elle devrait être :

Code:
=SI(MAX(1*ESTNUM(CHERCHE(categorie!H$3:[COLOR="Red"]H$12[/COLOR];" "&D2&" ")));INDEX(categorie!I:I;MAX(SI(ESTNUM(CHERCHE(categorie!H$3:H$12;" "&D2&" "));LIGNE($3:$12))));"")

En fait vous allez avoir beaucoup de mal avec VBA si vous n'êtes pas un habitué ;)

Suivez donc pas à pas la méthode que je donne dans le fichier joint. Elle consiste à utiliser une feuille macro Internationale Excel 4.0 (qui traduit la formule).

A+
 

Pièces jointes

  • Formule matricielle (1).xls
    37.5 KB · Affichages: 151
  • Formule matricielle (1).xls
    37.5 KB · Affichages: 168

job75

XLDnaute Barbatruc
Re : Formule calculé en VBA, comment l'appliquer à une cellule ??

Re,

Bon, la méthode précédente n'est pas inutile à connaître.

Mais on peut obtenir directement le code VBA en utilisant l'enregistreur de macro.

Donc menu Outils-Macro-Nouvelle macro, et valider* la formule en E2 par Ctrl+Maj+Entrée.

On obtient sans problème le code dans un Module (Alt+F11) :

Code:
Selection.FormulaArray = _
    "=IF(MAX(1*ISNUMBER(SEARCH(categorie!R3C[3]:R12C[3],"" ""&RC[-1]&"" ""))),INDEX(categorie!C[4],MAX(IF(ISNUMBER(SEARCH(categorie!R3C[3]:R12C[3],"" ""&RC[-1]&"" "")),ROW(R3:R12)))),"""")"

*Edit : précision au cas où... Pour valider une formule, cliquer d'abord dans la barre de formule.

A+
 
Dernière édition:

jojo2006

XLDnaute Occasionnel
Re : Formule calculé en VBA, comment l'appliquer à une cellule ??

Bonjour à tous,

merci pour vos réponses encore super rapides.

J'avoue que j'ai même plus penser à me mettre en enregistrer macro pour visualiser le code vba pour ma formule. :(

bon en même temps il était presque 3h du mat !! :rolleyes:


SInon c'est ok pour mon code, ca marche nickel

je dois juste trouver maintenant comment étendre en automatique ma formule à toutes mes lignes sachant que le nombre de ligne évolue sans cesse.

ici le nombre de ligne est 805 ( mais augmente sans cesse )

dois je faire une macro pour compter le nombre de ligne et changer le 805 avec le bon nombre de ligne ?

ou existe t il une formule qui s'adaptent automatiquement au nombre de ligne non vides ?


Range("G2").Select
Selection.AutoFill Destination:=Range("G2:G805")
Range("G2:G805").Select



Merci à vous tous


Jojo
 

job75

XLDnaute Barbatruc
Re : Formule calculé en VBA, comment l'appliquer à une cellule ??

Re,

Un B A BA en VBA, jojo2006. La macro :

Code:
Sub EntreMatrice()
Dim i As Long
For i = 2 To Sheets("Feuil1").Range("D65536").End(xlUp).Row
Sheets("Feuil1").Cells(i, "E").FormulaArray = "=IF(MAX(1*ISNUMBER(SEARCH(categorie!R3C[3]:R12C[3],"" ""&RC[-1]&"" ""))),INDEX(categorie!C[4],MAX(IF(ISNUMBER(SEARCH(categorie!R3C[3]:R12C[3],"" ""&RC[-1]&"" "")),ROW(R3:R12)))),"""")"
Next
End Sub

Edit : j'avais d'abord utilisé une boucle For Each cel In ..., mais celle-ci est plus claire pour vous.

A+
 

Pièces jointes

  • Formule matricielle (2).xls
    38 KB · Affichages: 111
Dernière édition:

job75

XLDnaute Barbatruc
Re : Formule calculé en VBA, comment l'appliquer à une cellule ??

Re,

Mais comme vous le signalez, on peut aussi utiliser AutoFill :

Code:
Sub EntreMatrice()
Dim plage As Range
With Sheets("Feuil1")
  Set plage = .Range("E2:E" & .Range("D65536").End(xlUp).Row)
  .Cells(2, "E").FormulaArray = "=IF(MAX(1*ISNUMBER(SEARCH(categorie!R3C[3]:R12C[3],"" ""&RC[-1]&"" ""))),INDEX(categorie!C[4],MAX(IF(ISNUMBER(SEARCH(categorie!R3C[3]:R12C[3],"" ""&RC[-1]&"" "")),ROW(R3:R12)))),"""")"
  .Cells(2, "E").AutoFill Destination:=plage
End With
End Sub

A+
 

Pièces jointes

  • Formule matricielle (3).xls
    39.5 KB · Affichages: 119

Discussions similaires

Réponses
0
Affichages
148

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87