masquer lignes selon critère variable

Chasse

XLDnaute Occasionnel
Bonjour le Forum

A la fin de la macro j’aimerais masquer certaine ligne selon critère variable
Lignes 3:5 ; 12:14 et 18 :23 pour cette exemple
Sur le fichier joint j’ai mis 3 onglets « Aperçus avant la macro » « Après la macro » « Résultat souhaité » et un onglet « Autre résultat possible » pour montrer que les lignes à masquer change selon le résulta de la macro.

J’ai mis un essai de
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$A$3" Then
' Rows.Hidden = False
 Select Case Range("A3").Value
     Case ""
         Rows("3:5").Hidden = True
         End Select
    End If
 End Sub
dans la feuille « Aperçus avant la macro » mais je plante pour la suite

Merci de votre aide et A+
 

Pièces jointes

  • Essai Remb.xls
    136.5 KB · Affichages: 96
  • Essai Remb.xls
    136.5 KB · Affichages: 103
  • Essai Remb.xls
    136.5 KB · Affichages: 100

Gorfael

XLDnaute Barbatruc
Re : masquer lignes selon critère variable

Salut Chasse et le forum
A la fin de la macro j’aimerais masquer certaine ligne selon critère variable
Lignes 3:5 ; 12:14 et 18 :23 pour cette exemple
Pas sûr de comprendre tes critères, alors je suis allé voir tes macros et elles ne m'indiquent pas grand chose.

Tu as 3 plages. Tu utilises _change, pour déclencher ta macro sur Target :confused: Et tu utilises des "Else If" quand tu as plusieurs possibilités et "Select case" quand tu en as une seule :confused:
Il y a de l'illogisme dans l'air...

1ère constatation : Tes plages sont variables !
- de 3 à la ligne ayant en A "Pla AG", pour la première
- de ligne suivante A="Pla AG" à A="Pla AG" Pour les autres
=> on doit les définir au moment où on en a besoin

2ème constatation : Les déclencheurs de tes macros ont deux défauts :
- ils sont fixes alors que tes plages sont variables
- Ils ne concernent que les plages dont tu es à peu-pré sûr qu'ils contiennent quelque chose.

