Compter occurence dans range contenant du texte / des chiffres

zebanx

XLDnaute Accro
Bonjour à tous,

Je cherche à obtenir des totaux de colonnes compilant soit du texte (initiales) soit des chiffres ?

Pour les "string", la séparation ne se fait que par un " ". S'il n'y en n'a pas, cela correspondrait à une seule personne.
Ci-joint quelques exemples plus clairs sur 3 configurations.

Merci pour votre aide et bonne journée
zebanx
 

Pièces jointes

  • Dde_chaine de caractères_occurences.xls
    18 KB · Affichages: 22

vgendron

XLDnaute Barbatruc
après avoir fait briller ma boule de cristal :-D
une fonction personnalisée
VB:
Public Function compter(zone As Range) As Integer
Application.Volatile

For Each ele In zone
    tablo = Split(ele, " ")
    For i = LBound(tablo) To UBound(tablo)
        If IsNumeric(tablo(i)) Then
            comp = comp + (tablo(i))
        Else
            comp = comp + 1
        End If
    Next i
Next ele
  compter = comp
End Function
 

zebanx

XLDnaute Accro
Bonjour Benoit59 et Vgendron

Super solutions qui fonctionnement parfaitement dans les trois configurations (uniquement du texte, texte + chiffres séparés par un " " à chaque fois, texte séparé par un espace + chiffres).
Et je suis content d'avoir une double solution matricielle + UDF.

Un grand merci à tous les deux , je vais pouvoir finaliser un travail urgent ;)

++
zebanx
 

vgendron

XLDnaute Barbatruc
manque un cint()
VB:
Public Function compter(zone As Range) As Integer
Application.Volatile

For Each ele In zone
    tablo = Split(ele, " ")
    For i = LBound(tablo) To UBound(tablo)
        If IsNumeric(tablo(i)) Then
            comp = comp + CInt(tablo(i))
        Else
            comp = comp + 1
        End If
    Next i
Next ele
  compter = comp
End Function
 

vgendron

XLDnaute Barbatruc
une remarque que je me fais en passant..
ce qui me sidère. c'est que la fonction "Isnumeric" est capable de dire s'il s'agit d'un nombre ou pas. et pourant.. il faut passer par un CINT pour en faire la somme...
franchement. des fois. on se demande...
 

thebenoit59

XLDnaute Accro
une remarque que je me fais en passant..
ce qui me sidère. c'est que la fonction "Isnumeric" est capable de dire s'il s'agit d'un nombre ou pas. et pourant.. il faut passer par un CINT pour en faire la somme...
franchement. des fois. on se demande...

Le tableau est considéré comme Variant/String, donc il réagis comme un string lors de l'addition.
 

zebanx

XLDnaute Accro
Merci à tous les deux pour vos réponses et les échanges constructifs (oui Benoist, le code modifié Val(tablo(i)) fonctionne bien). J'ai pu finaliser le fichier demandé grâce à vous avec deux méthodes à conserver pour une prochaine et très certaine utilisation.;)

Bonne soirée et bon we
zebanx
 

job75

XLDnaute Barbatruc
Bonsoir zebanx, vgendron, thebenoit59,

Il ne faut pas utiliser Application.volatile à tout bout de champ.

Ici cette instruction est tout à fait inutile et peut même être nuisible !

Toute modification d'une cellule de zone entraîne forcément le recalcul de la fonction.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 114
Membres
103 121
dernier inscrit
SophieS