Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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

et comme ça ?
Code:
Function Compte(Colonne)
    Application.Volatile
    With Application.Caller.Worksheet
        For n = 1 To 123
            If InStr(.Cells(n, Colonne), "R/") <> 0 Then cpte = cpte + 1
        Next
    End With
    Compte = cpte
End Function
eric
 
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,


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
538
Réponses
12
Affichages
938
Compte Supprimé 979
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…