TrouverMêmeValeursConsécutives

  • Initiateur de la discussion Initiateur de la discussion Moa
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

Moa

Guest
Salut à Toutes et tous !

Voilà, j'ai une série de valeurs, comprises entre 1 et 10, qui remplissent un tableau.

Chaque lignes du tableau comprend 15 cellules de A1 à O1.

Je désire par formule, en P1, comparer les valeurs de A1 à O1, et m'indiquer
Faux, si une même valeur est consécutive plus de trois fois dans ma ligne.

Exemple : 4, 4, 4, 3, 2, 2, 1, 5, 6, 6, 6, 6, 7, 7, 2.

On voit que de la cellule I1 à L1, j'ai 4 "6" consécutifs, et bien il faut que ma cellule P1, m'indique FAUX, sinon 1.

J'espère que mon exemple est clair, et merci beaucoup d'avance de votre aide.

@ +


Moa
 
je n'ai pas essayé par les fonctions intégrées d'Excel, mais voici une function VBA qui fait cela. Tu peux l'appeler directement dans une cellule, comme ceci :
=Valsuccessives(A1:O1;3)

elle te renvoie vrai ou faux

Function ValSuccessives(Plage As Range, NbValeurs As Byte)
Dim Cel As Range, Nb As Byte, Prec
Application.Volatile
'la plage couverte est soit une seule ligne,
'soit une seule colonne, sinon, on génère une valeur d'erreur
If Plage.Rows.Count > 1 And Plage.Columns.Count > 1 Then
ValSuc = CVErr(3)
Exit Function
End If

For Each Cel In Plage.Cells
If Cel.Value <> Prec Then Nb = 1 Else Nb = Nb + 1
Prec = Cel.Value
If Nb > NbValeurs Then
ValSuc = False
Exit Function
End If
Next Cel
ValSuc = True
End Function
 
Bonjour Moa, bonjour le forum.

Heureuse de vous retrouver toutes et tous.

Moa, sans macro, je pense que tu pourrais essayer une formule matricielle du style :

=si(FREQUENCE(A1:O1;P1😛8)>3;1).

Si besoin d'explications supplémentaires tu me demandes.

P.S. T'as regardé le match OM/P.S.G. of course... (je suis parisienne et... un petit peu chauvine, alors, comme Monaco, Lyon et Auxerre, je me réjouis du résultat, une fois n'est pas coutume, et toi?)

@+

C@thy
 
Bonjour,

Il y a peut-être plus court, mais le résultat est bon.
Formule non matricielle :
=SI(SOMMEPROD((A1:L1=B1:M1)*(B1:M1=C1:N1)*(C1:N1=D1:O1))>0;"FAUX";1)
Formule matricielle :
=SI(SOMME((A1:L1=B1:M1)*(B1:M1=C1:N1)*(C1:N1=D1:O1))>0;"FAUX";1)
 
je viens de m'apercevoir que, suite au renommage in extremis de ma macro, j'ai créé une condition d'erreur : vous devez donc remplacer tous les "ValSuc" par "ValSuccessives" dans cette macro
Et maintenant Moa tu as le choix : VBA ou Formules !
 
Salut et merci à tous !

Je vous donne une première réponse rapide, car je dois partir.

André : Non je ne me trompe pas dans ma question.Si j'ai une valeur par cellule de la plage A1 à O 1, j'ai bien en I1 un "6" de même qu'en J1,K11,L1

donc 4 consécutifs.

Cathy : En ce qui concerne ta formule, je n'arrive pas à l'adapter, et surtout je ne comprends pas le P1😛8, en effet, je ne vois pas le rapport avec ma ligne A1:O1.

Quand à la formule de Monique, avec "sommeprod", je suis en train de la tester et de la modifier, mais c'est assez coton.

Et pour répondre à Cathy, non non, Monique a raison, c'est bien supérieur à "0", car si je mets supérieur à "1", c'est pour "4" consécutifs, si je mets supèrieur à "2", c'est pour cinq consécutifs etc...

