Formule Excel via code VBA

Bonjour à tous,

Je me tourne vers vous car étant novice en VBA j'aimerai utiliser une formule excel que je dois appliquer à 50 feuilles par une macro. Ma formule excel est la suivante (les #REF étant définies dans mon fichier) :

=SOMMEPROD((#REF!=$B$8)*ESTNUM(CHERCHE(#REF!;B60));#REF!)

Après avoir regardé sur plusieurs forums je commence par :

Private Sub calcul(ByVal Target As Range)

Range("J6").Formula = SOMMEPROD((#REF!=$B$8)*ESTNUM(CHERCHE(#REF!;B60));#REF!)

End Sub

Ce code ne fonctionnant pas et me creusant la tete depuis un bout de temps je me tourne vers vous.

Merci d'avance !

Théo

bonjour Theo19,

Pour faire simple

1) Sélectionnes ta cellule avec la formule

2) Cliques sur Enregistrer une macro

3) Pas besoin de lui donner un nom et Cliques sur OK

4) Maintenant que tu est en mode enregistement de la macro, sélectionne la formule dans la barre de formule

5) Effectues une CTRL + C (ou copier) et un CTRL + V (ou coller)

6) Valides la formule

7) Arrêtes l'enregistrement de la macro

8) Ouvres la Macro

Donc maintenant tu as le résultat de la formule liée à la cellule active donc maintenant tu n'as plus qu'à programmer du genre

Formule : =SOMME(A1;A2)

Dans toutes les cellules B2 de toutes les feuilles du classeur

Sub INSERER_FORMULE()
Dim k As Integer, i As Integer
k = Sheets.Count

For i = 1 To k
    Sheets(i).Activate
    Range("b2").FormulaR1C1 = "=SUM(R[-1]C[-1],RC[-1])"
    '.....Macro....
Next i
End Sub
macro

Bonjour,

Il faut mettre une formule sans #REF! sinon tu seras obligé de les reprendre toutes une par une.

Tu ne précises pas les plages ni les feuilles sur lesquelles appliquer cette formule.

Et j'ai l'impression qu'un somme.si() serait suffisant, bien moins gourmand en ressource qu'un sommeprod()

Un classeur de travail (avec la structure exacte) permettrait de comprendre ton besoin plus précisément.

eric

Merci de ton aide Eriiic ! Effectivement j'ai ça comme résultat :

Application.Left = 91.75
    Application.Top = 202.75
    ActiveCell.FormulaR1C1 = _
        "=SUMPRODUCT((#REF!=R8C2)*ISNUMBER(SEARCH(#REF!,R[-10]C)),#REF!)"

Les lignes commencant par "Application" sont elles vraiment nécessaires ?

Il y a certaines feuilles de mon classeur (feuil1 et feuil2) qui ne sont pas concernées par cette formule, quel code VBA je dois utiliser pour les retirer de la macro ?

Encore merci pour ton aide

Les lignes commencant par "Application" sont elles vraiment nécessaires ?

non

Pour le reste tu n'as pas répondu aux questions ni déposé de classeur de travail.

eric

Voici un extrait du fichier :

J'ai 50 fiches au meme format à remplir avec la formule de la meme facon excepté les deux premières feuilles (feuil1 et feuil2) qui ne doivent pas être rempli car ceux sont des Résumés d'où mon interrogation sur le code à utiliser pour les omettre de cette formule

Les #REF correspondent à une plage de données dans un autre fichier Excel qui sont définies dans mon fichier source.

Ouais, j'ai bien fait d'insister pour avoir un fichier...

1) Je ne fais rien avec des #REF!

2) D'autre part tes formules semblent diverses et dispersées partout.

Le vba n'y a aucun intérêt, j'y passerai 3 fois plus de temps que toi à le faire directement.

En plus tu as mis des fusions de cellules totalement inutiles partout, ce qui est à fuir. C'est bloquant et toujours sources d'emm...

  • copie une de tes formule ou une plage complète, voire même toute la feuille
  • sélectionner la 1ère feuille à traiter
  • shift-clic dernière feuille à traiter (ça fait une sélection multiple)
(les feuilles exclues doivent être en dehors de ces 2 là)
  • clic-droit sur la cellule recevant la 1ère formule
  • coller
Voilà, tes 50 feuilles sont faites.

Ne pas oublier de cliquer sur une feuille seule pour casser la sélection multiple sinon toutes tes saisies se reporteront sur toutes les feuilles.

eric

Ok merci pour la manip, ca a marché

Rechercher des sujets similaires à "formule via code vba"