Lien entre occurrence et incrémentation

Bonjour

Alors voila je cherche à faire un tableau qui va compter l'occupation d'une personne donc 25%,50%,75%,100%,...

Sauf que c'est sous la forme d'une chaîne de caractère donc j'ai pensé à utiliser l'occurrence pour compter mais je n'arrive pas à le relier à l'incrémentation.

Par Exemple si dans une colonnes j'ai 3 cellules à 25% je veux donc que le résultat soit 75 et non 3 obtenues par l'occurrence

Donc que à la première occurrence=25, qu'à la seconde =50, qu'à la troisième =75, ect

De même si j'ai 50% et 25% dans une colonnes je veux que le résultat soit 75%.

J'avais eu l'idée d'utiliser SI et NB. SI mais cela fait trop de combinaison possible donc si vous avez des idée je suis preneur.

Merci par avance

Bonjour,

Il existe des formules adaptées : SOMME.SI, SOMME.SI.ENS, NB.SI, NB.SI.ENS, voire un tableau croisé dynamique (TCD).

Merci de joindre un fichier pour illustrer votre demande, afin de faire des propositions plus précises...

Voila un document pour illustrer mais mon plus gros problème c'est que je dois le faire avec une chaîne de caractère AA[X] par exemple

17exemple.xlsx (8.96 Ko)

Comme quoi un bon fichier vaut parfois toutes les explications !

Si la structure du fichier est modifiable, c'est surtout la priorité pour adopter quelque chose de plus conventionnel et moins pénible à exploiter...

En attendant, une fonction personnalisée :

Public Function SommeConditionnelle(PlageSomme As Range, ChaineCaract As String) As Single

Dim Cel As Range, Res As Single

For Each Cel In PlageSomme
    If Cel.Value Like "*" & ChaineCaract & "*" Then
        Res = Res + Replace(Replace(Mid(Cel.Value, InStr(Cel.Value, ChaineCaract & "[") + Len(ChaineCaract) + 1, 3), "]", ""), ";", "")
    End If
Next Cel
SommeConditionnelle = Res

End Function

A utiliser ensuite de manière classique :

=SommeConditionnelle($B$2:$B$11;A14)

Votre fichier modifié :

11exemple.xlsm (15.57 Ko)

Oh merci beaucoup je savais pas qu'avec un scrip c'était plus facile. Merci encore

Tu pourrais m'expliquer la boucle For?

Version commentée :

Public Function SommeConditionnelle(PlageSomme As Range, ChaineCaract As String) As Single

'Déclaration des variables
Dim Cel As Range, Res As Single

For Each Cel In PlageSomme 'Boucle sur chaque cellule de la plage
    If Cel.Value Like "*" & ChaineCaract & "*" Then 'Si la cellule contient les caractères recherchés, alors...
        'On incrémente la variable "Res" avec la valeur entre crochets
        Res = Res + Replace(Replace(Mid(Cel.Value, InStr(Cel.Value, ChaineCaract & "[") + Len(ChaineCaract) + 1, 3), "]", ""), ";", "")
    End If
Next Cel 'Cellule suivante
SommeConditionnelle = Res 'Résultat de la fonction

End Function

Remarques :

  • Replace() est l'équivalent VBA de la fonction SUBSTITUE(). Ici utilisée pour supprimer les éventuels caractères "]" et ";" si le nombre entre crochets comporte 1 ou 2 chiffres
  • Mid() : équivalent VBA de STXT(), utilisé pour extraire des caractères dans le milieu d'une chaîne (ici la valeur entre crochets)
  • InStr() : similaire aux fonction CHERCHE() et TROUVE(). Permet de déterminer la position d'un caractère ou suite de caractères dans une chaîne. Ici le nom de la personne suivi du crochet ouvrant.
  • Len() : équivalent de NBCAR(), pour compter le nombre de caractères d'une chaine. Permet ici de déterminer la position du nombre entre crochet, en faisant : position du nom + nombre de caractères du nom + 1

Encore merci j'ai tout compris

Encore merci j'ai tout compris

Merci du retour, pense à valider le sujet !

bonjour

sans Vba

15kotencs.xlsx (9.09 Ko)

matricielle

cordialement

Merci beaucoup pour cette solution alternative

Rechercher des sujets similaires à "lien entre occurrence incrementation"