Calcul d'une formule avec VBA Excel

J'espère être sur le bon site pour poser ma question.

Bonjour à tous, j'ai une appliacation EXCEL avec une page Resultats et plusieurs pages de données. Ces pages de données sont créés a partir de VBA. Seulement sur chacune de ces pages de données, je dois calculer une formule et le résulat sera recopié dans Resultats. La formule est la suivante :

ActiveCell.FormulaR1C1 = _

"=VLOOKUP(R[-6]C[-20],INDIRECT(CONCATENATE("""",R[-6]C[-19],""!"",""$A$6:$U$100"")),21)"

Si quelqu'un si connaît je serais contente d'être aidée puisque le résultat de cette formule est #REF!.

Merci d'avance

Bonjour

Sans rien connaître à VBA, il me semble que ta fonction indirect a comme argument un champ de cellule et je pensais qu'indirect ne s'adressait qu'à une cellule.

Mais, peut-être suis-je dans l'erreur...

Cordialement,

Amadéus

Merci beaucoup je vais regarder si l'erreur ne viendrait pas de la. C'est mon superieur qui faisai les calculs à la main avant et ça fonctionnait avec cette même formule. Bizarre que en VBA ça ne fonctionne pas, je vais quand même chercher du côté de la syntaxe. Merci Amadeus

Bonjour

Regarde ce code

B1 = "Adresse de la cellule contenant la valeur à cherchée
A1 = "Adresse de la cellule contenant le nom de la feuille"
Range("A2").Formula = "=VLOOKUP(" + B1 + "," + A1 + "!$A$6:$U$100,21)"
Range("A3") = Application.Evaluate("=VLOOKUP(" + B1 + "," + A1 + "!$A$6:$U$100,21)")Range("A4").FormulaLocal = "=RECHERCHEV(" + B1 + ";" + A1 + "!$A$6:$U$100;21)"
Range("A5") = Application.VLookup(B1, Sheets(A1).Range("A6:U100"), 21)
Range("A6") = Application.VLookup(B1, Range(A1 + "!A6:U100"), 21)

La première formule écrit une formule dans la cellule, et Excel retourne le résultat, à chaque fois que le classeur est recalculé, la formule sera recalculé, elle est sous forme anglaise.

La deuxième, c'est VBA qui par l'intermédiaire d'Excel, va retourner la valeur dans la cellule, la cellule ne contient pas de formule.

La troisième, même fonctionnalité que la première, sauf, qu'elle est écrit en français, le code ne fonctionnera que sur des versions françaises d'office. Attention, ici le séparateur d'argument, n'est pas la virgule, mais le point-virgule.

La quatrième, c'est VBA qui va calculer la valeur, et la retourne dans la cellule.

La cinquième est une variante, dans la définition de la feuille dans l'objet range

Voilà tu as le choix, il est préférable d'utiliser la déclaration A1 plutôt que R[]C[], je voulais aussi apporté ton attention, sur la non utilisation du 4ième argument optionnel de la fonction RECHERCHEV ou H, elle définit le mode de recherche exact ou valeur la plus proche, regarde l'aide en ligne.

Amadéus, INDIRECT permet aussi la définition d'une plage de cellule, mais elle ne permet pas de définir une plage multi-feuilles, style =Feuil2:Feuil3!B8:B50

@+Jean-Marie

Merci beaucoup Jean Marie, je vais être embétante mais peux tu me donner ma formule complète packe j'ai essayé mais jme suis mélangée les pinceaux. en tout cas ta réponse m'a déjà énormément éclairée. encore merci.

Re...

Indique moi celle que tu veux, après on verra.

@+Jean-Marie

Par rapport à celle là :

ActiveCell.FormulaR1C1 = _

"=VLOOKUP(R[-6]C[-20],INDIRECT(CONCATENATE("""",R[-6]C[-19],""!"",""$A$6:$U$100"")),21)"

Moi j'ai fais

Range("A5") = Application.VLookup(B1,Indirect(concatener("",A1,"!"," Sheets(Results).Range("A6:U100"), 21)

Mais ça ne fonctionne pas. Il me met toujours #REF!.

P.S. Je me suis resservie de l'avant dernière formule. Merci.

RE...

Tu as pas besoin de la function de concaténation, ni de la fonction d'indirect.

Range("A5") = Application.VLookup(Range("B1"),Range("'"+Range("A1")+"'!A6:U100"), 21)

Range("B1") prend la valeur à chercher de la cellule B1 de la feuille active

Range("A1") prend le nom de la feuille qui se trouve dans la cellule A1 de la feuille active

Dis-moi si tu as réussi.

@+Jean-Marie

PS

Bonjour Jean Marie, j'ai le message d'erreur suivant :

La méthode range de l'objet global a échoué

Je vais cherché de mon côté mais si tu passes par là tu aide serais la bienvenue.

MERCI

Bonsoir

Je viens de tester

Range("A5") = Application.VLookup(Range("B1"), Range("'" + Range("A1") + "'!A6:U100"), 21)

@+Jean-Marie

Bonjour, merci j'ai fais un copier coller de ton code mais ça ne fonctionne. J'ai la même erreur que précédemment.

Bonjour

Ta valeur à chercher existe-t-elle dans la plage de recherche.

Transmet ton fichier...

@+Jean-Marie

Bonjour, oki j'ai voulu te joindre mon fichier. mais il est trop lours. Comment puis-je faire?

P.S. C'était l'entreprise qui m'avait fourni la formule donc je ne pens pas qu'elle se soit planté.

Merci

Bonjour

Contacte moi en privé pour que je puisse te passer mon adresse email, si tu désires m'envoyer ton fichier.

@+Jean-Marie

Rechercher des sujets similaires à "calcul formule vba"