Microsoft 365 formule Compteur qui s'incrémente au lancement de Macro

looky62

XLDnaute Occasionnel
Hello la Teams,

Qd je lance ma macro, j'ai un compteur de colonne qui change hors Macro cad sur une colonne j'ai :

= NB.SI(Source!G:G;"O") il se décale d'une colonne et passe en = NB.SI(Source!H:H;"O") et à chaque fois que je relance la macro ça s'incrémente

Quel est la parade, meme avec des $ ça ne marche pas

Merci de votre éclairage
 
Solution
Bonjour,

L'erreur vient du fait que le retour doit se faire avec le nom de la fonction.
Donc ici, cela aurait du être "Compter2=..." et non "Compter=..."
1667818417576.png

Pour rendre l'exécution automatique comme n'importe quelle fonction XL, il faut rajouter Application.volatile au début.

Voir PJ.
J'ai renommé les fonctions pour être plus "explicite"

VB:
Function CompterOui()
    Application.Volatile
    CompterOui = Application.CountIf(Sheets("Source").Range("G:G"), "O")
End Function
Function CompterNon()
    Application.Volatile
    CompterNon = Application.CountIf(Sheets("Source").Range("G:G"), "N")
End Function

looky62

XLDnaute Occasionnel
Bonjour looky62 @sylvanu 😉

Sans passer par VBA et si j'ai bien compris
VB:
= NB.SI(INDIRECT("Source!G:G");"O")

A+
Hello BrunoM45

super oui c mieux ss vba pr moi, par contre qd je fais sur un NB SI ça va , par contre sur un NB VAL il me compte toute mes ligne!!

=NBVAL(INDIRECT(Source!A:A)-1) là il me compte tt le tableau!!
Alors =NBVAL(Source!A:A)-1) et là me compte bien , mais s'incrémente!!
 

looky62

XLDnaute Occasionnel
Bonjour,
Il vous manque des guillemets :
VB:
=NBVAL(INDIRECT("Source!A:A")-1)
Le but est d'avoir la plage en tant que chaine de caractères, donc XL n'y touche pas quand vous insérez une colonne.


Par curiosité, pourquoi ?
Si vous avez déjà du VBA, c'était une solution qui me paraissait simple.
ben je galere un peu en VBA, j'ai mis un onglet en cpt où je fais mes calculs mais ça bug, ensuite j'avais fait une macro 4 pr la mise en forme de mes compteurs, si tu peux me montrer avec la fonction compte() au moins je saurai pr la prochaine fois !
Merci encore pr ton aide précieuse , je monte en compétence grace a vous !
 

Pièces jointes

  • TEST MACRO VG-3(1).xlsm
    114.1 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
J'ai mis ces deux fonctions perso dans CPT, ne sachant exactement où mettre les formules.
Avec ces deux fonctions perso que j'ai mis dans le module Fonctions :
VB:
Function Compter()
    Compter = Application.CountIf(Range("G:G"), "O")
End Function
Function NBVALcolA()
    NBVALcolA = Application.CountA(Range("A:A"))
End Function

Un petit tuto sur les fonctions perso :
 

Pièces jointes

  • TEST MACRO VG-3(1).xlsm
    119.5 KB · Affichages: 8

looky62

XLDnaute Occasionnel
Bonsoir,
J'ai mis ces deux fonctions perso dans CPT, ne sachant exactement où mettre les formules.
Avec ces deux fonctions perso que j'ai mis dans le module Fonctions :
VB:
Function Compter()
    Compter = Application.CountIf(Range("G:G"), "O")
End Function
Function NBVALcolA()
    NBVALcolA = Application.CountA(Range("A:A"))
End Function

Un petit tuto sur les fonctions perso :
Merci par contre si je veux mettre ma fonction dans un onglet compteur, afin de faire mes calculs et les reporter vers un autre onglet c sous quel forme que je cherche par exemple ici Source

Function Compter()
Compter = Application.CountIf(Range("Source""G:G"), "O")

End Function
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Non, vous faites comme en VBA :
VB:
Function Compter()
    Compter = Application.CountIf(Sheets("Source").Range("G:G"), "O")
End Function

Une variante est de passer la plage en paramètre avec :
Code:
Function Compter(Plage)
    Compter = Application.CountIf(Plage, "O")
End Function
Et dans la feuille XL, la syntaxe devient :
=Compter(Source!G:G)
 

looky62

XLDnaute Occasionnel
Bonsoir,
Non, vous faites comme en VBA :
VB:
Function Compter()
    Compter = Application.CountIf(Sheets("Source").Range("G:G"), "O")
End Function

Une variante est de passer la plage en paramètre avec :
Code:
Function Compter(Plage)
    Compter = Application.CountIf(Plage, "O")
End Function
Et dans la feuille XL, la syntaxe devient :
=Compter(Source!G:G)
Super merci je teste ça lundi , merci encore pr cette montée en compétence
 

looky62

XLDnaute Occasionnel
Super merci je teste ça lundi , merci encore pr cette montée en compétencE


Je patauge un peu ds les fonctions, j'ai sous l'onglet CPT l'exemple que je souhaite mettre en place, par contre est ce la fonction se lance uniquement qd on l'appel comme une macro ou est ce automatique ? jsp etre claire
 

Pièces jointes

  • TEST MACRO VG-3(1)(1).xlsm
    118.8 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,

L'erreur vient du fait que le retour doit se faire avec le nom de la fonction.
Donc ici, cela aurait du être "Compter2=..." et non "Compter=..."
1667818417576.png

Pour rendre l'exécution automatique comme n'importe quelle fonction XL, il faut rajouter Application.volatile au début.

Voir PJ.
J'ai renommé les fonctions pour être plus "explicite"

VB:
Function CompterOui()
    Application.Volatile
    CompterOui = Application.CountIf(Sheets("Source").Range("G:G"), "O")
End Function
Function CompterNon()
    Application.Volatile
    CompterNon = Application.CountIf(Sheets("Source").Range("G:G"), "N")
End Function
 

Pièces jointes

  • TEST MACRO VG-3(1)(1).xlsm
    124.4 KB · Affichages: 5

looky62

XLDnaute Occasionnel
Merci j'ai bien compris la function,

En assimilant le meme principe pour coimpter le nombre total de valeur!! je ne vois pas l'erreur

Function NBVALcolA()
Application.Volatile
NBVALcolA = Application.CountA(Sheets("Source").Range("A:A"))
End Function

syntaxe =@NBVALcolA
 

Statistiques des forums

Discussions
312 211
Messages
2 086 293
Membres
103 171
dernier inscrit
clemm