Microsoft 365 Masquer - Afficher et classer

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 😛),

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

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"...
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😛.
Bon week-end.
 
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
 
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
🙂
 
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
 
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 🙂
 
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.
 
Re-Bonjour cp4 🙂
lol, désolé de t'embrouiller 😛
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:
Re-Bonjour cp4 🙂
lol, désolé de t'embrouiller 😛
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
🙂
😱
😵😵😵 ç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.
 
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

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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
584
Réponses
11
Affichages
547
Retour