Microsoft 365 Masquer - Afficher et classer

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Bon we :)

Je cherche à :
1 - Masquer les lignes qui contiennent UNIQUEMENT le mot "Répondeur"
2 - Afficher les lignes qui contiennent UNIQUEMENT le mot "Répondeur" en les classant selon le nombre de mots "Répondeur" contenus

Je cherche comment faire recherche sur le net et tentatives et ... pour l'instant, je n'y arrive pas -tu m'étonnes lol :p),

Auriez-vous le bon code ?
Je joins un petit fichier test et je continue à chercher :)

Merci pour l'avoir lu,
Amicalement,
lionel,
 

Pièces jointes

  • Repondeurs_test.xlsm
    19.6 KB · Affichages: 11
Solution
Bonjour Lionel, Marcel32,

C'est en effet un problème différent, il faut travailler sur x, la macro modifiée :
VB:
Sub Classer()
Dim tablo, i&, x$, s, j%, y$
With Sheets("Compter").[D1].CurrentRegion.EntireRow
    tablo = .Columns(4).Resize(, 2) 'mztrice, plus rapide
    For i = 2 To UBound(tablo)
        tablo(i, 2) = "" 'RAZ
        x = Replace(Replace(tablo(i, 1), " ", ""), vbCr, "")
        If x Like "*##-##-####:##:RendezVouspourle*" Then
            tablo(i, 2) = "RdV"
        Else
            s = Split(x, vbLf)
            For j = 0 To UBound(s)
                y = s(j)
                If y <> "" Then
                    If Not y Like "##-##-####:##:Répondeur-" Then
                        tablo(i, 2) = "n/c"...

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Je vous souhaite une belle journée :)

En fait j'avais 2 questions dans ce fil et Gérard m'a donné la solution à l'une d'elles.

cp4 m'a donne la solution au classement, soit :​

VB:
Sub compter() 'CP4
    Dim x As Byte
    For i = 2 To Range("d" & Rows.Count).End(xlUp).Row
        Cells(i, 4).Offset(0, 1) = Nb_Occurence(Cells(i, 4).Value, [b1].Value)
        'Cells(i, 4)col D .Offset(0, 1)col E
    Next i
    Range("B1").Select
End Sub
Public Function Nb_Occurence(strInput As String, strFind As String) As Double
If strFind <> "" Then
    Nb_Occurence = (Len(strInput) - Len(Replace(strInput, strFind, ""))) / Len(strFind)
End If
End Function
C'est sur ce code que j'aimerais revenir :
Il me permets de compter et de classer les lignes selon les nombre de mots "Répondeur" contenus dans la cellule col "D".

J'aurais besoin d'un complément de code selon ce qui suit :
- Est-il possible de faire un classement prioritaire pour les cellules qui contiennent 1 ou des lignes qui contiennent des mots autres que le mot "Répondeur" ?

On aurait alors :
- les lignes prioritaires pour les cellules qui contiennent 1 ou des lignes qui contiennent des mots autres que le mot "Répondeur",
- A la suite les autres lignes classées selon les nombre de mots "Répondeur" contenus dans la cellule col "D".

Mais là, c'est certainement "coton" à coder et pas sûr que ce soit possible !
Mais avec nos ténors, le rêve est possible lol ;);)

Je joins un fichier test.
Un grand merci par avance,
Amicalement,
lionel,
 

Pièces jointes

  • Repondeurs_classer_compter.xlsm
    43.7 KB · Affichages: 4

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Gérard :)

Merci d'être là,
Bizarre, ça ne beugue pas chez moi :rolleyes:

Oui je voudrais modifier la macro pour classer comme suit :
- les lignes prioritaires pour les cellules qui contiennent 1 ou des lignes qui contiennent des mots autres que le mot "Répondeur",
- A la suite les autres lignes classées selon les nombre de mots "Répondeur" contenus dans la cellule col "D".
lionel :)
 

job75

XLDnaute Barbatruc
Pas certain que ce soit ce que tu veux mais teste ceci :
VB:
Sub Classer()
Dim tablo, i&, x$, s, j%, y$
With Sheets("Compter").[D1].CurrentRegion.EntireRow
    tablo = .Columns(4).Resize(, 2) 'mztrice, plus rapide
    For i = 2 To UBound(tablo)
        tablo(i, 2) = "" 'RAZ
        x = Replace(Replace(tablo(i, 1), " ", ""), vbCr, "")
        s = Split(x, vbLf)
        For j = 0 To UBound(s)
            y = s(j)
            If y <> "" Then If Not y Like "##-##-####:##:Répondeur-" Then tablo(i, 2) = "n/c": Exit For
        Next
        If tablo(i, 2) = "" Then If InStr(x, "Répondeur") Then tablo(i, 2) = (Len(x) - Len(Replace(x, "Répondeur", ""))) / 9
    Next
    '---restitution---
    .Columns(4).Resize(, 2) = tablo
    .Sort .Columns(5), xlDescending, Header:=xlYes 'tri décroissant sur la colonne E
    .Rows.AutoFit
End With
End Sub
 

Pièces jointes

  • Repondeurs_classer_compter(1).xlsm
    48.7 KB · Affichages: 5

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Je vous souhaite une belle journée :)

Bonjour Gérard,
Toujours super ton code :)
Mais je n'arrive pas à le modifier (je suis nul et je ne le comprends pas :mad:)