Ti : je n'ai pas encore testé ta macro, mais comme tu me connais, ma question réelle est beaucoup plus complexe que cela, et en fait ce que je vous ai demandé là, c'est juste une petite base.
Mais je la testerai et la garderai bien au chaud pour une autre utilité.

Merci beaucoup à tous, je vous tiendrai au courant.

@ +

Moa
 
Re bonjour,

Pour plus de 2 valeurs consécutives identiques, on décale de 2 colonnes :
=SI(SOMMEPROD((A1:M1=B1:N1)*(B1:N1=C1:O1))>0;"pas bon";1)
Pour plus de 4 valeurs consécutives identiques, on décale de 4 colonnes :
=SI(SOMMEPROD((A1:K1=B1:L1)*(B1:L1=C1:M1)*(C1:M1=D1:N1)*(D1:N1=E1:O1))>0;"pas bon";1)
Pour plus de 5 valeurs consécutives identiques, on décale de 5 colonnes :
=SI(SOMMEPROD((A1:J1=B1:K1)*(B1:K1=C1:L1)*(C1:L1=D1:M1)*(D1:M1=E1:N1)*(E1:N1=F1:O1))>0;"pas bon";1)
Etc...
 
Moa,

pour éclairer ta lanterne : en P1 à P8 j'ai les valeurs suivantes :

vide
1
2
3
4
5
6
7
et en Q2 la formule me donne le nombre de résultats < à1
en R2 compris entre 1 et 2 etc...
je savais bien que tu aurais besoin de + d'explications.

C@thy
 

Pièces jointes

Salut les filles et les mecs...!!

Bon voilà, j'ai travaillé sur les formules de Cathy et Monique.

En fait le but final, c'est d'avoir le choix du nombre de consécutifs maximum et le choix la valeur à tester.

Après de multiple essais, voilà où en j'en suis.

Pour commencé j'ai réduit ma plage de 15 à 13 et dans mon cas de C1 à O1

J'ai modifié la Formule de Monique :

SI(SOMMEPROD((A1:M1=B1:N1)*(B1:N1=C1:O1))>0;"pas bon";1)

SI(SOMMEPROD((C1:M1=D1:N1)*(D1:N1=E1:O1))>T2;"Faux";1)

En S2, j'ai une liste déroulante, qui me donne le choix du nombre de consécutifs max.

