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

XL 2019 Countifs si les 4 premières lettres = "Toto"

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour,
Je ne comprends pas pourquoio cela ne marche pas.
Application.WorksheetFunction.CountIfs(Left(.Columns(1), 4), "Toto")
Un exemple :
TotoPlus 12
Tata 28
TotoMoins 6

Résultat attendu = 2
Bonne soirée
 

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour Phil69970,
J'ai suivi le lien proposé mais ne trouve pas de reference à un comptage dune chaine de caractère chiffrée.

L'exemple ci dessus est interessant mais reste en texte. Ca ne marche pas avec des nombres.
Peut etre faut il transformer la colonne de chiffre en texte en amont?
Merci
 

Gégé-45550

XLDnaute Accro
La formule suivante ne fonctione pas :
Application.WorksheetFunction.CountIfs(Feuil4.Columns(1), "2325760????") donne 0
Colonne 1 :
232576045
232576177
232576079
132576033
Bonjour,
Elle fonctionnera à condition de sélectionner tous les éléments de la colonne 1 et de changer leur format en "Texte".
Sinon, par défaut, Excel les considère comme des nombres et ça ne marche pas.
C'est ce que se tuent à essayer de vous expliquer tous les excellents contributeurs de ce post depuis le début !
 

ALS35

XLDnaute Occasionnel
Bonjour à tous,
La fonction NB.SI.ENS n'autorise pas les plages matricielles, si tu mets gauche(A1:A10). Si tu ne veux pas changer ta plage de nombre en texte comme déjà dit, il te faut passer par sommeprod, par exemple :
VB:
=SOMMEPROD(N(GAUCHE(A1:A10;3)="123"))
Cordialement
 

Phil69970

XLDnaute Barbatruc
Re

@carlos

Je te propose ce fichier tout fonctionne sans avoir besoin de mettre la colonne A au format texte
Ma macro force le format texte (en interne) pour fonctionner

Merci de ton retour
 

Pièces jointes

  • Nomdre de Toto V6.xlsm
    18.9 KB · Affichages: 5

jurassic pork

XLDnaute Occasionnel
Hello,
Pour le fun une fonction personnalisée à base d'expressions régulières à mettre dans un module VBA .
VB:
Public Function CompterVal(plage As Range, str, _
       Optional CaseSensitive As Boolean = False, _
       Optional Debut As Boolean = False, _
       Optional Fin As Boolean = False) As Integer
Dim data, Regex As Object, matches As Object
CompterVal = 0
data = "|" & Join(Application.Transpose(plage.Value), "|") & "|"
Set Regex = CreateObject("VBScript.RegExp")
Regex.Pattern = str
Regex.Global = True
Regex.IgnoreCase = Not CaseSensitive
If Debut Then Regex.Pattern = "\|" & str
If Fin Then Regex.Pattern = str & "\|"
Set matches = Regex.Execute(data)
CompterVal = matches.Count
Set matches = Nothing: Set Regex = Nothing
End Function
plage correspond à la plage sur laquelle s'effectue le comptage (doit être une seule colonne)
CaseSensitive permet de dire si le comptage est sensible à la casse. (optionnel)
Debut permet de dire si la valeur recherchée doit être au début des cellules. (optionnel)
Fin permet de dire si la valeur recherchée doit être à la fin des cellules. (optionnel)

A noter que l'on exécute le regex qu'une seule fois par formule et que toutes les données à traiter sont rapatriées en une seule instruction sans boucle.



Ami calmant, J.P
 

Discussions similaires

Réponses
2
Affichages
662
Réponses
5
Affichages
538
Réponses
7
Affichages
249
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…