Je voudrais également le mettre dans un classeur dans lequel les "Répondeur" sont dans la colonne "L".
J'ai tenté :
VB:
Sub Classer2() 'Appels
Application.EnableEvents = False
Application.ScreenUpdating = False
Dim tablo, i&, x$, s, j%, y$
With Sheets("Compter_Appels").[L1].CurrentRegion.EntireRow
    tablo = .Columns(12).Resize(, 2) 'matrice, plus rapide
    For i = 6 To UBound(tablo)
        tablo(i, 2) = "" 'RAZ
        x = Replace(Replace(tablo(i, 1), " ", ""), vbCr, "")
        s = Split(x, vbLf)
        For j = 0 To UBound(s)
            y = s(j)
            If y <> "" Then If Not y Like "##-##-####:##:Répondeur-" Then tablo(i, 2) = "n/c": Exit For
        Next
        If tablo(i, 2) = "" Then If InStr(x, "Répondeur") Then tablo(i, 2) = (Len(x) - Len(Replace(x, "Répondeur", ""))) / 9
    Next
    '---restitution---
    .Columns(12).Resize(, 2) = tablo
    .Sort .Columns(13), xlDescending, Header:=xlYes 'tri décroissant sur la colonne M
    '.Rows.AutoFit
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Mais pas moyen de trouver la bonne modif Grrrr !!!!

Veux tu me dire comment le modifier ?
Je te remercie :)
lionel nullissime :mad:
 

job75

XLDnaute Barbatruc
Bonjour Lionel, le forum,

Il faudrait voir le fichier mais d'après ce que je comprends :
VB:
Sub Classer2() 'Appels
Dim tablo, i&, x$, s, j%, y$
With Sheets("Compter_Appels")
    With .Range("L6:M" & .Cells.SpecialCells(xlCellTypeLastCell).Row)
        If .Row = 6 Then
            tablo = .Value 'matrice, plus rapide
            For i = 1 To UBound(tablo)
                tablo(i, 2) = "" 'RAZ
                x = Replace(Replace(tablo(i, 1), " ", ""), vbCr, "")
                s = Split(x, vbLf)
                For j = 0 To UBound(s)
                    y = s(j)
                    If y <> "" Then If Not y Like "##-##-####:##:Répondeur-" Then tablo(i, 2) = "n/c": Exit For
                Next j
                If tablo(i, 2) = "" Then If InStr(x, "Répondeur") Then tablo(i, 2) = (Len(x) - Len(Replace(x, "Répondeur", ""))) / 9
            Next i
            '---restitution---
            Application.EnableEvents = False 'est-ce bien nécessaire ???
            .Value = tablo
            .EntireRow.Sort .Columns(2), xlDescending, Header:=xlNo 'tri décroissant sur la colonne M
            Application.EnableEvents = True
        End If
    End With
End With
End Sub
A+
 

job75

XLDnaute Barbatruc
Je ne peux pas laisser la macro copy dans l'état où elle est :rolleyes:
VB:
Sub copy2()
Sheets("Compter_Appels").Range("L6:M" & Rows.Count).Delete xlUp 'RAZ
With Sheets("modèle")
    .Range("g2", .Cells(.Rows.Count, "g").End(xlUp)).copy Sheets("Compter_Appels").[L6]
End With
End Sub
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir Gérard,
Je te souhaite une très belle nouvelle année toute pleine de bonnes choses pour toi et les tiens :)

Je reviens sur ce fil pour lequel tu m'as fait un super code :
VB:
Sub Classer2() 'Appels
Dim tablo, i&, x$, s, j%, y$
With Sheets("Compter_Appels")
    ActiveSheet.Unprotect Password:=""
    With .Range("L6:R" & .Cells.SpecialCells(xlCellTypeLastCell).Row)
        If .Row = 6 Then
            tablo = .Value 'matrice, plus rapide
            For i = 1 To UBound(tablo)
                tablo(i, 7) = "" 'RAZ
                x = Replace(Replace(tablo(i, 1), " ", ""), vbCr, "")
                s = Split(x, vbLf)
                For j = 0 To UBound(s)
                    y = s(j)
                    If y <> "" Then If Not y Like "##-##-####:##:Répondeur-" Then tablo(i, 7) = "n/c": Exit For
                Next j
                If tablo(i, 7) = "" Then If InStr(x, "Répondeur") Then tablo(i, 7) = (Len(x) - Len(Replace(x, "Répondeur", ""))) / 9
            Next i
            '---restitution---
            Application.EnableEvents = False 'est-ce bien nécessaire ???
            Application.Calculation = xlCalculationManual
            .Value = tablo
            .EntireRow.Sort .Columns(7), xlDescending, Header:=xlNo 'tri décroissant sur la colonne R
            Application.Calculation = xlCalculationAutomatic
            Application.EnableEvents = True
            ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
    End With
End With
End Sub
Il fonctionne (évidemment) super bien et me permet de traiter l'ensemble de toutes les lignes de mon fichier pour une mise à jour complète selon besoin.

Toutefois, dans tous mes fichiers, je traite les lignes une par une selon la saisie.
Serait-il possible que je puisse également traiter uniquement la ligne active ?

j'essaie de modifier ton code mais ... lol

Encore merci Gérard :)
lionel :)
 

ChTi160

XLDnaute Barbatruc
Bonsoir Lionel
Juste pour te signaler que dans ta procédure
Tu peux enlever le ActiveSheet soit :
VB:
With Sheets("Compter_Appels")
         .Unprotect Password:=""
Idem en bas de procédure.
Code:
.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
Bonne fin de soirée
Jean marie
 

Discussions similaires

Réponses
2
Affichages
217

Statistiques des forums

Discussions
312 095
Messages
2 085 249
Membres
102 835
dernier inscrit
Alexandrax971