RoGx
Messages postés10Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention 9 mars 2010
-
9 mars 2010 à 21:57
RoGx
Messages postés10Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention 9 mars 2010
-
9 mars 2010 à 23:14
bonjour,
Je souhaite cacher certaines lignes de mon fichier Excel selon la valeur qui apparait dans une colonne de chacune des lignes. J'y suis arrivé et cela fonctionne bien. Par contre, le processus est très lent et l'affichage "clignote" durant le tri. Je suppose que c'est parce que j'évalue chacune des lignes et applique le format une ligne à la fois.
Je voudrais savoir s'il y a un moyen de créer un "range" ou un autre moyen de sélectionner plusieurs lignes dans un fichier excel QUI NE SONT PAS CONSÉCUTIVES et donc la valeur d'un des colonnes est la meme. Donc, je cherche un moyen de faire en VBA ce que l'usager fait en enfoncant CTRL et en cliquant sur chacune des qu'il veut sélectionner.
Une fois la sélection créée, je vais la cacher ou l'afficher d'un seul coup et j'espère que ce sera plus rapide.
voici mon code en ce moment (qui fonctionne), mais qui est très lent étant donné le nombre de lignes dans ma feuille.
merci de votre aide!
Private Sub AfficherLignesSelectionnees()
Dim i As Integer
For i = 1 To UsedRange.Rows.Count
If ((UsedRange(i, 13).Value "EN COURS" And ChkAfficherEnCours.Value True) Or _
(UsedRange(i, 13).Value "EN SUIVI" And ChkAfficherEnSuivi.Value True) Or _
(UsedRange(i, 13).Value "FERMÉ" And ChkAfficherFerme.Value True) Or _
(UsedRange(i, 13).Value <> "FERMÉ" And UsedRange(i, 13).Value <> "EN COURS" And UsedRange(i, 13).Value <> "EN SUIVI")) Then
'la ligne doit être affichée
Call RowShow(i, True)
Else
'la ligne doit être cachée
Call RowShow(i, False)
End If
Next
End Sub
Sub RowShow(myRow As Integer, bShow As Boolean)
Rows(myRow & ":" & myRow).Select
If (Selection.EntireRow.Hidden <> IIf(bShow = True, False, True)) Then
Selection.EntireRow.Hidden IIf(bShow True, False, True)
End If
End Sub
A voir également:
Sélection de plusieurs lignes NON-consécutives et application d'un formatage à c
RoGx
Messages postés10Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention 9 mars 2010 9 mars 2010 à 23:14
Oubliez ca, j'ai trouvé... et c'est SUPERBE.... fonctionne très rapidement et tout... alors pour la postérité:
Private Sub executerFiltre()
Dim i As Integer
Dim rMultiAfficher As range
Dim rMultiCacher As range
For i = 1 To UsedRange.Rows.Count
If ((UsedRange(i, 13).Value "EN COURS" And ChkAfficherEnCours.Value True) Or _
(UsedRange(i, 13).Value "EN SUIVI" And ChkAfficherEnSuivi.Value True) Or _
(UsedRange(i, 13).Value "FERMÉ" And ChkAfficherFerme.Value True) Or _
(UsedRange(i, 13).Value <> "FERMÉ" And UsedRange(i, 13).Value <> "EN COURS" And UsedRange(i, 13).Value <> "EN SUIVI")) Then
'la ligne doit être affichée
Set rMultiAfficher = Union(rMultiAfficher, Cells(i, 1))
Else
'la ligne doit être cachée
Set rMultiCacher = Union(rMultiCacher, Cells(i, 1))
End If
Next
'Activation de la propriété sur les 2 plages
If (Not rMultiAfficher Is Nothing) Then rMultiAfficher.EntireRow.Hidden = False
If (Not rMultiCacher Is Nothing) Then rMultiCacher.EntireRow.Hidden = True
End Sub
Function Union(Rng1 As range, Rng2 As range) As range
If Rng1 Is Nothing Then
Set Union = Rng2
ElseIf Rng2 Is Nothing Then
Set Union = Rng1
Else
Set Union = Application.Union(Rng1, Rng2)
End If
End Function