Formule Excel dans VBA

Bonjour,

Pour une procedure de reset dans une feuille, je dois copié une formule excel dans une cellule j'ai donc essayé ceci :

Range("b8").Formula = "=si(B7="";"";RECHERCHEV(B7;Client!A3:H52;2))"

mais bien sur cela ne fonctionne pas, apres quelques recherche, j'ai essayé ca :

Range("b8").Formula = "=si(B7="","",RECHERCHEV(B7,Client!A3:H52,2))"

mais bien sur ca ne fonctionne pas, je crois que ca dois etre une question de " " mal placer ou autres...

Merci de me donner une piste...

Salut cyber_mobile et le forum

Range("b8").Formula = "=si(B7="";"";RECHERCHEV(B7;Client!A3:H52;2))"

Pas sûr de comprendre, vu ton titre...

Formula : la formule en anglais : à part pour les anglophones, ce n'est pas le plus pratique

FormulaLocal : la formule telle que tu la mets dans ta feuille de calcul (avec les adaptations dues à VBA)

Range("b8").FormulaLocal = "=si(B7="""","""",RECHERCHEV(B7,Client!A3:H52,2))"

Attention : une formule c'est du texte : pour que les guillemets apparaissent dans du texte, il faut les doubler !

A+

Bonjour à tous,

Une solution très simple pour savoir comment "traduire" une formule en VBA : l'enregistreur de macro.

1. Lance l'enregistreur de macro

2. Va en B8 et colle ta formule : =si(B7="";"";RECHERCHEV(B7;Client!A3:H52;2))

3. Valide avec Entrée par exemple

4. Arrête l'enregistrement

Une procédure a été créée avec ce qu'il faut mettre. Voici ce que j'obtiens en VBA :

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("B8").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(R[-1]C="""","""",VLOOKUP(R[-1]C,Client!R[-5]C[-1]:R[44]C[6],2))"
    Range("B8").Select
End Sub

Un petit coup d'optimisation et ça donne :

Sub Macro1()
    Range("B8").FormulaR1C1 = _
        "=IF(R[-1]C="""","""",VLOOKUP(R[-1]C,Client!R[-5]C[-1]:R[44]C[6],2))"
End Sub

Super un grand merci a tous...

Si ton problème est résolu n'oublie pas cliquer sur le petit V vert que tu vois à côté de tes messages.

oups oui pardon, suis occupé a faire plusieurs recherches, j'ai trop d'onglet ouvert...

-- 18 Juin 2011, 13:58 --

j'ai quand meme un soucis:

je marque dans dans une marco la formule :

=SI(B8="";"";INDEX(client!A3:H52;EQUIV(B8;client!B3:B52;0);1))

cela me donne en language vba :

"=IF(R[7]C[1]="""","""",INDEX(client!R[2]C:R[51]C[7],MATCH(R[7]C[1],client!R[2]C[1]:R[51]C[1],0),1))"

Et apres utilisation dans ma macro Reset, la cellule B8 me donne :

=SI(C14="";"";INDEX(Client!B9:I58;EQUIV(C14;Client!C9:C58;0);1))

Mais qu'est ce la cellule C14 est venue faire ici ainsi que que la plage b9:i58!!!!

-- 18 Juin 2011, 14:29 --

J'ai refais l'operation plusieurs fois, c'est ok ca marche marche, j'ai j'ai eu des resultats aleatoire plusieurs fois!!!

En fait, il ne faut pas que tu mettes ta formule n'importe où !

Par exemple si tu veux mettre ta première formule en F12, il faudra dans ta macro Reset toujours mettre la formule en F12 avec un Range("F12").FormulaR1C1 = ... par exemple.

Sinon, pour que ta formule soit toujours la même quelle que soit la cellule, mets des dollars (=référence absolue) dans ta formule.

ok et alors si je veux integre une variable dans ma formule ?

Avec ceci :

    Range("J21").Select
    ActiveCell.FormulaR1C1 = _
    "=INDEX(Produit!R[-18]C[-9]:R[181]C[4],MATCH(a" & NumeroLigneEffacer & ",Produit!R[-18]C[-9]:R[181]C[-9],0),3)"

J'obtiens :

=INDEX(Produit!A3:N202;EQUIV('a15';Produit!A3:A202;0);3)

au niveau de EQUIV il y a des guillemes en trop... suis pas trop doué en nomenclature et tout ca, j'apprend par l'essai erreur....

La logique est bonne. Si tu veux placer une variable dans ta formule, utilise une formule contenant des références absolues.

Avec ton ancienne formule, l'enregistreur de macro donnait :

Range("J21").Select

ActiveCell.FormulaR1C1 = _

"=INDEX(Produit!R[-18]C[-9]:R[181]C[4],MATCH(R[-6]C[-9],Produit!R[-18]C[-9]:R[181]C[-9],0),3)"

Note la partie : MATCH(R[-6]C[-9]

En fait le -6 signifie qu'il situera ta cellule 6 ligne au-dessus. Le -9 situera ta colonne 9 colonnes à gauche. Comme tu mets la formule en J21, le R[-6]C[-9] équivaudra donc à la cellule se trouvant ligne 21-6=15 et colonne J-9=A => A15

Tout ça pour dire que mettre une variable devient possible avec la formule suivante (qui contient une référence absolue) :

=INDEX(Produit!A3:N202;EQUIV($A$15;Produit!A3:A202;0);3)

Donc un petit coup d'enregistreur de macro et j'obtiens :

Range("J21").Select

ActiveCell.FormulaR1C1 = _

"=INDEX(Produit!R[-18]C[-9]:R[181]C[4],MATCH(R15C1,Produit!R[-18]C[-9]:R[181]C[-9],0),3)"

Avec une variable, ça donne :

Range("J21").Select

ActiveCell.FormulaR1C1 = _

"=INDEX(Produit!R[-18]C[-9]:R[181]C[4],MATCH(R" & NumeroLigneEffacer & "C1,Produit!R[-18]C[-9]:R[181]C[-9],0),3)"

C'est un peu plus clair ? Ça fait peut-être beaucoup d'infos à emmagasiner en même temps mais ça devrait te permettre de mieux cerner le problème.

Ok je comprend, j'ai bien su restransmettre tout ca dans mon classeur.

Par contre, pour des soucis de visibilité, ma colonne Reference produit est mise en format TEXTE pour faire apparaitre les 0 quand la reference est par exemple 08008 tout fonctionne avec ce type de reference mais quand la reference comment par un chiffre < 0 ma formule de recherche ne fonctionne pas. Je suposse que c'est lier a la declaration des variables aussi bien dans excel que dans mon code vba. J'ai essayé de mettre tout au format NOMBRE et STANDART mais rien ni fais mon systeme ne fonctionne a moitier uniquement pour les references commencant par 0. Dans le pire des cas, je reference tous mes produit par 0 pas de soucis mais j'aimerais comprendre

Je continue a creusé, Si vous avez une idée...

-- 19 Juin 2011, 12:17 --

apres verification tout marche si je met 0 devant mes references produits, ce ne gene pas, dans le Userform de l'ajour de produit, j'ai rajouter un petit code pour ajouter la 0 devant le reference du produit

Rechercher des sujets similaires à "formule vba"