Amélioration macro masquer lignes

libellule85

XLDnaute Accro
Bonjour le forum,
J'ai récupéré une macro (code ci-dessous) pour masquer les lignes, macro qui fonctionne très bien.
Pour masquer les lignes actuellement je note dans la textbox qui s'ouvre les n° des lignes séparés par une virgule mais j'aimerais si c'est possible avoir également la possibilité de noter une plage de lignes à masquer par exemple de la 10 à la 20 en notant par exemple 10-20.

Code:
Private Sub CommandButton1_Click()
Dim sL$, tL, i%
sL = TextBox1
If sL = "" Then Exit Sub
tL = Split(sL, ",")
For i = 0 To UBound(tL)
    On Error Resume Next 'pour les farfelus !
    Rows(tL(i)).Hidden = True
    On Error GoTo 0
Next
Unload Me
End Sub

D'avance merci pour vos réponses
 

CBernardT

XLDnaute Barbatruc
Re : Amélioration macro masquer lignes

Bonjour libellule85 et le forum,

Une solution qui consiste à masquer les lignes ou lignes de cellules sélectionnées directement dans la feuille sans passer par la TextBox1 ?

Syntaxe :


Private Sub CommandButton1_Click()
Selection.EntireRow.Hidden = True
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Amélioration macro masquer lignes

Bonjour libellule85, CbernardT, le fil, le forum


Une façon de faire différente
(avec le filtre élaboré, ce qui veut dire qu'on pourrait se passer de macro ;) )

Mais voici la version VBA ( à tester sur une feuille vide d'un classeur vierge)
VB:
Sub M_Test_MasquerLIGNES_AVEC_FE()
'21/5/11
    With Range("A2")
        .Offset(-1, 0).Value = "ENTETE_COLONNE"
        .Value = "LIGNE2"
        .AutoFill Destination:=Range("A2:A30"), Type:=xlFillDefault
        .Offset(, 1).FormulaR1C1 = "=AND(ROW(RC[-1])>9,ROW(RC[-1])<21)"
        .Offset(-1, 0).Resize(30).AdvancedFilter _
                Action:=xlFilterInPlace, _
                CriteriaRange:=Range("B1:B2"), _
                Unique:=False
    End With
End Sub

libellule85
je te laisse adapter la macro ci-dessus avec une TextBox
Je reviendrai par ici au cas ou tu ne verrais pas comment faire
 
Dernière édition:

libellule85

XLDnaute Accro
Re : Amélioration macro masquer lignes

Bonjour le forum,
Je relance la discussion pour savoir si quelqu'un peut modifier (si celà est possible bien sûr) le code ci-dessous afin que l'on puisse saisir dans la textbox soit par numéros (séparés par une virgule si plusieurs ce qui fonctionne actuellement) soit par plage (par ex. de la ligne 10 à 20) : en fait, avoir le choix.

Code:
Private Sub CommandButton1_Click()
 Dim sL$, tL, i%
 sL = TextBox1
 If sL = "" Then Exit Sub
 tL = Split(sL, ",")
 For i = 0 To UBound(tL)
     On Error Resume Next 'pour les farfelus !
     Rows(tL(i)).Hidden = True
     On Error GoTo 0
 Next
 Unload Me
 End Sub

D'avance merci pour vos réponses
 

Staple1600

XLDnaute Barbatruc
Re : Amélioration macro masquer lignes

Re

Tu as testé ou pas ma précédente proposition ?

PS1:
Je relance la discussion pour savoir si quelqu'un peut modifier (si celà est possible bien sûr)
Oui... toi

Sur XLD, la coutume veut qu'on on aide les membres du forum qui postent des questions
à faire les choses par eux-même en suivant (ou pas) les divers conseils et solutions proposées.
PS2:
Si tu joignais un fichier exemple (comme suggéré par la charte d'XLD), il serait plus simple de t'aider.
C'est au demandeur de fournir un tel fichier, pas au répondeur :)







[avis personnel]
Donc cela ne te tombera tout cuit dans le bec :rolleyes:
(en tout cas cela ne devrait pas...)
[/avis personnel]
 
Dernière édition:

libellule85

XLDnaute Accro
Re : Amélioration macro masquer lignes

Re-Staple1600,
Tu as tout à fait raison il faut essayé de se débrouiller tout seul pour s'améliorer... Donc c'est ce que je vais faire...
Encore Merci
Libellule85


Par acquis de conscience ci-Joint mon fichier
 

Pièces jointes

  • BC Masquer Démasquer.xls
    50 KB · Affichages: 59

Staple1600

XLDnaute Barbatruc
Re : Amélioration macro masquer lignes

Re, Philippe (si je ne m'abuse)

Voici une première ébauche dont je laisse découvrir e souci
(sur lequel je sèche ... à moins d'inverser la logique:
Saisir les numéros de lignes que l'on tient à garder affichées, ce qui par conséquent masque celles qu'on voulait masquer ;) )
Code:
Private Sub CommandButton1_Click()
Dim sL$, sLL$, tL, i%, r As Range, rr As Range
sL = TextBox1
If sL = "" Then Exit Sub
tL = Split(sL, ","): [A1:A65536].Clear

Set r = Range("A2:A" & tL(UBound(tL)))
[Z1:Z65536].Clear: [A1] = "ML": [Z1] = "ML"
[Z2].Resize(UBound(tL) + 1) = Application.Transpose(tL)

Set rr = [Z1].Resize([Z65536].End(3).Row)
r.Formula = "=ROW()": r.Offset(-1, 0).AdvancedFilter _
                Action:=xlFilterInPlace, _
                CriteriaRange:=rr, Unique:=False
Unload Me
End Sub
PS: Aurais-tu pris la mouche ?
Mon avis personnel je le donne, on en tient compte ou pas. Ni plus, ni moins.
 

libellule85

XLDnaute Accro
Re : Amélioration macro masquer lignes

Re-Staple1600,
Non non je n'ai pas pris la mouche, mais n'y connaissant vraiment pas grand chose en vba c'est pour celà que je me suis tourner vers le forum. Concernant le fichier effectivement c'est une erreur de ma part de ne pas l'avoir joint.
En tous cas je te remercie de ton aide
@+
 

Staple1600

XLDnaute Barbatruc
Re : Amélioration macro masquer lignes

Re


Voici une mouture que je te laisse tester
(Chez moi le test est OK)

VB:
Private Sub CommandButton1_Click()
Dim sL$, tL, fc$: sL = TextBox1

If sL = "" Then Exit Sub

tL = Split(sL, ","): sLL = Join(tL, ";")
fc = "=INDEX({" & sLL & "},ROW())"

Range("A1:A" & tL(UBound(tL))).Formula = "=ROW()"
With Range("B1")
    .Resize([A65536].End(3).Row).Formula = fc
    .AutoFilter Field:=2, Criteria1:="<>#REF!", Operator:=xlAnd
End With

Unload Me
End Sub

J'étends ma lessive, je finis la vaisselle, je bois mon kawa, je fume ma cancerette puis je repasse dans le fil.

A+

PS: Comme le filtre élaboré me prenait le chou, je suis passé par le filtre automatique
 

Discussions similaires

Réponses
4
Affichages
836

Statistiques des forums

Discussions
312 389
Messages
2 087 936
Membres
103 678
dernier inscrit
bibitm