Déterminer en 1 formule qui a émis un avis négatif le + tôt

Bonjour Forum !

Je me casse la tête pour trouver comment faire déterminer à Excel une chose qui a l'air assez simple…

Des documents doivent être validés par 5 personnes.

Chacune doit émettre 1 avis, à choisir parmi 6 possibilités (AF, AS, AD, R, NV, NSV, HM)

Je ne m'intéresse qu'à 3 de ces possibilités : AS (avis suspendu), AD (avis défavorable), R (refusé).

Mon problème est de savoir qui parmi les 5 personnes a émis le + tôt l'un de ces 3 avis

Dans le cas présent, c'est la personne n°4 (AD le 18/09).

Mon problème est de récupérer cette date en 1 seule formule.

Quelqu'un saurait-il comment faire ?

Merci !!!

Bonsoir,

Une proposition...imparfaite en 2 temps

Cdlt

Renyeu

Bonsoir,

Un essai à tester suivant tes besoins

Cdlt.

Merci à tous les 2 pour vos réponses.

@renyeu :

Ta méthode marche, mais elle implique de créer des cellules cachées.

C'est ce que je cherche à éviter car je vais l'appliquer à un grand nombre de données dans une feuille très compliquée...

@Jean-Eric :

J'ai un bug à l'exécution du code (variable non définie pour "xlSortOnValues"). Peut-être dû au fait que je suis sur 2003 ?

Si ça marche finalement, il faudra que ça puisse s'exécuter automatiquement (pas en appuyant sur un bouton), et ça, je ne saurai pas faire.

bonjour

un essai avec sommeprod

16gloub30.xls (13.50 Ko)

la formule vient de sortir

cordialement

Waouh !!!

Je comprends pas tout (je m'y penche), mais le fait est que ça marche !

(Je comprends mieux pourquoi j'y arrivais pas tout seul...)

Merci beaucoup !

A Gloub,

(A Tulipe_4)

Mon code prend en compte un nombre de lignes indéterminée.

Il supprime tous les éléments communiqués par Gloub (à savoir les AF,NV,NSV & HM

La formule de Tulipe_4 est fonctionnelle, mais difficilement compréhensible par le commun des Exceliens. Donc difficile à reproduire.

Mon code répond à la question posée, sans information complémentaire de la part de Gloub.

Quant à la fonction d'automatisme, il est clair que l'on démarre sa voiture sans action préalable

Cdlt.

Pour le problème de compabilité 2003/2010, je joins le code:

Option Explicit
Public Sub Mise_en_Forme()

    Dim derLigne As Integer
    Dim i As Integer

    Application.ScreenUpdating = False

    Range("A1").CurrentRegion.Select
    Selection.Copy
    Range("E1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False

    derLigne = Range("G" & Rows.Count).End(xlUp).Row
    'MsgBox derLigne

    For i = derLigne To 2 Step -1
    'MsgBox i
        If Cells(i, 6) = "AF" Or Cells(i, 6) = "NV" Or Cells(i, 6) = "NSV" _
            Or Cells(i, 6) = "HM" Or Cells(i, 6) = "R" Then
            Range(Cells(i, 5), Cells(i, 7)).Select
            Selection.Delete Shift:=xlUp
        End If
    Next i

    derLigne = Range("G" & Rows.Count).End(xlUp).Row
    Range("E1").CurrentRegion.Select
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range(Cells(2, 7), Cells(derLigne, 7)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("E1").CurrentRegion
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Merci pour ton aide.

Pour l'instant je n'ai pas pu tester ton code sur mon poste, car ça beugue (?) encore sur "xlSortOnValues"...

Re,

Je ne dispose pas d'Excel 2003!

Une personne charitable pour modifier le code du précédent post? Et permettre le tri...

Cdlt.

Bonjour

Modification pour 2003

J'ai enlevé le test sur "R" car c'est une réponse acceptée

Option Explicit

Public Sub Mise_en_Forme()
Dim DerLigne As Long
Dim I As Long

  Application.ScreenUpdating = False

  Range("A1").CurrentRegion.Copy Destination:=Range("E1")

  DerLigne = Range("G" & Rows.Count).End(xlUp).Row
  'MsgBox derLigne

  For I = DerLigne To 2 Step -1
  'MsgBox i
    If Cells(I, 6) = "AF" Or Cells(I, 6) = "NV" Or Cells(I, 6) = "NSV" _
          Or Cells(I, 6) = "HM" Then
      Range(Cells(I, 5), Cells(I, 7)).Delete Shift:=xlUp
    End If
  Next I

  DerLigne = Range("G" & Rows.Count).End(xlUp).Row
  Range("E2:G" & DerLigne).Sort Key1:=Range("G2"), Order1:=xlAscending, Header:=xlNo, _
      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
      DataOption1:=xlSortNormal
End Sub

A Banzai64

Merci pour Gloub

Cdlt

Merci Jean-Eric et Banzai_64.

Cette fois j'arrive bien à faire fonctionner le code, et effectivement il sort le bon résultat.

Mais en fait mon objectif initial était juste de récupérer dans une cellule la date du 1er avis négatif.

Du coup je n'ai pas besoin des étapes intermédiaires.

Par ailleurs, dans la vraie vie, mes données sont disposées en lignes (1 document >> 5 avis avec une date pour chacun, dans des cellules disjointes).

J'avais exposé le problème en disposant les données en colonnes pour faciliter la compréhension, sans penser que ça nécessiterait d'en passer par VBA. J'imaginais pouvoir adapter une formule pour la faire fonctionner pour chaque ligne de ma feuille.

En revanche, je ne saurais pas adapter le code pour faire ça.

Je suis donc reparti vers la formule hallucinante de Tulipe_4, en essayant de la comprendre un peu mieux, et de la faire fonctionner pour des plages discontinues, mais sans succès.

Mais bon, je ne veux pas non plus abuser des membres du Forum, donc, au besoin, j'en passerai par une étape intermédiaire dans des cellules masquées. Un peu lourd mais ça je sais faire !!!

Finalement j'ai fini par trouver une solution qui marche tout seul comme un grand.

Je la donne si jamais ça peut servir à d'autres.

J'ai découvert au passage qu'on pouvait nommer des formules -- très pratique pour éviter des formules trop longues dans lesquelles on se noie.

Je me suis aussi servi du fait que la fonction MIN() marche sur des sélections discontinues.

Mon problème se résume à trouver, dans un tableau à 2 colonnes, la valeur minimum dans la 2ème colonne, qui corresponde à une cellule de la 1ère vérifiant une condition logique.

Dans mon cas : des avis négatifs ou positifs (dans la 1ère colonne), la date à laquelle ils ont été émis (2ème colonne) : à quelle date a été émis le 1er avis négatif ("AD", "AS" ou "R").

J'ai donc créé des formules (que j'ai nommées) qui testent si la valeur de la 1ère colonne correspond à un avis négatif. Si oui, le résultat de la formule est la date de l'avis.

Il ne reste plus qu'à chercher le minimum parmi ces valeurs.

J'ai le sentiment que ma formule peut encore être améliorée, mais je ne sais pas comment.

En tous cas, merci encore à tous ceux qui m'ont aidé jusqu'ici.

Rechercher des sujets similaires à "determiner formule qui emis avis negatif tot"