Afficher un X suivant des conditions croissantes ou décroissantes

LPhilou

XLDnaute Junior
Bonsoir difficile de m'exprimer sur ce problème que je n'arrive pas à solutionner depuis quelques heures ^^
J'ai une série de chiffres en colonne A et j'aimerai faire apparaître un "X" dans la colonne B quand une suite croissante ou décroissante est interrompue, voir fichier ci joint pour les détails, et un GRAND merci à celui ou celle qui me m'apportera son aide sur ce problème, bonne soirée.
 

Pièces jointes

  • Grand Merci - Probleme X version1.xlsx
    9.1 KB · Affichages: 44

laetitia90

XLDnaute Barbatruc
Re : Afficher un X suivant des conditions croissantes ou décroissantes

bonjour LPhilou, Papou:)
une autre facon pas trop teste

Code:
Sub es()
 Dim i As Long
 For i = 2 To Cells(Rows.Count, 1).End(3).Row
  If Cells(i, 1) = Cells(i - 1, 1) Or Cells(i, 1) > Cells(i - 1, 1) Then z = 1
  If Cells(i, 1) < Cells(i - 1, 1) And z = 1 Then Cells(i, 2) = "X": z = 0
  If Cells(i, 1) = Cells(i - 1, 1) Or Cells(i, 1) < Cells(i - 1, 1) And Cells(i, 1) > Cells(i + 1, 1) Then w = 1
  If Cells(i, 1) > Cells(i - 1, 1) And w = 1 Then Cells(i, 2) = "X": w = 0
  Next i
End Sub
 

job75

XLDnaute Barbatruc
Re : Afficher un X suivant des conditions croissantes ou décroissantes

Bonjour LPhilou, Papou, Laetitia,

J'avais pondu une solution par formule mais elle ne va pas avec des nombres identiques qui se suivent.

A+
 
Dernière édition:

LPhilou

XLDnaute Junior
Re : Afficher un X suivant des conditions croissantes ou décroissantes

Merci beaucoup aux membres du Forum Excel-downloads j'ai du choix pour adapter ça marche et effectivement simple pour ce qui est de la formule ;) (je finirais bien par trouver quelque chose de difficile à vous donner haha).
 

job75

XLDnaute Barbatruc
Re : Afficher un X suivant des conditions croissantes ou décroissantes

Re,

C'est compliqué s'il peut y avoir des séries de nombres identiques en colonne A.

Voyez le fichier joint avec le nom défini P en B2 :

Code:
=INDIRECT("A"&MAX(SI(Feuil1!$B$1:$B1<>"";LIGNE(Feuil1!$B$1:$B1));1)&":A"&LIGNE())
et la formule en B2 :

Code:
=REPT("X";NON((INDEX(P;1)=MIN(P))*(INDEX(P;LIGNES(P))=MAX(P))+(INDEX(P;1)=MAX(P))*(INDEX(P;LIGNES(P))=MIN(P))))
A+
 

Pièces jointes

  • Interruptions de séries(1).xls
    39 KB · Affichages: 29

Gurgeh

XLDnaute Occasionnel
Re : Afficher un X suivant des conditions croissantes ou décroissantes

Salut à tous

Je propose la formule suivante (matricielle, à valider par CTRL+MAJ+ENTREE) qui tient dans une seule cellule, à mettre en B2 et tirer vers le bas

Code:
=SI(ET($C1<>"X";SIGNE($A1-DECALER($A$1;MAX(($B$1:$B1="X")*LIGNE($B$1:$B1));0))=-SIGNE($A2-$A1));"X";"")

Gurgeh
 

job75

XLDnaute Barbatruc
Re : Afficher un X suivant des conditions croissantes ou décroissantes

Bonjour Gurgeh,

Je pense que c'est $B1 et pas $C1 dans votre formule.

Mais voyez le fichier joint, ça ne va pas en B6.

Comme je l'ai dit, c'est le problème des séries de nombres identiques...

A+
 

Pièces jointes

  • Test Gurgeh(1).xls
    39.5 KB · Affichages: 28

job75

XLDnaute Barbatruc
Re : Afficher un X suivant des conditions croissantes ou décroissantes

Re,

Concernant VBA j'y vais de ma solution car ni la macro de papou ni celle de Laetitia ne fonctionnent correctement avec la série de 1 en B4 B5 B6 :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address <> "$B$1" Then Exit Sub
Dim t, rest(), deb&, fin&, i&, x, j&, y, sens%
Cancel = True
t = Range("A1", Range("A" & Rows.Count).End(xlUp)(2)) 'au moins 2 éléments
ReDim rest(1 To UBound(t), 1 To 1)
deb = 2
fin = UBound(t) - 1
1 For i = deb To fin
  '---détermination du sens---
  If i = deb Then
    x = t(i - 1, 1)
    For j = i To fin
      y = t(j, 1)
      sens = IIf(y > x, 1, IIf(y < x, -1, 0))
      If sens Then Exit For
    Next
    i = j
  End If
  '---détermination de l'interruption de série---
  If sens = 1 And t(i, 1) < t(i - 1, 1) Or sens = -1 And t(i, 1) > t(i - 1, 1) Then
    rest(i, 1) = "X"
    deb = i + 1
    GoTo 1
  End If
Next
'---restitution---
[B1].Resize(UBound(rest)) = rest
End Sub
Cette macro est très rapide car elle utilise des tableaux VBA.

Fichier joint où j'ai mis aussi les macros de papou et Laetitia pour les tester.

Attention la macro de papou boucle sans fin !

A+
 

Pièces jointes

  • Interruptions de séries par VBA(1).xls
    54 KB · Affichages: 33

Gurgeh

XLDnaute Occasionnel
Re : Afficher un X suivant des conditions croissantes ou décroissantes

Salut job75,

Effectivement, merci d'avoir corrigé la faute de frappe, c'est bien $B1 et pas $C1.

Je suis mortifié, j'étais tout fier que la formule fonctionne pour les 6 successifs...

Mortifié mais têtu, voici une formule (toujours matricielle, à valider par CTRL+MAJ+ENTREE) qui tient compte de votre remarque :

Code:
=REPT("X";ET($B1<>"X";$A2<>$A1;SIGNE($A1-DECALER($A$1;MAX(($B$1:$B1="X")*LIGNE($B$1:$B1));0))=-SIGNE($A2-$A1)))

Gurgeh
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Afficher un X suivant des conditions croissantes ou décroissantes

Re,

Comparaison des durées d'exécution sur Win XP - Excel 2003 :

- recalcul des formules du post #6 => 3,5 millièmes de seconde

- macro du post #10 => 0,24 millième de seconde, y a pas photo...

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 454
Messages
2 088 557
Membres
103 881
dernier inscrit
malbousquet