Traduction formule en VBA

  • Initiateur de la discussion Initiateur de la discussion eduraiss
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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

Dernière édition:
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:
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 !
 
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:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
480
Réponses
12
Affichages
918
Compte Supprimé 979
C
Retour