Traduction formule en VBA

eduraiss

XLDnaute Accro
Bonjour le forum

Voici un formule que je voudrais mettre dans un code VBA qui alimenterait la cellule X6

SOMMEPROD((ESTNUM(TROUVE("R/";$C$4:$C$11)))*1)+SOMMEPROD((ESTNUM(TROUVE("R/";$C$14:$C$34)))*1)+SOMMEPROD((ESTNUM(TROUVE("R/";$C$35:$C$36)))*1)+SOMMEPROD((ESTNUM(TROUVE("R/";$C$65:$C$95)))*1)+SOMMEPROD((ESTNUM(TROUVE("R/";$C$98:$C$123)))*1)

Merci de votre aide

Cordialement
 

eduraiss

XLDnaute Accro
Bonjour Roland_M

En effet cela fait longtemps:)
Merci pour cette réponse mais cela ne fonctionne pas

Je joins un fichier
Il faudrait que sur chaque feuille cela compte le nombre de R/ en colonne 3,5,7

Merci
 

Pièces jointes

  • ERIC1.xls
    136 KB · Affichages: 48

eduraiss

XLDnaute Accro
re
Si c'est cela les feuilles sont copiés a l'identique donc le codes est sur chaque feuilles
Si je rajoute un R/H en colonne (7) sur la feuille du lundi, le compteur en tient compte sur toute les feuilles (mardi et mercredi)

C'est cela qui ne vas pas
 

Roland_M

XLDnaute Barbatruc
re

il y a un code feuille à chacune pour mise à jour auto quand on modif dans une des 3 colonnes !
tu peux les supprimer mais il ne faudra pas oublier de cliquer sur le bouton calcul !

salut à toi Eric ! excellent je n'y aurai pas pensé ! mais c'est bien sûr avec> Application.Caller.Worksheet
comme quoi ce forum est formidable pour l'enrichissement de la communauté !

EDIT !!! @Eriiic et aussi Eduraiss
par contre Eriiic il y a un inconvénient de taille avec Application.Caller.Worksheet !
en mettant un msgbox je me suis aperçu qu'à chaque modif la macro s'exécutait dans toutes les feuilles !?
avec beaucoup de feuilles ça va poser problème !

RE-EDIT: décidément voilà qui n'est pas mal du tout avec formule ! merci à toi Laurent !
du coup pour notre ami je me suis permis de mettre tes formules ! il choisira !?


RE-EDIT: une autre formule un peu plus simple
=NB.SI($C$4:$C$11;"R/*")+NB.SI($C$14:$C$34;"R/*")+NB.SI($C$37:$C$61;"R/*")+NB.SI($C$65:$C$95;"R/*")+NB.SI($C$98:$C$123;"R/*")

@eduraiss et celle-ci, vu que l'on bouclait sur toute la hauteur ceci suffit !
(quand j'y pense tout ça pour une simple formule ! mais on était parti sur du vba alors . . .)
dans X6 =NB.SI($C$4:$C$123;"R/*")
dans X8 =NB.SI($E$4:$E$123;"R/*")
dans X10=NB.SI($G$4:$G$123;"R/*")
 

Pièces jointes

  • ERIC EssaiRol1.xls
    131.5 KB · Affichages: 24
  • ERIC EssaiEriiic.xls
    131.5 KB · Affichages: 17
  • ERIC EssaiLaurent950.xls
    130.5 KB · Affichages: 20
  • ERIC EssaiRolFormul.xls
    125.5 KB · Affichages: 19
Dernière édition:

laurent950

XLDnaute Accro
Bonsoir pour les formulles via VBA pour :

Merci à vous Roland M :) vous avez bien fait, nous somme ici pour nous aider.

Range("X6") = _
"=SUMPRODUCT((ISNUMBER(FIND(""R/"",R4C3:R11C3)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R14C3:R34C3)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R37C3:R61C3)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R65C3:R95C3)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R98C3:R123C3)))*1)"

Range("X8") = _
"=SUMPRODUCT((ISNUMBER(FIND(""R/"",R4C5:R11C5)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R14C5:R34C5)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R[29]C5:R61C5)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R65C5:R95C5)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R98C5:R123C5)))*1)"

Range("X10") = _
"=SUMPRODUCT((ISNUMBER(FIND(""R/"",R4C7:R11C7)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R14C7:R34C7)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R37C7:R61C7)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R65C7:R95C7)))*1)+SUMPRODUCT((ISNUMBER(FIND(""R/"",R98C7:R123C7)))*1)"


Laurent
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
re

ok !
mais la petite formule aurait été préférable !
dans X6 =NB.SI($C$4:$C$123;"R/*")
dans X8 =NB.SI($E$4:$E$123;"R/*")
dans X10=NB.SI($G$4:$G$123;"R/*")
fiable, simplissime, plus léger car sans code feuille ni module, et recopiable sans problème !
c'est comme tu veux !
 

eriiic

XLDnaute Barbatruc
Bonjour,

par contre Eriiic il y a un inconvénient de taille avec Application.Caller.Worksheet !
en mettant un msgbox je me suis aperçu qu'à chaque modif la macro s'exécutait dans toutes les feuilles !?
avec beaucoup de feuilles ça va poser problème !

C'est normal, c'est le rôle de Application.Volatile. Je suis parti de ce qui avait été déposé sans trop réfléchir, ayant eu l'attention attirée par le problème de feuille.

En fait il faut simplement passer à la fonction la plage à surveiller :
VB:
Function Compte(plage As Range) As Double
    Dim c As Range
    For Each c In plage
        If Left(c, 2) = "R/" Then Compte = Compte + 1
    Next c
End Function
Sur feuille :
Code:
=compte(C4:C123)
saisir la plage manuellement, les fusions de cellules gênent à la souris.
eric

Edit : mais NB.SI($C$4:$C$123;"R/*") est mieux à mon avis. Tant qu'à faire autant se passer de vba. :)
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Une fonction non volatile est ré-évaluée uniquement que si un des paramètres change, aucune raison de la recalculer sinon.
Si elle est volatile elle est ré-évaluée à chaque Calculate (et avant lui, ça peut avoir son importance), donc à chaque saisie.
A n'utiliser que si elle dépend d'un changement ne générant aucun événement. Cas le plus classique : un changement de couleur.

La majorité des fonctions natives d'excel sont non-volatiles. Pour t'aider à comprendre, par exemple Alea() et Aujourdhui() le sont pour des raisons évidentes.
eric
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 146
Membres
103 130
dernier inscrit
FRCRUNGR