trier lignes contenant un commentaire

pascal21

XLDnaute Barbatruc
bonjour à tous et bonne année
je suis à la recherche d'un code à mettre sur un bouton,permettant de faire un tri sur les lignes contenant un commentaire
avez-vous une solution merci
 

pascal21

XLDnaute Barbatruc
Re : trier lignes contenant un commentaire

bonjour boisgontier
j'étais à l'instant sur ton site et j'avais trouvé ce classeur qui trie dans l'ordre alphabétique les commentaires
mais je me suis peut-être mal exprimé
en fait je voudrais afficher uniquement les lignes contenant un commentaire
j'ai plus de 500 lignes sur mon classeur et des commentaires automatiques se mettent en place à des dates d'échéances
et donc avoir une vision des lignes contenant ces commentaires
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : trier lignes contenant un commentaire

Voir PJ

Code:
Sub filtreComment()
  For Each c In Range("b2:B" & [B65000].End(xlUp).Row)
    c.EntireRow.Hidden = c.Comment Is Nothing
  Next c
End Sub

Sub tout()
  Rows.Hidden = False
End Sub

JB
 

Pièces jointes

  • Classeur1.xls
    33 KB · Affichages: 91
  • Classeur1.xls
    33 KB · Affichages: 98
  • Classeur1.xls
    33 KB · Affichages: 95
Dernière édition:

pascal21

XLDnaute Barbatruc
Re : trier lignes contenant un commentaire

Code:
Sub filtreComment()
  For Each c In Range("b2:B" & [B65000].End(xlUp).Row)
  c.EntireRow.Hidden = EstCommentaire(c)
  Next c
End Sub
Sub tout()
  Rows.Hidden = False
End Sub
Function EstCommentaire(c)
  Application.Volatile
  EstCommentaire = [COLOR="Red"]Not[/COLOR]  c.Comment Is Nothing
End Function
re
j'ai juste enlever le Not (en rouge) pour avoir l'affichage des lignes avec commentaire
mais les commentaires ne sont pas tous sur la même colonne
ils peuvent se trouver sur les colonnes A à P
comment modifier le code
j'ai fais quelques essais sans résultats positifs
merci
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : trier lignes contenant un commentaire

Voir PJ

Code:
Sub FiltreComment2()
    [A2].CurrentRegion.Offset(1).EntireRow.Hidden = True
    Cells.SpecialCells(xlCellTypeComments).EntireRow.Hidden = False
End Sub

JB
 

Pièces jointes

  • CommentaireFiltre.xls
    45 KB · Affichages: 115

Etevaldo Santos

XLDnaute Nouveau
Bonjour à tous,

Je vous salue d'ici du Brésil, et j'ai me excuse pour mon mauvais français.

Je vous félicite à tous pour la grande aide que vous ont fourni à tous les utilisateurs, comme moi, qui suive régulièrement les publications et enrichit ma connaissance, encore très élémentaire sur Excel VBA

J'ai déjà cherché sur plusieurs forums sur Internet et je n'ai pas encore trouvé des réponses.

Voila ma question/problème:

J'ai un commentaire sur une cellule particulière dans Excel (par exemple G15), dans lequel je voudrais faire un trie de toute le données (texte et numéro), sauf l'entéte, que restera toujour em 1ere ligne (en gras).

Mon commentaire est:

Liste de pièces:
- zzz
- eee
- ooo
- 111
- mmm


et voudrait qu'il soit:

Liste de pièces:
-111
- eee
- mmm
- ooo
- zzz

Merci pour la grande aide
 

job75

XLDnaute Barbatruc
Bonjour Etevaldo Santos, bienvenue sur XLD,

Votre français est très correct.

Simplement vous auriez pu ouvrir votre propre discussion, cela en valait la peine.

Vous pouvez utiliser cette macro :
Code:
Sub TrierCommentaire()
'se lance par Ctrl+T
Dim c As Range, sep$, s
Set c = [G15] 'à adapter
sep = vbLf & "- " 'séparateur à adapter
If c.Comment Is Nothing Then Exit Sub
s = Split(c.Comment.Text, sep)
If UBound(s) < 2 Then Exit Sub
Application.ScreenUpdating = False
With Workbooks.Add.Sheets(1).[A1].Resize(UBound(s) + 1) 'classeur auxiliaire
  .Value = Application.Transpose(s)
  .Sort .Columns(1), xlAscending, Header:=xlYes
  c.Comment.Text Join(Application.Transpose(.Value), sep)
  .Parent.Parent.Close False 'fermeture du classeur auxiliaire
