Est-il possible de masquer des lignes selon la valeur d'une cellule sans boucler sur la plage ?
L'idée est quelque chose du genre (mais qui ne fonctionne pas bien sÍ»r !!!) :
Sub test()
With Feuil1
With .Range("A1:A8")
If .Value = "x" Then .EntireRow.Hidden = True
End With
End With
End Sub
Merci d'avance Í tout généreux contributeur !!
Bon week-end,
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Le 22/04/22 Í 10:04, ThierryP a écrit :
Bonjour Denis et le forum, Est-il possible de masquer des lignes selon la valeur d'une cellule sans boucler sur la plage ? L'idée est quelque chose du genre (mais qui ne fonctionne pas bien sÍ»r !!!) : Sub test() With Feuil1 With .Range("A1:A8") If .Value = "x" Then .EntireRow.Hidden = True End With End With End Sub Merci d'avance Í tout généreux contributeur !! Bon week-end, ThierryP
Bonjour, Ce que tu demandes est impossible quant Í ta manière de procéder. Sauf un cas d'exception, une colonne contenant qu'UNE valeur numérique dans différentes cellules et les autres cellules du texte. la ligne de code serait : Range("A1:A10").SpecialCells(xlCellTypeConstants, 1).EntireRow.Hidden = True Ou une seule valeur alphabétique dans plusieurs cellules, il pourrait y avoir dans les autres cellules des valeurs numériques. Range("A1:A10").SpecialCells(xlCellTypeConstants, 2).EntireRow.Hidden = True Sinon, tu peux appliquer cette procédure qui est très rapide. Elle masque toutes les lignes en une seule fois. '-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1 Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart) If Not Trouve Is Nothing Then Adr = Trouve.Address Do T = T & "," & Trouve.Address Set Trouve = .FindNext(Trouve) Loop Until Trouve.Address = Adr End If End With T = Right(T, Len(T) - 1) With Feuil1 .Range(T).EntireRow.Hidden = True End With End Sub '-------------------------------------- MichD
Le 22/04/22 Í 10:04, ThierryP a écrit :
Bonjour Denis et le forum,
Est-il possible de masquer des lignes selon la valeur d'une cellule sans boucler sur la plage ?
L'idée est quelque chose du genre (mais qui ne fonctionne pas bien sÍ»r !!!) :
Sub test()
With Feuil1
With .Range("A1:A8")
If .Value = "x" Then .EntireRow.Hidden = True
End With
End With
End Sub
Merci d'avance Í tout généreux contributeur !!
Bon week-end,
ThierryP
Bonjour,
Ce que tu demandes est impossible quant Í ta manière de procéder. Sauf
un cas d'exception, une colonne contenant qu'UNE valeur numérique dans
différentes cellules et les autres cellules du texte.
Sinon, tu peux appliquer cette procédure qui est très rapide.
Elle masque toutes les lignes en une seule fois.
'--------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim X As Variant, Adr As String
Dim T As String
With Feuil1
Set Rg = .Range("A1:A8")
End With
'X la valeur dont la ligne doit être masquée
X = 1
With Rg
Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
T = T & "," & Trouve.Address
Set Trouve = .FindNext(Trouve)
Loop Until Trouve.Address = Adr
End If
End With
T = Right(T, Len(T) - 1)
With Feuil1
.Range(T).EntireRow.Hidden = True
End With
Bonjour Denis et le forum, Est-il possible de masquer des lignes selon la valeur d'une cellule sans boucler sur la plage ? L'idée est quelque chose du genre (mais qui ne fonctionne pas bien sÍ»r !!!) : Sub test() With Feuil1 With .Range("A1:A8") If .Value = "x" Then .EntireRow.Hidden = True End With End With End Sub Merci d'avance Í tout généreux contributeur !! Bon week-end, ThierryP
Bonjour, Ce que tu demandes est impossible quant Í ta manière de procéder. Sauf un cas d'exception, une colonne contenant qu'UNE valeur numérique dans différentes cellules et les autres cellules du texte. la ligne de code serait : Range("A1:A10").SpecialCells(xlCellTypeConstants, 1).EntireRow.Hidden = True Ou une seule valeur alphabétique dans plusieurs cellules, il pourrait y avoir dans les autres cellules des valeurs numériques. Range("A1:A10").SpecialCells(xlCellTypeConstants, 2).EntireRow.Hidden = True Sinon, tu peux appliquer cette procédure qui est très rapide. Elle masque toutes les lignes en une seule fois. '-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1 Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart) If Not Trouve Is Nothing Then Adr = Trouve.Address Do T = T & "," & Trouve.Address Set Trouve = .FindNext(Trouve) Loop Until Trouve.Address = Adr End If End With T = Right(T, Len(T) - 1) With Feuil1 .Range(T).EntireRow.Hidden = True End With End Sub '-------------------------------------- MichD
MichD
Le 22/04/22 Í 11:18, MichD a écrit :
'-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1    Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg    Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)    If Not Trouve Is Nothing Then        Adr = Trouve.Address        Do            T = T & "," & Trouve.Address            Set Trouve = .FindNext(Trouve)        Loop Until Trouve.Address = Adr    End If End With T = Right(T, Len(T) - 1) With Feuil1    .Range(T).EntireRow.Hidden = True End With End Sub '--------------------------------------
Légère modification afin d'éviter une erreur, si tu n’as aucune occurrence du nombre recherché dans la plage de cellules. '-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1 Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart) If Not Trouve Is Nothing Then Adr = Trouve.Address Do T = T & "," & Trouve.Address Set Trouve = .FindNext(Trouve) Loop Until Trouve.Address = Adr End If T = Right(T, Len(T) - 1) With Feuil1 .Range(T).EntireRow.Hidden = True End With End With End Sub '-------------------------------------- MichD
Le 22/04/22 Í 11:18, MichD a écrit :
'--------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim X As Variant, Adr As String
Dim T As String
With Feuil1
   Set Rg = .Range("A1:A8")
