Cacher des lignes si valeur 0 et insérer calcul en pied de page

karyomax

XLDnaute Nouveau
Bonjour,

Je suis tout nouveau sur ce forum, et bien qu'en essayant d'appliquer les macros que je lis sur différents topics, je n'arrive pas à m'en sortir tout seul (surtout que je n'y connais absolument rien en vba :D ).

Je dispose d'un fichier Excel contenant 2 onglets: le premier sert de base de données, le second sert de matrice de bon de commande.

Pour le bon de commande, je souhaite bien cacher les lignes si le nombre de données relevées sur le premier onglet est nul (valeur 0). Je souhaite également faire en sorte que le sous-total soit systématiquement placé en bas de page, ou en pied de page. En effet, le nombre de ligne varie en fonction des fournisseurs, donc le nombre de pages également.

Pourriez-vous m'aider sur ces 2 sujets?

Je vous joins en PJ un fichier pour explication.

D'avance, je vous remercie.

Cordialement,
 

Pièces jointes

  • Bon de commande test.xls
    56 KB · Affichages: 91

DoubleZero

XLDnaute Barbatruc
Re : Cacher des lignes si valeur 0 et insérer calcul en pied de page

Bonjour à toutes et à tous,

Bienvenue sur XLD, karyomax !

Une suggestion en pièce jointe.

A bientôt :)
 

Pièces jointes

  • 00 - karyomax - Lignes masquer.xls
    74 KB · Affichages: 112

karyomax

XLDnaute Nouveau
Re : Cacher des lignes si valeur 0 et insérer calcul en pied de page

Bonjour tout le monde,

Merci DoubleZero pour ta proposition.

1) Concernant la possibilité de cacher les lignes pour les données égalent à 0:

J'ai bien regardé ton fichier, et je m'aperçois qu'en fait l'actualisation des données ne peut pas se faire automatiquement: il faut cliquer sur le bouton Masquer ou Afficher dans le bon de commande. Dans ma démarche initiale, je souhaitais en fait automatiser ce process, et verrouiller l'onglet bon de commande pour éviter toute modification extérieure.

Donc:
=> l'actualisation automatique de cette requête est-elle possible?
=> sinon, peut-on déplacer les boutons associés à la macro sur l'autre onglet (base de données) pour lancer l'actualisation?

J'ai également remarqué que l'actualisation des données était assez longue à obtenir, peut-être est-ce du au fait que la macro travaille sur l'ensemble de la feuille et non une zone sélectionnée?

2) Concernant le sous-total en pied de page:

Je n'ai pas assez précisé ma demande, j'en suis désolé. Je souhaite en fait que ce total se retrouve en bas de mon bon de commande à l'édition, indépendamment du nombre de page que fait ce bon de commande. En fait, comme pour un bon de commande classique: la dernière page contient le récapitulatif des valeurs...

J'espère avoir été plus clair dans mes propos.

Merci en tout cas pour vos idées, ça fait plaisir quand on n'y connait rien et que l'on se sent un peu perdu :)

Cordialement,
 

karyomax

XLDnaute Nouveau

DoubleZero

XLDnaute Barbatruc
Re : Cacher des lignes si valeur 0 et insérer calcul en pied de page

Re-bonjour, karyomax, le Forum,

Ci-après, une nouvelle version dans laquelle un bouton, sur chacun des deux onglets, permet la création du bon de commande auprès du fournisseur "X".

J'ai opté pour cette solution puisque chaque bon de commande doit, par la suite, être protégé - sauvegardé.

pour éviter toute modification extérieure.

Le recours au format PDF pourrait être envisagé.

Les lignes ne sont plus masquées mais supprimées, évitant ainsi la présence de deux bordures verticales tout en haut de la page n° 2, comme auparavant.

VB:
Sub Bon_de_commande_créer()
Dim nom As Object
    With Application
        .ScreenUpdating = 0
        .Calculation = xlCalculationManual
    End With

    Sheets("BDC fournisseur").Select
    Sheets("BDC fournisseur").Copy After:=Sheets(2)
    ActiveSheet.Name = Range("g8").Value
    ActiveSheet.Tab.ColorIndex = 4
    
    For n = Range("h65536").End(xlUp).Row To 18 Step -1
        If Range("h" & n) = 0 Or Range("h" & n) = "" Then Rows(n).Delete
    Next n
    
    Range("az1") = "Montant HT"
    Range("az2") = "Valeur TVA"
    Range("az3") = "Montant TTC"
    Range("ba1") = "=SUM(total)"
    Range("ba2") = "19.6"
    Range("ba2").NumberFormat = "0.00"
    Range("ba3") = "=R[-2]C+(R[-2]C*(R[-1]C/100))"
    Range("BA1,BA3").Style = "Currency"
    
    With Range("AZ1:BA3")
        .Value = Range("AZ1:BA3").Value
        .Font.Bold = 1
        .Font.Size = 12
        .Borders.Weight = 3
        .Borders(xlInsideVertical).LineStyle = 0
        .Borders(xlInsideHorizontal).LineStyle = 0
        .Cut Destination:=Range("g65536").End(xlUp)(3)
    End With
    
    With Range("B18").CurrentRegion
        .Borders(xlEdgeLeft).Weight = xlMedium
        .Borders(xlEdgeTop).Weight = xlMedium
        .Borders(xlEdgeBottom).Weight = xlMedium
        .Borders(xlEdgeRight).Weight = xlMedium
        .Borders(xlInsideVertical).Weight = xlThin
        .Borders(xlInsideHorizontal).Weight = xlThin
    End With
    
    Range("b65536").End(xlUp)(2).EntireRow.Delete
    ActiveSheet.DrawingObjects.Delete
    
    For Each nom In ActiveSheet.Names
        nom.Delete
    Next
    
    Sheets("BDC fournisseur").Range("g8").ClearContents
        
    With Application
        .ScreenUpdating = 1
        .Calculation = xlCalculationAutomatic
    End With
End Sub
Ma proposition n'est pas des meilleures, mais... je ne sais faire autrement :eek:.

Nota : dans un tableau, les cellules vides réservant de mauvaises surprises, j'ai dû insérer une valeur en C18 !

A bientôt :)
 

Pièces jointes

  • 00 - karyomax - Lignes masquer - V02.xls
    86.5 KB · Affichages: 71

Discussions similaires

Statistiques des forums

Discussions
312 332
Messages
2 087 361
Membres
103 530
dernier inscrit
Chess01