XL 2010 Erreur masquage de lignes et problème impression

Orson83

XLDnaute Impliqué
Bonjour la communauté,
Je rencontre plusieurs problèmes liés au masquage de lignes.
En effet, dans un processus étape par étape, je suis obligé de masquer des lignes avant d'arriver à la dernière étape.
Du coup, un sous total affiche 0, et je n'arrive pas à faire disparaître les lignes non saisies à l'impression.
J'ai préparé un fichier exemple avec des macro que je n'arrive pas à corriger.
Merci pour votre aide.
Bonne journée.
Tchotchodu31
 

Pièces jointes

  • Masquer lignes et print V1.xlsm
    34.2 KB · Affichages: 10
Solution
Bonjour

Je ne vois pas de quoi du parles

Les lignes 16 et 17 sont masquées sur leur colonne E est vide dans Controle, cela de façon totalement indépendante au masquage lié au nombre de locations dans Worksheet_Change

La ligne 50 est sans doute à ne pas masquer quand on choisit 12 locations
VB:
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("E37")) Is Nothing Then Exit Sub

Application.ScreenUpdating = False
SelectNbLoc = Range("E37").Value

x = Left(SelectNbLoc, InStr(SelectNbLoc, " ") - 1)
y = 38 + x
Range("38:49").EntireRow.Hidden = False 'Masque des lignes
If y < 50 Then Range(y & ":49").EntireRow.Hidden = True 'Masque des lignes
Application.ScreenUpdating = True

End Sub

chris

XLDnaute Barbatruc
RE

Simplifie
VB:
'****************************************
'ADAPTE L'AFFICHAGE AU NOMBRE DE LOCATION
'****************************************
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("E37")) Is Nothing Then Exit Sub

Application.ScreenUpdating = False
SelectNbLoc = Range("E37").Value

x = Left(SelectNbLoc, InStr(SelectNbLoc, " ") - 1)
y = 38 + x
Range("38:49").EntireRow.Hidden = False 'Masque des lignes
Range(y & ":49").EntireRow.Hidden = True 'Masque des lignes
Application.ScreenUpdating = True

End Sub

Pour l'obligation de saisie, à vérifier avant impression ou sauvegarde
 

Orson83

XLDnaute Impliqué
RE

Simplifie
VB:
'****************************************
'ADAPTE L'AFFICHAGE AU NOMBRE DE LOCATION
'****************************************
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("E37")) Is Nothing Then Exit Sub

Application.ScreenUpdating = False
SelectNbLoc = Range("E37").Value

x = Left(SelectNbLoc, InStr(SelectNbLoc, " ") - 1)
y = 38 + x
Range("38:49").EntireRow.Hidden = False 'Masque des lignes
Range(y & ":49").EntireRow.Hidden = True 'Masque des lignes
Application.ScreenUpdating = True

End Sub

Pour l'obligation de saisie, à vérifier avant impression ou sauvegarde
Chris, le forum,
Merci pour cette macro qui était déjà en place et que tu as simplifié.
Malheureusement, cela ne résout aucun des problèmes énoncés dans mon post.
Pourrais-tu ouvrir mon fichier pour une meilleure compréhension ?
Tchotchodu31
 

Orson83

XLDnaute Impliqué
RE

Ce code ne masque pas la ligne 51 donc à toi d'expliciter davantage...
On est sensé imprimer à toutes les étapes ?
Si non masquer le bouton
La ligne 51 est masquée lorsque l'on passe de l'étape 1 à 4.
A l'étape 4, le total de chaque tableau est indiqué (0 pour le tableau 2 car ligne 51 masquée).
Effectivement, l'impression peut intervenir à toutes les étapes.
 

Orson83

XLDnaute Impliqué
RE

Ouvre grand les yeux : elle masque ou affiche les lignes des 3 plages selon que E est rempli ou vide

donc à appeler au début de l'impression
Effectivement, une partie du code :
VB:
    For Each cellule In .Range("E39:E49")
        cellule.EntireRow.Hidden = cellule.Value = ""
        cellule.EntireRow.Hidden = cellule.Value = 0
    Next cellule
... inséré dans le code qui sert à imprimer, résout le problème d'impression, merci.

Concernant la valeur à zéro (après l'étape 4) de la feuille 2 cellule E7, as-tu une solution ?

Tchotchodu31
 

chris

XLDnaute Barbatruc
RE

Ton impression est un non sens
remplace tout cela par
VB:
'*****************************************************
'IMPRIMER LA FEUILLE 1
'*****************************************************
Sub PrintFeuil1()

Controle
With Sheets("Feuil1")
 
    With .PageSetup
        .PrintArea = "B10:E67" 'Zones de la page 1 et +
        .Zoom = False
        .LeftMargin = Application.InchesToPoints(0.8) 'Marge gauche
        .RightMargin = Application.InchesToPoints(0.8) 'Marge droite
        .TopMargin = Application.InchesToPoints(0.8) 'Marge haut de page
        .BottomMargin = Application.InchesToPoints(0.8) 'Marge bas de page
        .FitToPagesTall = 1
        .FitToPagesWide = 1
        .Orientation = xlPortrait 'Portrait=xlPortrait ou Paysage=xlLandscape
    End With
 
    .PrintPreview 'Aperçu avant impression
    '.PrintOut 'Pour imprimer
    Application.Goto Sheets("Feuil1").Range("E11") ', Scroll:=True 'Se positionne dans la cellule
 
End With
End Sub

Sub Controle()
    With Sheets("Feuil1")
    .Rows("10:58").Hidden = False
    For Each cellule In Union(.Range("E11:E33"), .Range("E37:E50"), .Range("E59:E67"))
        cellule.EntireRow.Hidden = cellule.Value = ""
    Next cellule
    End With
End Sub

EDIT : remplace le SOUS.TOTAL en E51 par une simple SOMME car ici je ne vois pas l’intérêt du SOUS.TOTAL
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
380
Compte Supprimé 979
C
Réponses
6
Affichages
250