XL 2019 Masquer des lignes avec VBA si supérieures ou inférieures à une date définie

FloASF63

XLDnaute Nouveau
Bonjour à tous,
Voici mon tout premier message afin de vous demander de l'aide. Bien que je vous suive très régulièrement et vous m'avez été d'une aide précieuse jusqu'à maintenant. Aujourd'hui je bloque sur quelque chose peut être de tout simple (en tout cas pas pour moi car je n'ai pas de connaissances VBA), à savoir masquer des lignes en fonction d'une date. Je m'explique plus précisément et je joindrais le fichier pour mieux comprendre.

Pour mon activité je dois établir des rapports qui sont destinés aux clients, j'ai donc sur mon fichier excel 2 feuilles, une feuille général et une feuille modèle client. Pour la feuille générale il n'y a rien à toucher, par contre pour la feuille client, j'ai 3 éléments clés à voir savoir deux dates en D3 et F3 et mon tableau de données qui commence ligne 33.
Ce que je souhaiterai dans l'idéal et qui me comblerait :) , c'est que en gros dans mon tableau il ne soit affiché que les données entre les dates qui sont en D3 et F3 et pour ça j'aurai besoin de simplement masquer les lignes du tableau dont les dates sont <D3 et masquer les lignes >F3 ET effacer le contenu de ces lignes masquées.

Il est possible de la faire en manuel en sélectionnant les lignes à masquer et en effaçant le contenu, mais le problème c'est que je dois faire 500 fiches clients, je souhaiterai donc automatiser cela avec VBA :)

Je vous remercie grandement par avance pour l'aide que vous m'apporterez.
Florian
 

Pièces jointes

  • rapport-clients-copie.xlsx
    62.6 KB · Affichages: 16

TooFatBoy

XLDnaute Barbatruc
Finalement la formule fonctionne, il suffisait juste de "fixer" Général!M3:N12 :)
Voilà, c'était exactement ça. 👍

Code:
=SI(F35<>"";ARRONDI(SOMME($J$34:J34)/RECHERCHEV($N$26;Général!M$3:N$12;2;FAUX);0);"")



[edit]
Je ne sais pas laquelle est la mieux , les deux fonctionnent
Les deux sont biens et équivalentes. ;)
[/edit]
 

FloASF63

XLDnaute Nouveau
Voilà, c'était exactement ça. 👍

Code:
=SI(F35<>"";ARRONDI(SOMME($J$34:J34)/RECHERCHEV($N$26;Général!M$3:N$12;2;FAUX);0);"")



[edit]

Les deux sont biens et équivalentes. ;)
[/edit]
En tout cas merci de ton aide , j'ai pris beaucoup de votre temps , grand merci.
J'attends le retour de Softmama pour son code VBA
Code:
=SI(ET($L$52<=Général!$B3;$M$54>=Général!$B3;Général!I3="G");G35*0,81;SI(G35="";"";-G35))
Cela débute en B3 au lieu de B2. Juste cette petite retouche et le sujet est résolu :)
 

TooFatBoy

XLDnaute Barbatruc
J'ai pondu une autre version, mais je ne sais pas si ça correspond exactement à ce que tu veux...

/!\ J'ai beaucoup modifié la mise en page de la feuille qui sert de modèle (cellules fusionnées, etc.).
J'ai utilisé un tableau structuré pour la feuille qui sert de modèle.
Normalement, ça gère la zone d'impression de façon dynamique, avec recopie du titre des colonnes en début de page à partir de la page n° 2.
 

Pièces jointes

  • Rapport-clients_Marcel32-v2.xlsm
    54.1 KB · Affichages: 0
Dernière édition:

FloASF63

XLDnaute Nouveau
Peut être cela vient-il du code VBA, ou alors dans la formule mais dans ce cas je ne trouve pas l'erreur.
Lorsque je change la date en F3 pour mettre par exemple 30/04/22, les dernières lignes du général s'affichent bien dans la feuille client, par contre la colonne J, de la dernière ligne ajoutée me met toujours un chiffre négatif. On dirait que c'est décalé.
Et je mets de nouvelles données dans général, côté feuille client j'ai encore ce chiffre négatif, et l'avant dernière ligne qui était négative devient positive.
 

TooFatBoy

XLDnaute Barbatruc
Je reviens sur ce détail, n'est-ce pas, qui me chagrine toujours...

Ce que je souhaiterai dans l'idéal et qui me comblerait :) , c'est que en gros dans mon tableau il ne soit affiché que les données entre les dates qui sont en D3 et F3 et pour ça j'aurai besoin de simplement masquer les lignes du tableau dont les dates sont <D3 et masquer les lignes >F3 ET effacer le contenu de ces lignes masquées.

