Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 masquer des lignes sous conditions

ivan27

XLDnaute Occasionnel
Bonjour à tous,

Dans une liste de données d'une trentaine de colonnes et de 12 à 20.000 lignes, je souhaite masquer les lignes pour lesquelles les données sont identiques dans les colonnes U et V.
Merci d'avance pour votre aide.
Bien cordialement et bon week-end,
Ivan
 

Pièces jointes

  • essai.xlsx
    14.3 KB · Affichages: 41
  • essai.xlsx
    14.3 KB · Affichages: 42

M12

XLDnaute Accro
Re : masquer des lignes sous conditions

Bonjour,

Code à placer dans la feuille concernée

Code:
Option Explicit

Sub test()
Dim F1 As Range
Dim i As Integer

Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Set F1 = Sheets("Feuil1").Range("U2:U" & DernLigne)

    For i = 1 To F1.Rows.Count
        
            If F1(i, 1).Value = F1(i, 2).Value Then
            Rows(i & ":" & i).EntireRow.Hidden = True
            End If
    Next i
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : masquer des lignes sous conditions

Bonjour le fil, bonjour le forum,

Ton code a un décalage M12, tu boucles en partant de 2 mais tu récupères le numéro de ligne I au lieu de I+1 !...

La même chose en plus rapide puisqu'elle utilise un tableau virtuel...

Code:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim J As Long 'déclare la variable J (incrément)

Application.ScreenUpdating = False 'masque les rafraîchissement d'écran
Set O = Sheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    'condition : si la donnée ligne I colonne 21 est égale à la donnée ligne I colonne 22 de TV
    If TV(I, 21) = TV(I, 22) Then
        ReDim Preserve TL(J) 'redimensionne le tableau de ligne TL
        TL(J) = I 'récupère la ligne I dans le tableau TL(J)
        J = J + 1 'indrémente J
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
For I = 0 To UBound(TL) 'boucle sur tous les éléments du tabelau TL
    O.Rows(TL(I)).Hidden = True 'masque la ligne correspondant à l'élément
Next I 'prochain élément de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissement d'écran
End Sub
 

ivan27

XLDnaute Occasionnel
Re : masquer des lignes sous conditions

Re bonjour le forum,
M12, Robert, merci pour vos propositions.
M12, après modification for i=1 en for i=2 ton code fonctionne parfaitement.
Robert, c'est parfait.
Je vous réitère mes remerciements.
Bon week-end à tous
Ivan
 

DoubleZero

XLDnaute Barbatruc
Re : masquer des lignes sous conditions

Bonjour à toutes et à tous,

Une autre suggestion avec le code suivant, logé dans le module de "Feuil1".

Code:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal c As Range, Cancel As Boolean)
    Cancel = -1
    Select Case c.Address
    Case "$A$1"
        Columns(1).Insert
        Range("a2:a" & Cells(Rows.Count, 22).End(xlUp).Row).FormulaR1C1 = "=EXACT(RC[21],RC[22])"
        Range("a1") = "?"
        Range("a1:aa1000000").AutoFilter Field:=1, Criteria1:="FAUX"
        Columns(1).ColumnWidth = 0.1
    Case "$B$1"
        c.AutoFilter
        Columns(1).Delete Shift:=xlToLeft
    End Select
End Sub

Action par clic double sur a1 ou b1.

Bise à Rbert.

A bientôt
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : masquer des lignes sous conditions

Bonjour à toutes et tous,

Un autre essai. Environ 1,6 sec. pour 19 998 lignes de données.

VB:
Sub Test()
Dim Nlig&, nCol&, xrg As Range, T
  T = Timer: Application.ScreenUpdating = False
  With Sheets("Feuil1")
    .Rows.Hidden = False
    Nlig = .Cells(.Rows.Count, "a").End(xlUp).Row
    If Nlig = 1 Then Exit Sub
    nCol = .UsedRange.Column + .UsedRange.Columns.Count
    With .Rows("2:" & Nlig)
      .Columns(nCol).FormulaLocal = "=(1/(u2<>v2))"
      On Error Resume Next
      Set xrg = .Columns(nCol).SpecialCells(xlCellTypeFormulas, 16)
      On Error GoTo 0
      If Not xrg Is Nothing Then xrg.EntireRow.Hidden = True
      .Columns(nCol).Delete
    End With
    Application.Goto [a1], True
  End With
  MsgBox Round((Timer - T), 2) & " sec."
End Sub
 

Pièces jointes

  • ivan27- Masquer Lignes- v1.xlsm
    22.7 KB · Affichages: 34

ivan27

XLDnaute Occasionnel
Re : masquer des lignes sous conditions

Merci pour vos nouvelles propositions.
Quelque soit le code testé, la vitesse est satisfaisante sur une liste de donnée "classique".
J'ai fait des tests sur des listes extraites de TCD et là, les temps son démultipliés.
Est-ce normal ?
Ivan
 

ivan27

XLDnaute Occasionnel
Re : masquer des lignes sous conditions

Bonsoir mapomme,

Je viens de faire un essai avec ton code sur une liste de 12000 lignes extraites d'un TCD et je n'ai pas constaté de problème de vitesse.

Impossible d'envoyer mon fichier test qui est trop volumineux pour le forum.

Le problème vient peut-être du fait que les valeurs de la colonne V sont extraites d'une autre liste avec RechercheV.

Je vais faire des tests pour confirmer et je reviendrai vers le forum le cas échéant.

Bonne soirée.

Ivan
 

Discussions similaires

  • Question
Microsoft 365 Listbox
Réponses
3
Affichages
358
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…