End With
'X la valeur dont la ligne doit être masquée
X = 1
With Rg
   Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)
   If Not Trouve Is Nothing Then
       Adr = Trouve.Address
       Do
           T = T & "," & Trouve.Address
           Set Trouve = .FindNext(Trouve)
       Loop Until Trouve.Address = Adr
   End If
End With
T = Right(T, Len(T) - 1)
With Feuil1
   .Range(T).EntireRow.Hidden = True
End With
End Sub
'--------------------------------------
Légère modification afin d'éviter une erreur, si tu n’as aucune
occurrence du nombre recherché dans la plage de cellules.
'--------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim X As Variant, Adr As String
Dim T As String
With Feuil1
Set Rg = .Range("A1:A8")
End With
'X la valeur dont la ligne doit être masquée
X = 1
With Rg
Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
T = T & "," & Trouve.Address
Set Trouve = .FindNext(Trouve)
Loop Until Trouve.Address = Adr
End If
T = Right(T, Len(T) - 1)
With Feuil1
.Range(T).EntireRow.Hidden = True
End With
End With
End Sub
'--------------------------------------
'-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1    Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg    Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)    If Not Trouve Is Nothing Then        Adr = Trouve.Address        Do            T = T & "," & Trouve.Address            Set Trouve = .FindNext(Trouve)        Loop Until Trouve.Address = Adr    End If End With T = Right(T, Len(T) - 1) With Feuil1    .Range(T).EntireRow.Hidden = True End With End Sub '--------------------------------------
Légère modification afin d'éviter une erreur, si tu n’as aucune occurrence du nombre recherché dans la plage de cellules. '-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1 Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart) If Not Trouve Is Nothing Then Adr = Trouve.Address Do T = T & "," & Trouve.Address Set Trouve = .FindNext(Trouve) Loop Until Trouve.Address = Adr End If T = Right(T, Len(T) - 1) With Feuil1 .Range(T).EntireRow.Hidden = True End With End With End Sub '-------------------------------------- MichD
MichD
Le 24/04/22 Í 18:11, MichD a écrit :
Le 22/04/22 Í 11:18, MichD a écrit :
'-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1     Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg     Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)     If Not Trouve Is Nothing Then         Adr = Trouve.Address         Do             T = T & "," & Trouve.Address             Set Trouve = .FindNext(Trouve)         Loop Until Trouve.Address = Adr     End If End With T = Right(T, Len(T) - 1) With Feuil1     .Range(T).EntireRow.Hidden = True End With End Sub '--------------------------------------
Légère modification afin d'éviter une erreur, si tu n’as aucune occurrence du nombre recherché dans la plage de cellules. '-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1    Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg    Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)    If Not Trouve Is Nothing Then        Adr = Trouve.Address        Do            T = T & "," & Trouve.Address            Set Trouve = .FindNext(Trouve)        Loop Until Trouve.Address = Adr    End If   T = Right(T, Len(T) - 1)   With Feuil1      .Range(T).EntireRow.Hidden = True  End With End With End Sub '-------------------------------------- MichD
Même pas capable de faire un copier-coller correctement! '-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1 Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart) If Not Trouve Is Nothing Then Adr = Trouve.Address Do T = T & "," & Trouve.Address Set Trouve = .FindNext(Trouve) Loop Until Trouve.Address = Adr T = Right(T, Len(T) - 1) With Feuil1 .Range(T).EntireRow.Hidden = True End With End If End With End Sub '-------------------------------------- MichD
Le 24/04/22 Í 18:11, MichD a écrit :
Le 22/04/22 Í 11:18, MichD a écrit :
'--------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim X As Variant, Adr As String
Dim T As String
With Feuil1
    Set Rg = .Range("A1:A8")
End With
'X la valeur dont la ligne doit être masquée
X = 1
With Rg
    Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)
    If Not Trouve Is Nothing Then
        Adr = Trouve.Address
        Do
            T = T & "," & Trouve.Address
            Set Trouve = .FindNext(Trouve)
        Loop Until Trouve.Address = Adr
    End If
End With
T = Right(T, Len(T) - 1)
With Feuil1
    .Range(T).EntireRow.Hidden = True
End With
End Sub
'--------------------------------------
Légère modification afin d'éviter une erreur, si tu n’as aucune
occurrence du nombre recherché dans la plage de cellules.
'--------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim X As Variant, Adr As String
Dim T As String
With Feuil1
   Set Rg = .Range("A1:A8")
End With
'X la valeur dont la ligne doit être masquée
X = 1
With Rg
   Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)
   If Not Trouve Is Nothing Then
       Adr = Trouve.Address
       Do
           T = T & "," & Trouve.Address
           Set Trouve = .FindNext(Trouve)
       Loop Until Trouve.Address = Adr
   End If
  T = Right(T, Len(T) - 1)
  With Feuil1
     .Range(T).EntireRow.Hidden = True
 End With
End With
End Sub
'--------------------------------------
MichD
Même pas capable de faire un copier-coller correctement!
'--------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim X As Variant, Adr As String
Dim T As String
With Feuil1
Set Rg = .Range("A1:A8")
End With
'X la valeur dont la ligne doit être masquée
X = 1
With Rg
Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
T = T & "," & Trouve.Address
Set Trouve = .FindNext(Trouve)
Loop Until Trouve.Address = Adr
T = Right(T, Len(T) - 1)
With Feuil1
.Range(T).EntireRow.Hidden = True
End With
End If
End With
End Sub
'--------------------------------------
'-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1     Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg     Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)     If Not Trouve Is Nothing Then         Adr = Trouve.Address         Do             T = T & "," & Trouve.Address             Set Trouve = .FindNext(Trouve)         Loop Until Trouve.Address = Adr     End If End With T = Right(T, Len(T) - 1) With Feuil1     .Range(T).EntireRow.Hidden = True End With End Sub '--------------------------------------
Légère modification afin d'éviter une erreur, si tu n’as aucune occurrence du nombre recherché dans la plage de cellules. '-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1    Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg    Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart)    If Not Trouve Is Nothing Then        Adr = Trouve.Address        Do            T = T & "," & Trouve.Address            Set Trouve = .FindNext(Trouve)        Loop Until Trouve.Address = Adr    End If   T = Right(T, Len(T) - 1)   With Feuil1      .Range(T).EntireRow.Hidden = True  End With End With End Sub '-------------------------------------- MichD
Même pas capable de faire un copier-coller correctement! '-------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String With Feuil1 Set Rg = .Range("A1:A8") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg Set Trouve = .Find(What:=X, LookIn:=xlValues, Lookat:=xlPart) If Not Trouve Is Nothing Then Adr = Trouve.Address Do T = T & "," & Trouve.Address Set Trouve = .FindNext(Trouve) Loop Until Trouve.Address = Adr T = Right(T, Len(T) - 1) With Feuil1 .Range(T).EntireRow.Hidden = True End With End If End With End Sub '-------------------------------------- MichD
ThierryP
Bonjour Denis, Toujours ausi efficace ! Merci pour le coup de main ! ThierryP
Bonjour Denis, Toujours ausi efficace ! Merci pour le coup de main ! ThierryP
MichD
Le 25/04/22 Í 04:22, ThierryP a écrit :
Bonjour Denis, Toujours ausi efficace ! Merci pour le coup de main ! ThierryP
Range(T)... Dans la procédure soumise, il y a une limitation. La variable "T" contenant les adresses des cellules contenant la valeur recherchée ne peut pas excéder 255 caractères, cela limite est limitatif sur une grande plage de cellule o͹ la variable "T" pourrait être plus grande que 255 caractères. La procédure suivante est aussi très rapide et elle est non limitative sur la longueur de la chaÍ®ne de caractères contenue dans la variable T. '------------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String, Sh As Worksheet Application.ScreenUpdating = False Application.ScreenUpdating = False 'Nom Feuille Í adapter Set Sh = Worksheets("Feuil4") With Sh 'Plage de cellule Í adapter Set Rg = .Range("A1:A10000") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg Set Trouve = .Find(What:=X, After:=Sh.Cells(Rg.Count, Rg.Column), _ LookIn:=xlValues, Lookat:=xlPart, SearchOrder:=xlNext) If Not Trouve Is Nothing Then Adr = Trouve.Address Do T = T & "," & Trouve.Address(0, 0) Set Trouve = .FindNext(Trouve) If Len(T) > 240 Then T = Right(T, Len(T) - 1) With Sh .Range(T).EntireRow.Hidden = True T = "" End With End If If Trouve Is Nothing Then Exit Do Loop Until Trouve.Address = Adr If T <> "" Then T = Right(T, Len(T) - 1) With Sh .Range(T).EntireRow.Hidden = True T = "" End With End If End If End With Application.ScreenUpdating = False Application.ScreenUpdating = False End Sub '------------------------------------------- MichD
Le 25/04/22 Í 04:22, ThierryP a écrit :
Bonjour Denis,
Toujours ausi efficace !
Merci pour le coup de main !
ThierryP
Range(T)...
Dans la procédure soumise, il y a une limitation. La variable "T"
contenant les adresses des cellules contenant la valeur recherchée ne
peut pas excéder 255 caractères, cela limite est limitatif sur une
grande plage de cellule o͹ la variable "T" pourrait être plus grande que
255 caractères.
La procédure suivante est aussi très rapide et elle est non limitative
sur la longueur de la chaÍ®ne de caractères contenue dans la variable T.
'-------------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim X As Variant, Adr As String
Dim T As String, Sh As Worksheet
'Nom Feuille Í adapter
Set Sh = Worksheets("Feuil4")
With Sh
'Plage de cellule Í adapter
Set Rg = .Range("A1:A10000")
End With
'X la valeur dont la ligne doit être masquée
X = 1
With Rg
Set Trouve = .Find(What:=X, After:=Sh.Cells(Rg.Count, Rg.Column), _
LookIn:=xlValues, Lookat:=xlPart, SearchOrder:=xlNext)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
T = T & "," & Trouve.Address(0, 0)
Set Trouve = .FindNext(Trouve)
If Len(T) > 240 Then
T = Right(T, Len(T) - 1)
With Sh
.Range(T).EntireRow.Hidden = True
T = ""
End With
End If
If Trouve Is Nothing Then Exit Do
Loop Until Trouve.Address = Adr
If T <> "" Then
T = Right(T, Len(T) - 1)
With Sh
.Range(T).EntireRow.Hidden = True
T = ""
End With
End If
End If
End With
Application.ScreenUpdating = False
Application.ScreenUpdating = False
End Sub
'-------------------------------------------
Bonjour Denis, Toujours ausi efficace ! Merci pour le coup de main ! ThierryP
Range(T)... Dans la procédure soumise, il y a une limitation. La variable "T" contenant les adresses des cellules contenant la valeur recherchée ne peut pas excéder 255 caractères, cela limite est limitatif sur une grande plage de cellule o͹ la variable "T" pourrait être plus grande que 255 caractères. La procédure suivante est aussi très rapide et elle est non limitative sur la longueur de la chaÍ®ne de caractères contenue dans la variable T. '------------------------------------------- Sub test() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As String, Sh As Worksheet Application.ScreenUpdating = False Application.ScreenUpdating = False 'Nom Feuille Í adapter Set Sh = Worksheets("Feuil4") With Sh 'Plage de cellule Í adapter Set Rg = .Range("A1:A10000") End With 'X la valeur dont la ligne doit être masquée X = 1 With Rg Set Trouve = .Find(What:=X, After:=Sh.Cells(Rg.Count, Rg.Column), _ LookIn:=xlValues, Lookat:=xlPart, SearchOrder:=xlNext) If Not Trouve Is Nothing Then Adr = Trouve.Address Do T = T & "," & Trouve.Address(0, 0) Set Trouve = .FindNext(Trouve) If Len(T) > 240 Then T = Right(T, Len(T) - 1) With Sh .Range(T).EntireRow.Hidden = True T = "" End With End If If Trouve Is Nothing Then Exit Do Loop Until Trouve.Address = Adr If T <> "" Then T = Right(T, Len(T) - 1) With Sh .Range(T).EntireRow.Hidden = True T = "" End With End If End If End With Application.ScreenUpdating = False Application.ScreenUpdating = False End Sub '------------------------------------------- MichD
ThierryP
Re-bonjour ! Oui, je m'en suis aperçu et je m'en suis sorti en déclarant T en tant que Range et tout roule ! Encore merci ! ThierryP
Dans la procédure soumise, il y a une limitation. La variable "T" contenant les adresses des cellules contenant la valeur recherchée ne peut pas excéder 255 caractères, cela limite est limitatif sur une grande plage de cellule o͹ la variable "T" pourrait être plus grande que 255 caractères.
Re-bonjour !
Oui, je m'en suis aperçu et je m'en suis sorti en déclarant T en tant que Range et tout roule !
Encore merci !
ThierryP
Dans la procédure soumise, il y a une limitation. La variable "T"
contenant les adresses des cellules contenant la valeur recherchée ne
peut pas excéder 255 caractères, cela limite est limitatif sur une
grande plage de cellule o͹ la variable "T" pourrait être plus grande que
255 caractères.
Re-bonjour ! Oui, je m'en suis aperçu et je m'en suis sorti en déclarant T en tant que Range et tout roule ! Encore merci ! ThierryP
Dans la procédure soumise, il y a une limitation. La variable "T" contenant les adresses des cellules contenant la valeur recherchée ne peut pas excéder 255 caractères, cela limite est limitatif sur une grande plage de cellule o͹ la variable "T" pourrait être plus grande que 255 caractères.
MichD
Le 25/04/22 Í 08:51, ThierryP a écrit :
Re-bonjour ! Oui, je m'en suis aperçu et je m'en suis sorti en déclarant T en tant que Range et tout roule ! Encore merci ! ThierryP
Dans la procédure soumise, il y a une limitation. La variable "T" contenant les adresses des cellules contenant la valeur recherchée ne peut pas excéder 255 caractères, cela limite est limitatif sur une grande plage de cellule o͹ la variable "T" pourrait être plus grande que 255 caractères.
Tu peux publier ton code ? MichD
Le 25/04/22 Í 08:51, ThierryP a écrit :
Re-bonjour !
Oui, je m'en suis aperçu et je m'en suis sorti en déclarant T en tant que Range et tout roule !
Encore merci !
ThierryP
Dans la procédure soumise, il y a une limitation. La variable "T"
contenant les adresses des cellules contenant la valeur recherchée ne
peut pas excéder 255 caractères, cela limite est limitatif sur une
grande plage de cellule o͹ la variable "T" pourrait être plus grande que
255 caractères.
Re-bonjour ! Oui, je m'en suis aperçu et je m'en suis sorti en déclarant T en tant que Range et tout roule ! Encore merci ! ThierryP
Dans la procédure soumise, il y a une limitation. La variable "T" contenant les adresses des cellules contenant la valeur recherchée ne peut pas excéder 255 caractères, cela limite est limitatif sur une grande plage de cellule o͹ la variable "T" pourrait être plus grande que 255 caractères.
Tu peux publier ton code ? MichD
MichD
Le 26/04/22 Í 01:54, ThierryP a écrit :
Bonjour Denis, Voici : '----------------------------------------------------------------- Private Sub Cache_Click() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As Range Application.ScreenUpdating = False With Feuil2 Derlig = .Range("A1000000").End(xlUp).Row DerCol = Split(Columns(.Range("$ZZ$2").End(xlToLeft).Column + 1).Address(ColumnAbsolute:úlse), ":")(1) Set Rg = .Range("$S$2:$" & DerCol & Derlig) If Cache Then Cache.Caption = "Tout" With Rg Set T = .Find(What:="x", LookIn:=xlFormulas, LookAt:=xlPart) Set Trouve = .Find(What:="x", LookIn:=xlFormulas, LookAt:=xlPart) If Not Trouve Is Nothing Then Adr = Trouve.Address Do Set T = Union(T, Trouve) Set Trouve = .FindNext(Trouve) Loop Until Trouve.Address = Adr End If End With T.EntireRow.Hidden = True Else Cache.Caption = "Non soldées" Rg.EntireRow.Hidden = False End If End With End Sub '------------------------------------------------------------- ThierryP
Bonjour, C'est bien. Le seul bémol, c'est cette ligne de code: Set T = Union(T, Trouve) Lorsque tu augmentes l'étendue de la plage "T", cela (union) augmente le temps d'exécution. Ça va pour une petite plage. MichD
Le 26/04/22 Í 01:54, ThierryP a écrit :
Bonjour Denis,
Voici :
'-----------------------------------------------------------------
Private Sub Cache_Click()
Dim Rg As Range, Trouve As Range
Dim X As Variant, Adr As String
Dim T As Range
Application.ScreenUpdating = False
With Feuil2
Derlig = .Range("A1000000").End(xlUp).Row
DerCol = Split(Columns(.Range("$ZZ$2").End(xlToLeft).Column + 1).Address(ColumnAbsolute:úlse), ":")(1)
Set Rg = .Range("$S$2:$" & DerCol & Derlig)
If Cache Then
Cache.Caption = "Tout"
With Rg
Set T = .Find(What:="x", LookIn:=xlFormulas, LookAt:=xlPart)
Set Trouve = .Find(What:="x", LookIn:=xlFormulas, LookAt:=xlPart)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
Set T = Union(T, Trouve)
Set Trouve = .FindNext(Trouve)
Loop Until Trouve.Address = Adr
End If
End With
T.EntireRow.Hidden = True
Else
Cache.Caption = "Non soldées"
Rg.EntireRow.Hidden = False
End If
End With
End Sub
'-------------------------------------------------------------
ThierryP
Bonjour,
C'est bien. Le seul bémol, c'est cette ligne de code:
Set T = Union(T, Trouve)
Lorsque tu augmentes l'étendue de la plage "T", cela (union) augmente le
temps d'exécution. Ça va pour une petite plage.
Bonjour Denis, Voici : '----------------------------------------------------------------- Private Sub Cache_Click() Dim Rg As Range, Trouve As Range Dim X As Variant, Adr As String Dim T As Range Application.ScreenUpdating = False With Feuil2 Derlig = .Range("A1000000").End(xlUp).Row DerCol = Split(Columns(.Range("$ZZ$2").End(xlToLeft).Column + 1).Address(ColumnAbsolute:úlse), ":")(1) Set Rg = .Range("$S$2:$" & DerCol & Derlig) If Cache Then Cache.Caption = "Tout" With Rg Set T = .Find(What:="x", LookIn:=xlFormulas, LookAt:=xlPart) Set Trouve = .Find(What:="x", LookIn:=xlFormulas, LookAt:=xlPart) If Not Trouve Is Nothing Then Adr = Trouve.Address Do Set T = Union(T, Trouve) Set Trouve = .FindNext(Trouve) Loop Until Trouve.Address = Adr End If End With T.EntireRow.Hidden = True Else Cache.Caption = "Non soldées" Rg.EntireRow.Hidden = False End If End With End Sub '------------------------------------------------------------- ThierryP
Bonjour, C'est bien. Le seul bémol, c'est cette ligne de code: Set T = Union(T, Trouve) Lorsque tu augmentes l'étendue de la plage "T", cela (union) augmente le temps d'exécution. Ça va pour une petite plage. MichD
ThierryP
re-bonjour Denis, Le "C'est bien" de la part d'un gourou, "it makes my day " !!!! :-) :-) Tu as sÍ»rement raison, mais dans le fichier que j'ai créé, il y aura au maximum quelques centaines de lignes et la différence n'est pas visible Í l'oeil nu ! Et comme c'est une appli "propriétaire", je ne me préoccupe pas trop de la rendre "portable" ! Merci pour ton retour, ThierryP
Bonjour, C'est bien. Le seul bémol, c'est cette ligne de code: Set T = Union(T, Trouve) Lorsque tu augmentes l'étendue de la plage "T", cela (union) augmente le temps d'exécution. Ça va pour une petite plage. MichD
re-bonjour Denis,
Le "C'est bien" de la part d'un gourou, "it makes my day " !!!! :-) :-)
Tu as sÍ»rement raison, mais dans le fichier que j'ai créé, il y aura au maximum quelques centaines de lignes et la différence n'est pas visible Í l'oeil nu !
Et comme c'est une appli "propriétaire", je ne me préoccupe pas trop de la rendre "portable" !
Merci pour ton retour,
ThierryP
Bonjour,
C'est bien. Le seul bémol, c'est cette ligne de code:
Set T = Union(T, Trouve)
Lorsque tu augmentes l'étendue de la plage "T", cela (union) augmente le
temps d'exécution. Ça va pour une petite plage.
re-bonjour Denis, Le "C'est bien" de la part d'un gourou, "it makes my day " !!!! :-) :-) Tu as sÍ»rement raison, mais dans le fichier que j'ai créé, il y aura au maximum quelques centaines de lignes et la différence n'est pas visible Í l'oeil nu ! Et comme c'est une appli "propriétaire", je ne me préoccupe pas trop de la rendre "portable" ! Merci pour ton retour, ThierryP
Bonjour, C'est bien. Le seul bémol, c'est cette ligne de code: Set T = Union(T, Trouve) Lorsque tu augmentes l'étendue de la plage "T", cela (union) augmente le temps d'exécution. Ça va pour une petite plage. MichD