Mais comme je ne connais rien d'autre que ce qui m'a été fournis et que mon convertisseur Excel2003 fait des siennes, juste des idées.
- À chaque fois que la macro _Change intervient me semble inadéquat, je préfèrerais utiliser Workbook_BeforePrint du module ThisWorkBook (mais comme je ne suis pas sûr, du fait de la brume dans ma boule de cristal...)
Quand on veut Masquer/démasquer, sans ce préoccuper du déclencheur
- On détermine les plages
- On vérifie que la plage est vide (ou pas) pour la masquer (l'afficher), ligne par ligne, et que si toutes les lignes sont masquées, celle contenant le total le soit aussi
A+
Edit :
Petit rappel : tu es la seule personne qui sache comment doit fonctionner la macro, et on n'est ni devin, ni télépathe... alors explique comme si on ne savait pas !
 
Dernière édition:

Chasse

XLDnaute Occasionnel
Re : masquer lignes selon critère variable

Bonjour Gorfael

Petit rappel : tu es la seule personne qui sache comment doit fonctionner la macro, et on n'est ni devin, ni télépathe... alors explique comme si on ne savait pas !
Dans la feuil « 2011 » je sectionne les lignes « colonne M :N »selon DoubleClick
Code:
 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column <> 13 And Target.Column <> 14 Or Target.Count <> 1 Then Exit Sub
If Target = "X" Then
    Target = ""
Else
    Target = "X"
 End If
End Sub


Quand je clique sur le bouton « Déclencher » de la feuil « Aperçu avant la macro »
Les info de la feuil « 2011 » sont traitées et selon les critères, copiées dans la feuil « Aperçu avant la macro »

Code:
Sub Toto()
Dim rg As Range, c As Range, B As Range, rg2 As Range, rg3 As Range, rg4 As Range, rg5 As Range, rg6 As Range
Dim ws1 As Worksheet, ws2 As Worksheet, wsPL As Worksheet, pvttable As Worksheet
Dim sExpediteur As String, sDate As String, retour As String

Set ws1 = Sheets("2011")
Set rg = ws1.Range("M2:M35")

Set wsPL = Sheets("Aperçu avant la macro")

sDate = InputBox("Date de validité : ", "Pays", Date)
For Each c In rg
    If c = "X" Then
 wsPL.Rows("2:50").EntireRow.Hidden = False  

 Set rg3 = wsPL.Range("PLBio").End(xlUp).Offset(1, 0)
 Set rg4 = wsPL.Range("PLZü").End(xlUp).Offset(1, 0)
 Set rg5 = wsPL.Range("PLBe").End(xlUp).Offset(1, 0)

 If ws1.Range("B" & c.Row) = "719121" Then
 Range("Bioggio_insert").Offset(-1, 0).Insert
Range("biodate") = sDate
    rg3 = c.Offset(0, -12) 'N° ordre TMS
    rg3.Offset(0, 1) = c.Offset(0, -9) 'Expéditeur
    rg3.Offset(0, 2) = c.Offset(0, -8)  'CP
    rg3.Offset(0, 3) = c.Offset(0, -7)  'Localité
    rg3.Offset(0, 4) = c.Offset(0, -6) 'Destinataire
    rg3.Offset(0, 5) = c.Offset(0, -5)  'CP
    rg3.Offset(0, 6) = c.Offset(0, -4)  'Localité
    rg3.Offset(0, 7) = c.Offset(0, -3)  'n° envoie
    rg3.Offset(0, 9) = c.Offset(0, -2)  'n
    rg3.Offset(0, 10) = c.Offset(0, -1)
 
  ElseIf ws1.Range("B" & c.Row) = "719126" Then
 Range("Zürich_insert").Offset(-1, 0).Insert
    Range("PL_Zü_date") = sDate
    rg4 = c.Offset(0, -12) 'N° ordre TMS
    rg4.Offset(0, 1) = c.Offset(0, -9) 'Expéditeur
    rg4.Offset(0, 2) = c.Offset(0, -8)  'CP
    rg4.Offset(0, 3) = c.Offset(0, -7)  'Localité
    rg4.Offset(0, 4) = c.Offset(0, -6) 'Destinataire
    rg4.Offset(0, 5) = c.Offset(0, -5)  'CP
    rg4.Offset(0, 6) = c.Offset(0, -4)  'Localité
    rg4.Offset(0, 7) = c.Offset(0, -3)  'n° envoie
    rg4.Offset(0, 9) = c.Offset(0, -2)  'n
    rg4.Offset(0, 10) = c.Offset(0, -1)
    
  
  ElseIf ws1.Range("B" & c.Row) = "719119" Then
 Range("Bern_insert").Offset(-1, 0).Insert
   Range("Bedate") = sDate
    rg5 = c.Offset(0, -12) 'N° ordre TMS
    rg5.Offset(0, 1) = c.Offset(0, -9) 'Expéditeur
    rg5.Offset(0, 2) = c.Offset(0, -8)  'CP
    rg5.Offset(0, 3) = c.Offset(0, -7)  'Localité
    rg5.Offset(0, 4) = c.Offset(0, -6) 'Destinataire
    rg5.Offset(0, 5) = c.Offset(0, -5)  'CP
    rg5.Offset(0, 6) = c.Offset(0, -4)  'Localité
    rg5.Offset(0, 7) = c.Offset(0, -3)  'n° envoie
    rg5.Offset(0, 9) = c.Offset(0, -2)  'n
    rg5.Offset(0, 10) = c.Offset(0, -1)
 
    End If
    End If
        
Set c = Nothing
Next c

Set rg = ws1.Range("N2:N35")
For Each B In rg
ma_variable = B.Row
    If B = "X" Then
 ChoisirOptions.Show
End If
Set B = Nothing
Next B

End Sub

Dans mon fichier joint les cases sont déjà cochées et si tu clique sur le bt « Déclencher » tu devarais avoir le résulta de la feuil "Aprés la macro"

le
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$A$3" Then
' Rows.Hidden = False
 Select Case Range("A3").Value
     Case ""
         Rows("3:5").Hidden = True
         End Select
     End If
 End Sub
N’est qu’un essai et ne fonctionne que sur les lignes 3:5 je cherche la suite du code

je ne sais pas trop quoi dire de plus pour t'aider a m'aider

Merci et Cordiale salutation
 

Chasse

XLDnaute Occasionnel
Re : masquer lignes selon critère variable

Complément d’info

Si Range (« A3 ») = vide Masquer lignes (3 :5)

Si lignes entre Range((«PLBio») et range («PlZü ») = 2) Masquer Lignes (« PlZü « ) + les 2 précédentes

Si lignes entre Range((«PlZü ») et range («PlBe ») = 2) Masquer Lignes (« PlBe « ) + Les 2 précédentes

Si lignes entre Range((«PL_retour ») et range («PL_Livré_sans_Remb ») = 2) Masquer Ligne (« PL_retour « ) +Les 2 suivantes
Si lignes entre Range((«PL_Livré_sans_Remb ») et range («PL_Payé_à_l_expéditeur») = 2) Masquer Ligne (« PL_Livré_sans_Remb » ) + Les 2 suivantes
Si Range((«PL_Payé_à_l_expéditeur»).offset(1.0)=vide Masquer la ligne PL_Payé_à_l_expéditeur

Merci A+
 
Dernière édition:

Chasse

XLDnaute Occasionnel
Re : masquer lignes selon critère variable

Bonjour le forum

Après plusieurs nuits blanches je suis enfin arrivé à masquer mes lignes.

Comme je suis sympa je vous donne « ma » solution

Code:
Sub masqué()
'Dim Pla As Worksheet
'Set Pla = Sheets("Planzer")



If Range("N__TMS").Offset(1, 0) = "" And Range("PLBio").Offset(1, 0) = "" And Range("PLzü").Offset(1, 0) = "" Then
Rows("3:12").EntireRow.Hidden = True
    Else
        If Range("N__TMS").Offset(1, 0) = "" Then
        Rows("3:5").EntireRow.Hidden = True
        End If
            If Range("PLBio").Offset(1, 0) = "" Then
            Range("PLBio").Offset(1, 0).Resize(Selection.Rows.Count + 2, Selection.Columns.Count).EntireRow.Hidden = True
            End If
                If Range("PLzü").Offset(1, 0) = "" Then
                Range("PLzü").Offset(1, 0).Resize(Selection.Rows.Count + 2, Selection.Columns.Count).EntireRow.Hidden = True
                End If
End If


If Range("PL_retour").Offset(1, 0) = "" And Range("PL_Livré_sans_Remb").Offset(1, 0) = "" And Range("PL_Payé_à_l_expéditeur").Offset(1, 0) = "" Then
Range("PL_retour").Resize(Selection.Rows.Count + 6, Selection.Columns.Count).EntireRow.Hidden = True

    ElseIf Range("PL_retour").Offset(1, 0) >= 1 And Range("PL_Livré_sans_Remb").Offset(1, 0) = "" And Range("PL_Payé_à_l_expéditeur").Offset(1, 0) = "" Then
    Range("pl_retour").End(xlDown).Offset(1, 0).Resize(Selection.Rows.Count + 5, Selection.Columns.Count).EntireRow.Hidden = True
        
        ElseIf Range("PL_retour").Offset(1, 0) >= 1 And Range("PL_Livré_sans_Remb").Offset(1, 0) >= 1 And Range("PL_Payé_à_l_expéditeur").Offset(1, 0) = "" Then
        Range("PL_Livré_sans_Remb").End(xlDown).Offset(1, 0).Resize(Selection.Rows.Count + 2, Selection.Columns.Count).EntireRow.Hidden = True
        
             ElseIf Range("PL_retour").Offset(1, 0) >= 1 And Range("PL_Livré_sans_Remb").Offset(1, 0) = "" And Range("PL_Payé_à_l_expéditeur").Offset(1, 0) >= 1 Then
             Range("PL_Livré_sans_Remb").Resize(Selection.Rows.Count + 2, Selection.Columns.Count).EntireRow.Hidden = True
                
                ElseIf Range("PL_retour").Offset(1, 0) = "" And Range("PL_Livré_sans_Remb").Offset(1, 0) >= 1 And Range("PL_Payé_à_l_expéditeur").Offset(1, 0) = "" Then
                Range("PL_retour").Resize(Selection.Rows.Count + 2, Selection.Columns.Count).EntireRow.Hidden = True
                Range("PL_Livré_sans_Remb").End(xlDown).Offset(1, 0).Resize(Selection.Rows.Count + 2, Selection.Columns.Count).EntireRow.Hidden = True
                    
                    ElseIf Range("PL_retour").Offset(1, 0) = "" And Range("PL_Livré_sans_Remb").Offset(1, 0) >= 1 And Range("PL_Payé_à_l_expéditeur").Offset(1, 0) >= 1 Then
                    Range("PL_retour").Resize(Selection.Rows.Count + 2, Selection.Columns.Count).EntireRow.Hidden = True
                        
                        ElseIf Range("PL_retour").Offset(1, 0) = "" And Range("PL_Livré_sans_Remb").Offset(1, 0) = "" And Range("PL_Payé_à_l_expéditeur").Offset(1, 0) >= 1 Then
                        Range("PL_retour").Resize(Selection.Rows.Count + 5, Selection.Columns.Count).EntireRow.Hidden = True

    End If
End Sub



Cordialement un très bon dimanche mal gré la pluie
 

Pièces jointes

  • Essai Remb1.xls
    111.5 KB · Affichages: 78

Discussions similaires

Réponses
14
Affichages
350

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 180
dernier inscrit
Vcr