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"...

cp4

XLDnaute Barbatruc
Bonjour @Usine à gaz ;),

Pour masquer/afficher
VB:
Option Explicit
Dim I As Long
Sub masque()
    For I = 4 To Range("g" & Rows.Count).End(xlUp).Row
        If Cells(I, 7) Like "*Répondeur*" Then
            Rows(I).EntireRow.Hidden = True
        End If
    Next I
End Sub

Sub afficher()
    For I = 4 To Range("g" & Rows.Count).End(xlUp).Row
        If Rows(I).EntireRow.Hidden = True Then Rows(I).EntireRow.Hidden = False
    Next I
End Sub
Pour le décomptage, je pédale:p.
Bon week-end.
 

cp4

XLDnaute Barbatruc
Pour compter les occurrences en colonne H. Ensuite, je te laisse le soin de trier et supprimer la colonne intermédiaire H
VB:
Sub compter()
    Dim x As Byte
    For I = 4 To Range("g" & Rows.Count).End(xlUp).Row
        Cells(I, 7).Offset(0, 1) = Nb_Occurence(Cells(I, 7).Value, "Répondeur")
    Next I
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
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour :)
Malheureusement ça ne fonctionne pas car il masque toutes les lignes qui contiennent le mot "Répondeur"

Or, par exemple, la ligne qui contient en colonne G :

"08-11-21 16:32 : Répondeur -
04-11-21 19:51 : Répondeur -
04-11-21 19:43 : Répondeur -
04-11-21 19:30 : Répondeur -
je devais rappeler avant 10h 02-11-21 14:24 : Pas dispo demande rappel - RdV possible - "

Ne doit pas être masquée car il y a d'autres mots en plus de "Répondeur"

Seules si contient uniquement le mot "Répondeur" doivent être masqués
:)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Pour compter les occurrences en colonne H. Ensuite, je te laisse le soin de trier et supprimer la colonne intermédiaire H
VB:
Sub compter()
    Dim x As Byte
    For I = 4 To Range("g" & Rows.Count).End(xlUp).Row
        Cells(I, 7).Offset(0, 1) = Nb_Occurence(Cells(I, 7).Value, "Répondeur")
    Next I
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
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Pour compter les occurrences en colonne H. Ensuite, je te laisse le soin de trier et supprimer la colonne intermédiaire H
VB:
Sub compter()
    Dim x As Byte
    For I = 4 To Range("g" & Rows.Count).End(xlUp).Row
        Cells(I, 7).Offset(0, 1) = Nb_Occurence(Cells(I, 7).Value, "Répondeur")
    Next I
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
Bonjour cp4,
Merci à toi :)
C'est déjà une belle avancée,
lionel :)
 

cp4

XLDnaute Barbatruc
Re-Bonjour :)
Malheureusement ça ne fonctionne pas car il masque toutes les lignes qui contiennent le mot "Répondeur"

Or, par exemple, la ligne qui contient en colonne G :

"08-11-21 16:32 : Répondeur -
04-11-21 19:51 : Répondeur -
04-11-21 19:43 : Répondeur -
04-11-21 19:30 : Répondeur -
je devais rappeler avant 10h 02-11-21 14:24 : Pas dispo demande rappel - RdV possible - "

Ne doit pas être masquée car il y a d'autres mots en plus de "Répondeur"

Seules si contient uniquement le mot "Répondeur" doivent être masqués
:)
Désolé, tu m'embrouilles et que fait-on dans les différents cas par exemple en G4, il y a 3xRépondeur
08-11-21 16:22 : Répondeur -
04-11-21 15:27 : Répondeur -
02-11-21 14:29 : Répondeur -
et en G5, une fois Répondeur.

Pas compris.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour cp4 :)
lol, désolé de t'embrouiller :p
Voici quelques exemples :
08-11-21 16:09 : Répondeur -
04-11-21 15:25 : Répondeur -
02-11-21 14:59 : Répondeur -
01-11-21 16:06 : Répondeur -
08-11-21 16:30 : Répondeur -
02-11-21 10:26 : Pas dispo demande rappel - RdV possible - semaine chargée
01-11-21 16:19 : Répondeur -

En rouge = ligne masquée
Là où il n'y a que le mot "Répondeur",
Quel que soit le nombre de "Répondeur"
En vert = ligne pas masquée
Là où il y a d'autres mots, la ligne ne doit pas être masquée.

Et tout ça sans tenir compte des dates, des ":" et des tirets "-" lol
:)
 
Dernière édition:

cp4

XLDnaute Barbatruc
Re-Bonjour cp4 :)
lol, désolé de t'embrouiller :p
Voici quelques exemples :
08-11-21 16:09 : Répondeur -
04-11-21 15:25 : Répondeur -
02-11-21 14:59 : Répondeur -
01-11-21 16:06 : Répondeur -
08-11-21 16:30 : Répondeur -
02-11-21 10:26 : Pas dispo demande rappel - RdV possible - semaine chargée
01-11-21 16:19 : Répondeur -

En rouge = ligne masquée
Là où il n'y a que le mot "Répondeur",
Quel que soit le nombre de "Répondeur"
En vert = ligne pas masquée
Là où il y a d'autres mots, la ligne ne doit pas être masquée.