End With
c.Comment.Shape.TextFrame.Characters(Len(s(0)) + 1).Font.Bold = False 'non gras
End Sub
Sur le fichier joint lancez-la par les touches Ctrl+T.

A+
 

Pièces jointes

  • Tri commentaire(1).xlsm
    22.9 KB · Affichages: 27

job75

XLDnaute Barbatruc
Re,

Si l'on veut trier tous les commentaires d'une plage utiliser :
Code:
Sub TrierCommentaires()
'se lance par Ctrl+T
Dim r As Range, sep$, s
Set r = [G:G] 'plage à adapter
sep = vbLf & "- " 'séparateur à adapter
Application.ScreenUpdating = False
On Error Resume Next 'si aucun commentaire
Set r = r.SpecialCells(xlCellTypeComments)
On Error GoTo 0
If r Is Nothing Then Exit Sub
With Workbooks.Add.Sheets(1).[A1] 'classeur auxiliaire
  For Each r In r
    s = Split(r.Comment.Text, sep)
    If UBound(s) > 1 Then
      With .Resize(UBound(s) + 1)
        .Value = Application.Transpose(s)
        .Sort .Cells, xlAscending, Header:=xlYes
        r.Comment.Text Join(Application.Transpose(.Value), sep)
      End With
      r.Comment.Shape.TextFrame.Characters(Len(s(0)) + 1).Font.Bold = False 'non gras
    End If
  Next
  .Parent.Parent.Close False 'fermeture du classeur auxiliaire
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Tri commentaire(2).xlsm
    23.9 KB · Affichages: 24

job75

XLDnaute Barbatruc
Re,

Enfin on peut trier sans classeur auxiliaire avec la macro Quick sort :
Code:
Sub TrierCommentaires()
'se lance par Ctrl+T
Dim r As Range, sep$, s, a(), i
Set r = [G:G] 'plage à adapter
sep = vbLf & "- " 'séparateur à adapter
On Error Resume Next 'si aucun commentaire
Set r = r.SpecialCells(xlCellTypeComments)
On Error GoTo 0
If r Is Nothing Then Exit Sub
For Each r In r
  s = Split(r.Comment.Text, sep)
  If UBound(s) > 1 Then
    ReDim a(UBound(s) - 1)
    For i = 0 To UBound(a)
      If IsNumeric(s(i + 1)) Then a(i) = CDbl(s(i + 1)) Else a(i) = s(i + 1)
    Next
    tri a, 0, UBound(a)
    r.Comment.Text s(0) & sep & Join(a, sep)
    r.Comment.Shape.TextFrame.Characters(Len(s(0)) + 1).Font.Bold = False 'non gras
  End If
Next
End Sub

Sub tri(a, gauc, droi)    ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Fichier (3).

Bonne fin de soirée.
 

Pièces jointes

  • Tri commentaire(3).xlsm
    24.7 KB · Affichages: 29

job75

XLDnaute Barbatruc
Bonjour Etevaldo Santos, le forum,

Sur Win 10 - Excel 2013 j'ai testé avec 40 commentaires (identiques bien sûr) en colonne G.

La macro du post #10 s'exécute en 0,8 seconde, celle du post #11 en 2,6 secondes.

Mais si l'on ajoute Application.ScreenUpdating = False cette dernière s'exécute en 0,3 seconde.

Bonne journée.
 

Etevaldo Santos

XLDnaute Nouveau
Bonjour Etevaldo Santos, le forum,

Sur Win 10 - Excel 2013 j'ai testé avec 40 commentaires (identiques bien sûr) en colonne G.

La macro du post #10 s'exécute en 0,8 seconde, celle du post #11 en 2,6 secondes.

Mais si l'on ajoute Application.ScreenUpdating = False cette dernière s'exécute en 0,3 seconde.

Bonne journée.

Bonjour Job75;

Merci beaucoup, pour votre grand aide et por la reponse si vite.

J'aurais voulu ouvrir une discução précise sur ce theme, mais malheureusement, comme je suis nouveau par ici, je ne savais pas comment j'ai devrais le faire.

Mais enfin, j'ai vai recherché les information pour que dès la prochaine fois je sache comment le faire.

J'ai vous remerci encore, pour le temps depensé pour m'aide sur mes doutes.

Vraiment tous les fichier que vous avez fait responds pleinement mes besoins e sincerement vous avez depassés toutes mes attentes... "c'est super sympa".

Merci d'avance sur l'aide pour mes prochaines doutes et de votre pacience en nous aider à tous.

A très bientôt

Etevaldo
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof