PB Macro Afficher / Masquer lignes en fonction de la valeur d'une cellule

maxime79

XLDnaute Nouveau
Bonjour à toutes et à tous,

Je suis nouveau sur le forum et je suis également débutant en VBA...
Je tiens d'ailleurs à tous vous remercier car tout ce que j'ai appris récemment je le dois à vos posts et à vos réponses.

J'ai d'ailleurs bien tenté de trouver la solution à mon pb mais sans succès...
Voici mon pb (je ne pense pas que cela soit trop compliqué)

Je voudrai tout simplement Masquer des lignes en fonction de la valeur d'une cellule.. cad que si la valeur de la cellule B10 est > à celle de B12
je voudrai masquer les lignes 15 à 18 par exemple...
J'espère avoir été clair dans mes explications..

Merci d'avance pour votre aide
 

Si...

XLDnaute Barbatruc
Re

L’onglet K2 correspond au masquage des lignes entières de 40 à 61.

Mon premier exemple correspond au cas où on teste la saisie d’une date (sous forme : jj/mm/aa) ! (première idée venue mais peut-être malvenue o_O)

L’exemple suivant correspond au cas où on teste la saisie d’un jour (sous forme : entier de 1 à 31) !

Si tu n’y arrives pas, donne-nous une version de ton fichier après avoir effacé toutes les données.
 

Pièces jointes

  • Afficher-Masquer Plage Selon jour .xlsm
    28.1 KB · Affichages: 58

Marion12

XLDnaute Nouveau
Re,

non je n'y arrive absolument pas...
Non c'est ce que je voudrais c'est que l'on saisisse une date et je ne sais pas si il existe une formule qui puisse détecter en fonction du mois et de l'année si le mois en question contient 28, 30 ou 31 jours mais je ne sais pas si c'est possible, on m'avait parlé de la fonction FIN.MOIS() mais je ne sais pas comment la retranscrire en VBA...

Je t'envoie une version de mon fichier.

Encore mercii!
 

Pièces jointes

  • Relevés.xlsm
    95.9 KB · Affichages: 35

Si...

XLDnaute Barbatruc
Bonjour Marion

Il est vrai que manipuler des objets que l’on ne connait pas demande un apprentissage.

Voici l’adaptation à ton fichier (avec des images explicatives pour le cache et les formules).
La plage est masquée quand la date saisie ne correspond pas au dernier jour du mois.

Il semble que les cellules des lignes à droites de la plage concernée ne soient pas utilisées donc la seconde adaptation (afficher masquer des lignes) est plus simple.
 

Pièces jointes

  • etiquette pour cacher.xlsm
    213.6 KB · Affichages: 47
  • Afficher-Masquer Lignes Selon jour .xlsm
    100.6 KB · Affichages: 38

Marion12

XLDnaute Nouveau
Oui totalement, j'ai lu de nombreux cours et questions/réponses sur d'autres forums mais rien de mieux que la pratique pour apprendre, or toute seule c'est difficile...

D'accord merci pour ton aide précieuse en tout cas!

Par contre il y a toujours le problème des mois de 30jours et le mois de février avec ses 28 jours, quand je rentre par exemple le 28/02/2017, le cache est toujours actif...

Je ne sais pas si c'est possible dans la macro de récupérer l'information "dernier jour de ce mois" dans le premier fichier "étiquette pour cacher". L'idée ça serait de retranscrire en langage VBA : si(date saisie=dernier jour de ce mois;"";afficher cache). Est-ce que c'est possible stp?

Encore merci beaucoup :)
 

Pièces jointes

  • etiquette pour cacher.xlsm
    211.4 KB · Affichages: 42

Si...

XLDnaute Barbatruc
Re

Oups, j’étais parti sur un cache actif ou pas en fonction du dernier jour de la date actuelle.

Si on veut voir le dernier jour de la date saisie, calculée en L2 (par exemple) y saisir la formule

=DATEVAL("01/"&MOIS(I2)+1&"/"&ANNEE(I2))-DATEVAL("01/"&MOIS(I2)&"/"&ANNEE(I2))

La macro est alors
VB:
Private Sub Worksheet_Change(ByVal R As Range)
  If R.Address <> [I2].Address Then Exit Sub
  If Not IsDate(R) Then Exit Sub
  Label1.Visible = Day(R) <> [L2] ‘dernier jour en L2
End Sub

Si le dernier jour de la date saisie n’est pas calculé par formule, mais dans le code, ce sera
VB:
Private Sub Worksheet_Change(ByVal R As Range)
  If R.Address <> [I2].Address Then Exit Sub
  If Not IsDate(R) Then Exit Sub
  Dim dj As Byte 'dernier jour du mois
  dj = DateSerial(Year(R), Month(R) + 1, 1) - DateSerial(Year(R), Month(R), 1)
  Label1.Visible = Day(R) <> dj
End Sub
Le cache a ta préférence, même si ce n’est pas le plus simple à programmer puisqu’on passe par un Contrôle ActiveX *.

*La syntaxe sera encore différente avec un Contrôle de formulaire. Il faudra aussi revoir cela avec l’ajout d’autres éléments comme, par exemple, une protection de d’onglet, le changement de valeur d’autres cellules ...
 

Marion12

XLDnaute Nouveau
Ahhhhhh ça marche c'est super!!!!! Merci beaucoup!! Merci pour les formules VBA et les explications!!

J'essayerai de me débrouiller seule pour le reste de mon fichier :D
(Enfin si je galère beaucoup je pense revenir demander de l'aide) ;)
 

Si...

XLDnaute Barbatruc
Bonjour Marion

désolé : pour faire des tests j’avais rajouté en première ligne l’instruction Label1.Visible = 0 et j’ai oublié de la supprimer dans le fichier joint. Je le corrige donc (comme dans le second code donné ci-dessus).
 

Pièces jointes

  • Vu pas Vu Plage Jour .xlsm
    101.1 KB · Affichages: 17

Si...

XLDnaute Barbatruc
Bonsoir Marion

Je viens de jeter un coup d’œil sur tes reports de valeurs en récapitulation annuelle.

Tu as un exemple de macro qui fait cela mais avec un questionnement à propos des Produits évacués.

Il te faut savoir que les cellules fusionnées compliquent la programmation (et tu en as beaucoup ;))!

Si tu veux utiliser cette macro, donne-nous un exemple (dans le format voulu) pour chaque cellule à compléter.
On pourra peaufiner tout cela (par exemple : limiter la saisie aux cellules jaunes en protégeant la feuille).

On pourra ajouter un filtre (jour, mois …) sur la colonne date de la "récap" pour éviter de multiplier les onglets.
 

Pièces jointes

  • Vu pas Vu Plage Jour .xlsm
    53.4 KB · Affichages: 18

Marion12

XLDnaute Nouveau
Bonjour,

Petit problème technique avec mon PC...

J'ai totalement modifié la version de mon fichier, j'ai simplifié la version, l'idée est encore de masquer par un cache le tableau "relevés mensuels". J'ai essayé de remodeler la macro VBA et cela ne marche pas...

Sinon je pensais mettre un bouton valider comme cela une fois que la personne a rentré toutes les données, elle clique sur le bouton, la date du haut passe au jour suivant et les données renseignées sont automatiquement envoyées dans l'onglet récap annuel.

Je ne sais pas si c'est très clair... Si oui, est ce que je suis obligée de passer par une VBA? :confused:

Merci par avance!!
 

Pièces jointes

  • Relevés Conduite.xlsm
    485.1 KB · Affichages: 16

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 910
Membres
101 837
dernier inscrit
Ugo