Autres éliminer les doublons avec critèreS

alain.pierrephie

XLDnaute Occasionnel
Bonjour au forum
Plus d'un mois que je cherche et je ne trouve pas donc je fait appel à mon forum préféré: Voilà ce que j'aimerai:
Que les doublons qui comportent en colonne "S" soit le seul dans la colonne après cette signalisation de "ATTENTE"/ Par exemlple en O6 j'ai "ACHAT" à 111,50 et "P6 et en "ATTENTE" en "S6"
J'aimerai que à la suite les ACHAT à 111,50 n'apparaissent plus comme en O8 P8 et S8 Ainsi qu'en O29 et O31 / P29 P31 / S29 S31

J'aimerai que les chiffres qui sont en jaune qui ne comportent pas de "ACHAT" dans la colonne O disparaissent aussi
Ceux qui comportent dans leur colonne un "ACHAT" et qui ont un chiffre en colonne "S" sont à conserver.

Je me doute que ça va être coton mais vraiment je jette une bouteille à la mer en conservant un petit espoir devant la difficulté
Que vous y arriviez ou pas je vous remercie tous
Alain
 

Pièces jointes

  • exceldownload.xlsx
    15.1 KB · Affichages: 11
Dernière édition:

gbinforme

XLDnaute Impliqué
Bonjour,

J'aimerai que les chiffres qui sont en jaune qui ne comportent pas de "ACHAT" dans la colonne O disparaissent aussi
Par "disparaissent" tu veux quoi en réalité :
- supprimer les valeurs concernées ?
- supprimer les lignes qui ont ces valeurs ?

Question subsidiaire :
Tu as un classeur sans macros mais cela difficile de faire des suppressions par formule.
 

alain.pierrephie

XLDnaute Occasionnel
Bonjour,


Par "disparaissent" tu veux quoi en réalité :
- supprimer les valeurs concernées ?
- supprimer les lignes qui ont ces valeurs ?

Question subsidiaire :
Tu as un classeur sans macros mais cela difficile de faire des suppressions par formule.
Bonjour
Par disparaitre je veux qu'elles n'apparaissent plus comme lorsqu'on met une condition "si" et "rien"
que les valeurs concernées ne soient plus visibles.
J'ai refait le classeur avec macro que je met dessous
Merci à toi
 

Pièces jointes

  • exceldownload2.xlsm
    15.1 KB · Affichages: 5

gbinforme

XLDnaute Impliqué
Bonjour,
Tu ouvres ton classeur sur la feuille concernée
Tu ouvres l'éditeur macro (alt + F11)
Tu te positionnes sur la macro 'calculate' située sur ta feuille concernée et tu fais F8
La première ligne passe en jaune.
Pour exécuter toute la macro tu fais F5
et tu regardes ta feuille.
 

alain.pierrephie

XLDnaute Occasionnel
Bonjour,
Tu ouvres ton classeur sur la feuille concernée
Tu ouvres l'éditeur macro (alt + F11)
Tu te positionnes sur la macro 'calculate' située sur ta feuille concernée et tu fais F8
La première ligne passe en jaune.
Pour exécuter toute la macro tu fais F5
et tu regardes ta feuille.
C'est trop bien expliqué et ça a fonctionné. Par contre quand je met un filtre et que je ne demande que les achats serait-il possible de faire disparaitre complètement ces achats là car j'ai remarqué qu'en fait c'est la police de caractère qui teinte en blanc pour ne plus qu'on le voit et cela me permettrait aussi dans les autres cellules de mettre une condition "si" O15 ="ACHAT" ; formule) ; "" ; car en masquant simplement je ne peux pas mettre ce genre de formule puisque "ACHAT" est toujours présent.
Merci à toi c'est super ce que tu as fait
A+
 

gbinforme

XLDnaute Impliqué
"ACHAT@" ça fera pareil que "ACHAT" rien ne changera

Pourtant si tu mets "si" O15 ="ACHAT" ; formule) ; "" cela ne donnera pas le même résultat
et si tu mets un filtre tu auras bien les 2 choix.