En T2 = S2-2 (du à l'écart "0" dans la formule autorise "2" consécutifs)

Cela fonctionne impec.

Mais il me manque une option, celle du choix de la valeur à tester....j'ai donc fait une liste déroulante en R2....mais pas moyen d'arriver à en faire référence dans la formule de Monique.

J'ai donc travaillé avec la formule de Cathy :

SI(FREQUENCE(A1:O1;P1😛8)<3;1)..modifiée comme suit :

SI(FREQUENCE(C1:O1;R2:R2)<S2;1)...En R2 = liste déroulante valeur à tester et S2 = liste déroulante du choix du max.

Mais cela ne marche pas, je ne sais pas pourquoi, pour certaines valeurs, les résultats sont faux.

J'y retourne, mais j'avoue que ce n'est pas simple.

Si les filles vous avez encore des idées éclairer ma lanterne, comme d'hab je suis preneur...héhé...!

Encore gros Merci à vous deux...!

@ +

Moa
 
Alors toi, Moa (Chris?), t'es vraiment un chef,

à chaque fois tu nous tiens au courant de ce que tu as réussi (ou pas!) à faire avec nos suggestions.

Tu peux m'envoyer ton fichier direct, s'te plait, que je jette un oeil.

C@thy
 
Bonjour,

Comme tu dis, Moa, ce n'est pas simple.
Il y a une solution : nommer tes formules.
Si tu n'as plus que 13 cellules, c'est faisable avec un peu de patience.
Il y a sur le forum un fichier posté par André, fait par André et Ti.
<http://www.excel-downloads.com/html/French/forum/messages/1_18352_18352.htm>
Tu construis 1 formule pour chaque "nombre de valeurs consécutives à ne pas dépasser", tu donnes un nom à chacune de ces formules.
Puis tu fais une formule conditionnelle, du genre :
=SI($S$2=2;Formule2;SI($S$2=3;Formule3;SI($S$2=4;Formule4;SI($S$2=5;Formule5;1)))) etc etc...
De mon côté, j'ai commencé et ça marche bien.

D'autre part, j'ai l'impression que tu te trompes avec ta cellule S2.
Si la fonction sommeprod te donne 1, c'est que le nombre est dépassé 1 fois.
Mais si elle te donne 2, c'est que le nombre est dépassé 1 fois de 2 unités ou bien 2 fois d'une seule unité à chaque fois.
 
Bonsoir à Toutes et à tous !

Bon voilà, après plus de nombreuses heures de travail.

En fait, au final, il fallait que ma formule ait, plusieurs caractéristiques bien précises.

A savoir qu'elle travaille sur une seule ligne, qu'elle soit étirable, vers le bas, que l'utilisateur ait le choix du nombre de consécutifs maximum autorisés, le choix sur la valeur à tester.

Donc :

De A1 à M1, ma ligne de valeurs.

De Q1 à AB1, cette formule :

SOMME(SI(AH3=2;NB.SI(A1:B1;AH1));SI(AH3=3;NB.SI(A1:C1;AH1));SI(AH3=4;NB.SI(A1😀1;AH1));SI(AH3=5;NB.SI(A1:E1;AH1));SI(AH3=6;NB.SI(A1:F1;AH1));SI(AH3=7;NB.SI(A1:G1;AH1));SI(AH3=8;NB.SI(A1:H1;AH1));SI(AH3=9;NB.SI(A1:I1;AH1));SI(AH3=10;NB.SI(A1:J1;AH1));SI(AH3=11;NB.SI(A1:K1;AH1));SI(AH3=12;NB.SI(A1:L1;AH1));SI(AH3=13;NB.SI(A1:M1;AH1)))

Tronquée de la dernière condition en R1, des deux dernières en S1, des 3 dernières conditions en T1 etc jusqu'en AB1.

Nota : J'ai enlevé les "$", pour la rendre plus compréhensible, mais si l'on doit l'étirer, ne pas oublier de les mettre, pour : AH3 et AH1

En AH1, ma liste déroulante des valeurs que je désire tester.

En AG3, ma liste déroulante du max de consécutifs que je veux autoriser.

En AH3 = AG3+1. ( Cellule masquée ).

En AE1 = SI(NB.SI(Q1:AB1;$AH$3)>0;FAUX;1)

Et voilà, le tour est joué.

Il m'aura fallu plusieurs jours de réflexions, puis le gros de travail de Monique et Cathy, que je remercie grandement, 4 heures de travail à deux (sur le Net), et plus de 4 heures de travail tout seul, pour arriver à ça.


Alors profitez en !

Encore mille Gros merci à Cat et Mon, sur ce coup.

Allez bonne nuit à tous !!! héhé ...!

@ +

Moa
 
Salut à tous !

Voilà, je suis allé encore un peu plus loin, car maintenant, j'ai rajouté le choix de plage, car avant la plage était fixe de 1 à 13.

Donc pour ceux intéressés, laissez moi votre mail, je vous enverrai le fichier fichier.

Désolé, mais je suis trop nase, pour mettre des explis.

Bonne fin de nuit à tous

@ +

Moa
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
841
Réponses
8
Affichages
441
Réponses
22
Affichages
1 K
  • Question Question
XL pour MAC Calcul de notes.
Réponses
5
Affichages
635
Réponses
17
Affichages
878
Retour