Si on masque des lignes et qu'on les efface. Ne serait-il pas plus simple de supprimer ces lignes ?

C'est vrai qu'il aurait été plus simple de supprimer des lignes, mais je ne peux pas, car les calculs de chaque lignes sont incrémentées et conditionnées aux lignes précédentes.

Que tu supprimes les lignes ou que tu effaces leur contenu, ça revient au même : les calculs ne peuvent plus tenir compte des lignes précédentes...


Est-ce qu'il ne faut pas en réalité, pour chaque fiche client, tenir compte de toutes les données à partir de la date de création de la fiche (création du client), et n'afficher que les lignes comprises entre les deux dates D3 et F3 ???
 

TooFatBoy

XLDnaute Barbatruc
Je propose un fichier avec trois modèles différents (tu me diras si un modèle convient). Et voici pourquoi...


Tout comme @Softmama, j'ai commencé par simplifier ton énorme formule, et j'ai alors pu me rendre compte que la seule fonction qui tenait compte des lignes précédentes était une simple addition. Or, additionner des zéros ou ne rien additionner c'est pareil, alors j'ai créé le Modèle 1 qui correspond à ta demande, dans lequel seules les lignes dont les dates sont comprises entre D3 et F3 sont recopiées dans la fiche client.

Puis, je me suis rendu compte qu'en changeant la date de début en D3, les valeurs dans le tableau changeaient pour une même date. Les valeurs étant donc dépendantes de la date de début, je me suis dit qu'en fait il fallait recopier toutes les lignes et masquer celles qui ne sont pas entre D3 et F3, mais ne pas les effacer. J'ai alors créé les Modèle 2.

Enfin, je me suis dit que si les valeurs dans le tableau changeaient en fonction de la date de début, il ne fallait pas que la date de début soit la même pour un nouveau client que pour un ancien client. J'ai donc créé le Modèle 3 qui recopie toutes les lignes comprises entre la date de création de la fiche client et la date F3, et masque toutes les lignes qui ne sont pas entre D3 et F3, sans les effacer.
 

Pièces jointes

  • Rapport-clients_Marcel32-v2.xlsm
    79.6 KB · Affichages: 3
Dernière édition:

Softmama

XLDnaute Accro
Peut être cela vient-il du code VBA, ou alors dans la formule mais dans ce cas je ne trouve pas l'erreur.
Lorsque je change la date en F3 pour mettre par exemple 30/04/22, les dernières lignes du général s'affichent bien dans la feuille client, par contre la colonne J, de la dernière ligne ajoutée me met toujours un chiffre négatif. On dirait que c'est décalé.
Et je mets de nouvelles données dans général, côté feuille client j'ai encore ce chiffre négatif, et l'avant dernière ligne qui était négative devient positive.

Il me semble que cela vient de la formule FIN.MOIS en M53 qui modifie la dernière date dans la formule. Pouvez-vous m'expliquer quelle est l'utilité et la ginalité de ces valeurs en M52 et M53 ?
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Il me semble que cela vient de la formule FIN.MOIS en M53 qui modifie la dernière date dans la formule. Pouvez-vous m'expliquer quelle est l'utilité et la finalité de ces valeurs en M52 et M53 ?
A mon avis il y a une petite coquille dans la formule de la dernière colonne (colonne "Paiement") inscrite par la macro. Si tu la corriges, tu verras qu'il n'y a plus ce problème de nombre systématiquement négatif. ;)

Dans ta v6 de #34, la formule FIN.MOIS est en M54, et je suis comme toi : je me demande à quoi ça sert. C'est peut-être un reste d'un test précédent.

En revanche, si j'ai bien compris, la formule FIN.MOIS en F3, dans le fichier de #1, sert à avoir la date de fin du trimestre. ;)



Je me demande s'il n'y a pas en plus une erreur dans les formules du classeur de #1...

En J33 il y a
=SI(ET($D$3<=Général!$B2;$F$3>=Général!$B2;Général!I2="G");G33*0,81;SI(G33="";"";-G33))

Mais en J34 et suivantes il y a
=SI(ET($M$51<=Général!$B3;$M$52>=Général!$B3;Général!I3="G");G34*0,81;SI(G34="";"";-G34))
 
Dernière édition:

FloASF63

XLDnaute Nouveau
Bonjour à tous,

Alors en effet à la base j'avais mis pour des tests, la date du jour et la date fin de mois en cellules M53 - M54.
Je n'avais pas encore mis ces dates sur la ligne 3, qui servent maintenant de référence. On peut les supprimer en M53 et M54 elles ne servent à rien.
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 148
Membres
112 670
dernier inscrit
Flow87