TrouverMêmeValeursConsécutives

  • Initiateur de la discussion Moa
  • Date de début
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
 
T

Ti

Guest
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
 
C

Cathy

Guest
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:p8)>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
 
M

Monique

Guest
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)
 
T

Ti

Guest
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 !
 
M

Moa

Guest
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:p8, 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
 
M

Monique

Guest
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...
 
C

Cathy

Guest
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

  • ComptageMoa.xls
    13.5 KB · Affichages: 61
M

Moa

Guest
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:p8)<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
 
C

Cathy

Guest
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
 
M

Monique

Guest
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.
 
M

Moa

Guest
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:D1;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
 
M

Moa

Guest
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
 

Discussions similaires

Réponses
3
Affichages
774
Réponses
10
Affichages
571
Réponses
5
Affichages
573

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 181
dernier inscrit
Ledoux