Nombre cellules consécutives
Résolu
nanie
-
ccm81 Messages postés 11033 Statut Membre -
ccm81 Messages postés 11033 Statut Membre -
Bonjour,
Mon problème:
< ou = à 3 cellules consécutives ayant la même valeur, je compte.
> 3 cellules consécutives ayant la même valeur, je ne compte pas.
Exemple:
C C C P P C C P C P Résultat attendu = 6 (période de 3 C comptée, période de 2 C comptée, période d'1 C comptée)
C C C C P C C C C C Résultat attendu = 0 (période de 4 C non comptée, période de 5 C non comptée)
C P P C C C C P C C Résultat attendu = 3 (période de 1 C comptée, période de 4 C non comptée, période de 2 C comptée)
Merci pour vos très généreuses astuces !
Mon problème:
< ou = à 3 cellules consécutives ayant la même valeur, je compte.
> 3 cellules consécutives ayant la même valeur, je ne compte pas.
Exemple:
C C C P P C C P C P Résultat attendu = 6 (période de 3 C comptée, période de 2 C comptée, période d'1 C comptée)
C C C C P C C C C C Résultat attendu = 0 (période de 4 C non comptée, période de 5 C non comptée)
C P P C C C C P C C Résultat attendu = 3 (période de 1 C comptée, période de 4 C non comptée, période de 2 C comptée)
Merci pour vos très généreuses astuces !
10 réponses
-
Bonjour
une piste :
Si par ex plage de CCCPP etc en B1:M1
En B2 mettre la formule =SI(B1=A1;A2&B1;B1) et l'étirer jusqu'à la fin de la plage
(ça regroupe les C)
En B3 mettre : =SI(OU(C2="P";C2="");B2;"") et étirer
(ne retient que les groupes avant P ou vide )
En B4 mettre =NB.SI(B3:P3;"C")+NB.SI(B3:P3;"CC")*2+NB.SI(B3:P3;"CCC")*3
(comptabilise les groupes de 1 à 3 C)
Cordialement-
-
En une seule formule non
mais en une ligne oui
1° LAISSER N1 vide (sert à determiner que la cellule précédente contient la dernière donnée)
2° en O1 mettre =SI(B1="C";NBCAR(SI(OU(C1="P";C1="");SI(B1=A1;A2&B1;B1);""));0)
3°Etirer jusqu'en Z1
4°En AA mettre =SOMME.SI(O1:Z1;"<4";O1:Z1) qui comptabilise les bons C -
-
-
Bonjour à tous
Si les macros ne te font pas peur, on peut passer avec une seule formule
https://www.cjoint.com/?3BbkcSgPrmc
Alt-F11 pour voir la macro
Dans ton classeur
Alt-F11 pour passer dans l'editeur VBA
Insertion/Module
Copier le tout
Bonne suite -
Je suis favorable à la macro (éviter que les utilisateurs ne touchent aux formules et éviter de créer encore plus de lignes ou colonnes qu'il n'y a déjà dans mon tableur), mais elle ne fonctionne pas... Pour info:
- Ma 1ère cellule qui peut contenir un P est en Q15
- J'ai enregistré la macro dans une feuille 'Module 2' car j'ai déjà une fonction 'explicit' dans la feuille 'Module 1' (si j'enregistre la macro dans le 'module 1' à la suite de l'autre macro 'explicit', la macro 'bugue')
Encore MERCI! -
Bon tout fonctionne, il ne s'agissait que d'un problème de C au lieu de c :-)
Trop cool, merci à tous!! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Explicit n'est pas une macro mais une directive de compilation qui oblige à déclarer les variables, donc s'il y a deux Option Explicit, tu en supprimes une
pour les problèmes de majuscule/minuscule tu as la fonction Ucase
bonne suite -
Autre "problème" sur un compteur de cellules...
si la dernière cellule est un H, je souhaite compter ce H + le nombre de H qui précèdent:
P P P H H H H H H H H P P P P Résultat attendu = 0 (dernière cellule ? H)
P P P C C P H H H P P C H H H Résultat attendu = 3 (dernière cellule = H + 2 H qui précèdent)
H P H P H C H H H H H H H H H Résultat attendu = 9 (dernière cellule = H + 8 H qui précèdent)
Merci :-) -
Bonjour
Une solution
Public Function CompteDer(c As String, plage As Range) As Long Dim ch As String, nbc As Long, cel As Range ch = "" For Each cel In plage ch = ch & cel.Value Next cel If Right(ch, 1) <> c Then CompteDer = 0 Else nbc = 0 While Right(ch, 1) = c nbc = nbc + 1 ch = Left(ch, Len(ch) - 1) Wend CompteDer = nbc End If End Function
RQ. on doit pouvoir se passer de macro...
Bonne suite -
Tu es beaucoup trop fort ! C'est un vrai plaisir que d'avoir aussi vite des solutions quand on est bloqués...
Encore MERCI ccm81 -
C'est remoi :)
Est-ce que à la fonction 'compteder' ci-dessous il est possible d'ajouter la condition 'si cellule = F ou X continuer le compteur' ?
Pour l'exemple :
P P P H H H F H H H H P P P P Résultat attendu = 0 (dernière cellule diff de H)
P P P C C P H H H P F F H H H Résultat attendu = 3 (dernière cellule = H + 2 H qui précèdent, 2 F avant mais un P)
H F H F X F H H H H X H H H H Résultat attendu = 10 (dernière cellule = H + 3 H qui précèdent, 1 X à ne pas comtper, 4 H, F et X à ne pas comtper, 1 H à compter, 1 F à ne pas comtper, 1 H)
(pour résumer, faire abstraction des F et des X)
Public Function CompteDer(c As String, plage As Range) As Long
Dim ch As String, nbc As Long, cel As Range
ch = ""
For Each cel In plage
ch = ch & cel.Value
Next cel
If Right(ch, 1) <> c Then
CompteDer = 0
Else
nbc = 0
While Right(ch, 1) = c
nbc = nbc + 1
ch = Left(ch, Len(ch) - 1)
Wend
CompteDer = nbc
End If
End Function -
Une solution à tester
Public Function CompteDerSauf(c As String, plage As Range, sauf As String) As Long Dim ch As String, nbc As Long, cel As Range, s As String, k As Long ch = "" For Each cel In plage ch = ch & cel.Value Next cel ' supprimer tous les caractères de s dans ch If sauf <> "" Then For k = 1 To Len(sauf) ch = Replace(ch, Mid(sauf, k, 1), "") Next k End If If Right(ch, 1) <> c Then CompteDerSauf = 0 Else nbc = 0 While Right(ch, 1) = c nbc = nbc + 1 ch = Left(ch, Len(ch) - 1) Wend CompteDerSauf = nbc End If End Function
Appel =comptedersauf("H";A35:O35;"FX")
bonne suite