Et tout ça sans tenir compte des dates, des ":" et des tirets "-" lol
:)
:eek:
o_Oo_Oo_O ça y est, je suis saisi de vertige. Pas du tout dans les cordes d'un codeur du dimanche autodidacte.

Je passe la main. Mais suis la discussion jusqu'au bout.

Bonne soirée.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Je suis en train de voir avec un combiné de ce code :
VB:
Sub Detecter()
Dim r As Range, interdit$, d As Object, i%, x$
Application.DisplayAlerts = False
On Error Resume Next
Set r = Application.InputBox("Sélectionnez une plage :", Type:=8)
On Error GoTo 0
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Cells.Interior.ColorIndex = xlNone 'RAZ
Set r = Intersect(r, ActiveSheet.UsedRange)
If r Is Nothing Then Exit Sub
interdit = "ABCDEFGHIJKLMNOPQSTUWVXYZÉÈabcfghijklmqstwvxyzè"
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To Len(interdit)
    d(Mid(interdit, i, 1)) = ""
Next
For Each r In r
    x = r
    For i = 1 To Len(x)
        If d.exists(Mid(x, i, 1)) Then r.Interior.ColorIndex = 3: Exit For
Next i, r
End Sub

Sub Supprimer()
Dim r As Range, interdit$, d As Object, i%, x$
Application.DisplayAlerts = False
On Error Resume Next
Set r = Application.InputBox("Sélectionnez une plage :", Type:=8)
On Error GoTo 0
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set r = Intersect(r, ActiveSheet.UsedRange)
If r Is Nothing Then Exit Sub
r.Interior.ColorIndex = xlNone 'RAZ
interdit = "ABCDEFGHIJKLMNOPQSTUWVXYZÉÈabcfghijklmqstwvxyzè"
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To Len(interdit)
    d(Mid(interdit, i, 1)) = ""
Next
For Each r In r
    x = r
    For i = Len(x) To 1 Step -1
        If d.exists(Mid(x, i, 1)) Then x = Left(x, i - 1) & Mid(x, i + 1)
    Next i
    r = x
Next r
End Sub
:)
 

Pièces jointes

  • Caractères interdits(1).xlsm
    20.2 KB · Affichages: 3

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir Laurent,
Merci d'être là :)
"Je Propose de remplir la colonne H pour y écrire le nombre de fois que le mot répondeur apparait
de 0 Fois à x fois"

Suite le #post 4 le code que m'a donné cp4, inclus dans le fichier joint, répond à ce calcul.
Et j'essaie de faire quelque chose avec le code que j'ai ajouté dans le fichier joint
:)
 

Pièces jointes

  • Repondeurs_test.xlsm
    26.4 KB · Affichages: 3

job75

XLDnaute Barbatruc
Bonsoir Lionel, cp4,

Voyez le fichier joint et les macros des 3 boutons :
VB:
Sub Masque_Repondeur()
Dim P As Range, tablo, i&, s, j%, x$
With Feuil1 'CodeName
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    Set P = .Range("G4", .Range("G" & .Rows.Count).End(xlUp))
End With
If P.Row < 4 Then Exit Sub 'sécurité
tablo = P.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
Application.ScreenUpdating = False
P.EntireRow.Hidden = True 'masque tout
For i = 1 To UBound(tablo)
    s = Split(tablo(i, 1), vbLf)
    For j = 0 To UBound(s)
        x = Replace(s(j), " ", "")
        If x <> "" Then If Not x Like "##-##-####:##:Répondeur-" Then P.Rows(i).Hidden = False: Exit For
Next j, i
End Sub

Sub Affiche_Repondeur()
Dim P As Range, tablo, i&, s, j%, x$
With Feuil1 'CodeName
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    Set P = .Range("G4:H" & .Range("G" & .Rows.Count).End(xlUp).Row) '2 colonnes
End With
If P.Row < 4 Then Exit Sub 'sécurité
Application.ScreenUpdating = False
P.EntireRow.Hidden = False 'affiche tout
P.Columns(2) = "=(LEN(G4)-LEN(SUBSTITUTE(G4,""Répondeur"",)))/9" 'compte le mot
P.Columns(2) = P.Columns(2).Value 'supprime les formules
P.Sort P(1, 2), xlDescending, Header:=xlNo 'tri décroissant
P.Columns(2) = "" 'RAZ
P.Rows.AutoFit 'ajuste la hauteurs des lignes
tablo = P 'matrice, plus rapides
For i = 1 To UBound(tablo)
    s = Split(tablo(i, 1), vbLf)
    For j = 0 To UBound(s)
        x = Replace(s(j), " ", "")
        If x <> "" Then If Not x Like "##-##-####:##:Répondeur-" Then P.Rows(i).Hidden = True: Exit For
Next j, i
End Sub

Sub Affiche_tout()
With Feuil1 'CodeName
    .Rows("4:" & .Rows.Count).Hidden = False
End With
End Sub
A+
 

Pièces jointes

  • Repondeurs_test(1).xlsm
    25.6 KB · Affichages: 9

Discussions similaires

Réponses
2
Affichages
280

Statistiques des forums

Discussions
312 190
Messages
2 086 037
Membres
103 105
dernier inscrit
fofana