Pour le voir essayes avec la macro modifiée :
VB:
Option Explicit
Private Sub Worksheet_Calculate()
Dim lig As Long
Dim cle As String
Dim dic, dil
    Set dic = CreateObject("Scripting.Dictionary")
    Set dil = CreateObject("Scripting.Dictionary")
    With ActiveSheet
        For lig = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            If Left(Cells(lig, "O").Value, 5) = "ACHAT" Then
                cle = Left(Cells(lig, "O").Value, 5) & Cells(lig, "P").Value
                If Cells(lig, "S").Value = "attente" Then
                    If Not dic.exists(cle) Then
                        dic.Add cle, lig
                        dil.Add lig, cle
                    End If
                End If
            ElseIf Cells(lig, "P").Value <> "" Then
                Cells(lig, "P").Interior.ThemeColor = xlThemeColorDark1
                Cells(lig, "P").Font.ThemeColor = xlThemeColorDark1
            End If
        Next lig
        For lig = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            cle = Left(Cells(lig, "O").Value, 5) & Cells(lig, "P").Value
            If dic.exists(cle) And Not dil.exists(lig) Then
                Cells(lig, "O").Value = "ACHAT@"
                Cells(lig, "O").Interior.ThemeColor = xlThemeColorDark1
                Cells(lig, "O").Font.ThemeColor = xlThemeColorDark1
                Cells(lig, "P").Interior.ThemeColor = xlThemeColorDark1
                Cells(lig, "P").Font.ThemeColor = xlThemeColorDark1
            End If
        Next lig
    End With
End Sub

Pour la lancer rapidement tu insères dans une cellule vide "=1" que tu supprimes après.

Bon test
 

alain.pierrephie

XLDnaute Occasionnel
"ACHAT@" ça fera pareil que "ACHAT" rien ne changera

Pourtant si tu mets "si" O15 ="ACHAT" ; formule) ; "" cela ne donnera pas le même résultat
et si tu mets un filtre tu auras bien les 2 choix.

Pour le voir essayes avec la macro modifiée :
VB:
Option Explicit
Private Sub Worksheet_Calculate()
Dim lig As Long
Dim cle As String
Dim dic, dil
    Set dic = CreateObject("Scripting.Dictionary")
    Set dil = CreateObject("Scripting.Dictionary")
    With ActiveSheet
        For lig = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            If Left(Cells(lig, "O").Value, 5) = "ACHAT" Then
                cle = Left(Cells(lig, "O").Value, 5) & Cells(lig, "P").Value
                If Cells(lig, "S").Value = "attente" Then
                    If Not dic.exists(cle) Then
                        dic.Add cle, lig
                        dil.Add lig, cle
                    End If
                End If
            ElseIf Cells(lig, "P").Value <> "" Then
                Cells(lig, "P").Interior.ThemeColor = xlThemeColorDark1
                Cells(lig, "P").Font.ThemeColor = xlThemeColorDark1
            End If
        Next lig
        For lig = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            cle = Left(Cells(lig, "O").Value, 5) & Cells(lig, "P").Value
            If dic.exists(cle) And Not dil.exists(lig) Then
                Cells(lig, "O").Value = "ACHAT@"
                Cells(lig, "O").Interior.ThemeColor = xlThemeColorDark1
                Cells(lig, "O").Font.ThemeColor = xlThemeColorDark1
                Cells(lig, "P").Interior.ThemeColor = xlThemeColorDark1
                Cells(lig, "P").Font.ThemeColor = xlThemeColorDark1
            End If
        Next lig
    End With
End Sub

Pour la lancer rapidement tu insères dans une cellule vide "=1" que tu supprimes après.

Bon test
 

alain.pierrephie

XLDnaute Occasionnel
Bonjour à toi
J'y suis depuis un petit moment et j'ai vu tes 2 messages donc j'ai fait avec le premier mais j'ai eu des soucis et j'ai fait avec le 2ème et j'ai eu aussi des soucis.
1- j'ai bien mes cellules changées en ACHAT et ACHAT@;
2- lorsque j'ai fait la manip et j'ai l'impression qu'a chaque fois que je fait une simple demande d'addition ( = a2+a3) le recalcul se refait et prend 2 minutes environ
3- lorsque la manip est finie je reste bloqué sur une cellule de la feuille concernée mais je peux regarder les filtres ou aller sur une autre page mais reste bloqué sur une cellule sans pouvoir bouger et aller sur d'autres cellules
4- j'ai oublié de te dire que lorsque j'ouvre mon dossier j'ai un msg d'erreur: Erreur d'exécution - La méthode 'theme color' de l'objet 'Font" a échouée.
J'ai d'abord pensé que c'était dû a une coquille car j'ai pensé que c'était une couleur de 'FonD' de cellule j'ai donc remplacé 'fonT' par 'donD' mais ça n'a pas marché
J'espère que ça va t'éclairer car pour moi le VBA c'est du chinois
Merci encore et A+
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 233
Membres
103 161
dernier inscrit
Rogombe bryan