XL 2016 Cacher ou (dé)cacher lignes dans plusieurs feuilles automatiquement

chingilou

XLDnaute Junior
bonjour les exceleurs
j'ai quatre feuilles acceuil ; hanifatoys ; ATERNAL et Arba (des factures quoi)
tout mon travail ce fait de la 1ere feuille "accueil" quand je remplis mon tableau je voudrais que les lignes vides [B10:B195] (vérification dans cellule B) seront cacher dans les 3 autres feuilles automatiquement sans bouton et surtout vu la quantité sans lenteur si possible
les coordonnées des tableaux des 3 feuilles ne se correspondent pas
[B10:B195] de accueil correspond à [D22:207]] hanifatoys ; [B13:B198] ATERNAL et [B19:B205] Arba
et Merci
 

Pièces jointes

  • 01.xlsx
    64 KB · Affichages: 16

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour chingilou,
sans lenteur si possible
Dans ce cas, le mieux est de ne rien faire. 🤣 ... tout du moins en temps réel.
Ci joint une PJ :
1- Toutes les formules des 3 feuilles sont supprimées.
2- Les transferts de données ne se font que quand on sélectionne une feuille.
3- Les montants HT sont recalculés en dur ( donc plus de formules en colonne E )
D'où très rapide puisque quand on travaille dans Accueil rien ne se calcule, et le fichier est bien plus léger.

Dans chaque feuille on trouve la même macro à quelques détails près ( Début, Fin tableau, Colonne à copier )
VB:
Sub Worksheet_Activate()
    Dim NbLig%, L%, Deb%, Fin%
    Deb = 22    ' Début du tableau dans la feuille
    Fin = 208   ' et Fin
    Application.ScreenUpdating = False
    Rows(Deb & ":" & Fin).Hidden = False
    Range("A" & Deb & ":E" & Fin).ClearContents
    With Sheets("Acceuil")
        NbLig = Application.CountIf(.Range("A10:A196"), ">0")                       ' Calcul Nb lignes utiles
        Range("A" & Deb & ":B" & Deb + NbLig) = .Range("A10:B" & 10 + NbLig).Value  ' Copier Coller valeurs Ref et Des.
        Range("D" & Deb & ":D" & Deb + NbLig) = .Range("C10:C" & 10 + NbLig).Value  ' Copier Qté
        Range("C" & Deb & ":C" & Deb + NbLig) = .Range("D10:D" & 10 + NbLig).Value  ' Mettre bonne colonne
        For L = Deb To Deb + NbLig
            Cells(L, "E") = Cells(L, "C") * Cells(L, "D")                           ' Calcul montant TTC
        Next L
        Rows(Deb + NbLig & ":" & Fin).Hidden = True                                 ' Masque les lignes vides.
    End With
End Sub
 

Pièces jointes

  • Chingilou.xlsm
    52.6 KB · Affichages: 6

chingilou

XLDnaute Junior
merci encore une fois chef pour ta solution
mais en effaçant les formules des 3 autres feuilles je n'aurais pas par exemple les totaux a jour (en cas de modif ou d'ajout) jusqu'au clique sur les 3 feuilles concernées
y'a pas un autre moyen sans toucher ces formules
 

chingilou

XLDnaute Junior
désolé mais tjrs pas
vu que tout ce passe a la feuille accueil t'as du remarquer les icônes des imprimantes au dessus ben il ne sont pas mis a jour sans devoir passer sur ces autres feuilles
y'a pas un autre moyen de rafraîchir ces feuilles directement de la 1ere feuille accueil
merci d'avance pour tes réponses et ta patiente
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour chingilou, sylvanu,

Pourquoi supprimer les formules ? Elles ne sont absolument pas gênantes, la macro du bouton :
VB:
Sub Masquer_Afficher()
Dim a, b, test As Boolean, i%, w As Worksheet
a = Array("Accueil", "Hanifatoys1", "ATERNAL", "Arba") 'noms des feuilles à traiter
b = Array(10, 22, 13, 18) '1ères lignes à étudier
Application.ScreenUpdating = False
With ActiveSheet.DrawingObjects(Application.Caller)
    test = .Text = "Masquer"
    .Text = IIf(test, "Afficher", "Masquer")
End With
For i = 0 To UBound(a)
    Set w = Sheets(a(i))
    With w.Rows(b(i) & ":" & w.Rows.Count)
        .Hidden = False
        Intersect(w.Range("A" & b(i)).CurrentRegion.Columns(1), .Cells) _
            .SpecialCells(xlCellTypeFormulas, 2).EntireRow.Hidden = test
    End With
Next
End Sub
A+
 

Pièces jointes

  • 01(1).xlsm
    74.5 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dans vos macros Impression, commencez par faire Sheets("xxx").Activate
Cela activera la feuille et la remettra à jour, avant d'imprimer.
( J'avais supposé au départ qu'il n'y aurait pas que trois clients dans votre fichier final, c'est d'ailleurs pour ça que les macros sont paramétrables pour simplifier le travail. d'où la recherche de la rapidité. )
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Un ex pour impression :
VB:
Sub ImpressionHanifatoys1()
    Application.ScreenUpdating = False                          ' Ecran figé
    Sheets("Hanifatoys1").Activate                              ' Selection feuille pour mise à jour
    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"    ' Ou autre méthode
    Sheets("Accueil").Activate                                  ' Retour page d'acceuil
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Evidemment vous parliez d'impression donc je masque la feuille et reste sur accueil.
Dans ce cas supprimez l'écran figé :
VB:
Sub ImpressionHanifatoys1()
    Sheets("Hanifatoys1").Activate                              ' Selection feuille pour mise à jour
    Worksheets("Hanifatoys1").PrintPreview
    Sheets("Acceuil").Activate                                  ' Retour page d'acceuil
End Sub

Question : Dans votre "vrai" fichier, vous avez beaucoup de "clients" ?
Car le cas échéant on peut faire une macro globale, ce qui évite de copier modifier la macro dans chaque feuille, en la rendant paramétrable. S'il n'y en a que 3 ou 4 ça ne vaut pas le coup.
 

Statistiques des forums

Discussions
312 046
Messages
2 084 851
Membres
102 687
dernier inscrit
Biquet78