> Tous les forums > Forum Bureautique
 Macro à corriger
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
delta70
  Posté le 22/08/2019 @ 20:09 
Aller en bas de la page 
Petit astucien

Bonsoir, à toutes et à tous
J’utilise dans le fichier ci-joint une macro qui pour but, c’est de masquer des lignes en fonction d’une cellule dans une autre feuille et ce code fonctionne mais pas tout à fait comme je le souhaite. Il y a une contradiction (Interférence si mon mot est juste) mais je n’arrive pas à trouver la bonne solution
Il y a trois conditions :
Si les cellules du mercredi matin de l’emploi du temps sont vides alors les lignes ("157:180") de la feuille Septembre seront masquées
Si les cellules du mercredi Soir de l’emploi du temps sont vides alors les lignes ("182:199") de la feuille Septembre seront masquées
Si les cellules du mercredi matin de l’emploi du temps sont vides alors les lignes ("154:204") de la feuille Septembre seront masquées

Je souhaiterai de l’aide pour améliorer ce code, le rendre ces condition exécutables séparément si cela est possible.
Merci de votre collaboration.

https://www.cjoint.com/c/IHwsfcVcMOB

Publicité
Debrief
 Posté le 22/08/2019 à 21:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

- Il semble déjà y avoir une contradiction dans ton énoncé.

Si les cellules du mercredi matin de l’emploi du temps sont vides alors les lignes ("154:204") de la feuille Septembre seront masquées

Ce ne serait pas plutôt Si les cellules du mercredi matin et soir de l’emploi du temps sont vides alors les lignes ("154:204") de la feuille Septembre seront masquées ?

- Il y a un recouvrement des ranges. Donc si tu affiches le range du matin "157:180" et que donc tu affiches le range de toute la journée "154:204", tu vas afficher le range de l'après-midi "182:199" qui n'est pas concerné.
Il faut différencier les ranges. Et considérant ce qui est défini, le range toute la journée serait plutôt "154,156" + "200,204". A affiner selon ce que tu veux vraiment.

- Tu interceptes le Worksheet_Change sur la mauvaise feuille. Car si c'est le contenu de Infos qui conditionne l'affichage des lignes de Septembre, c'est sur Infos qu'il faut mettre la macro.

- Tu commences avec un Application.ScreenUpdating = False mais on ne trouve pas de Application.ScreenUpdating = True

- C'est mieux de paramétrer les Ranges dans des constantes pour faciliter d'éventuelles modifications ultérieures.

- C'est mieux d'avoir en tête de macro Option Explicit pour ne pas se faire avoir avec des variables non déclarées issues de typos.

Je mettrais ça sur la feuille Infos:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Const InfosRangeMm = "F26:F29"
Const InfosRangeMs = "F31:F33"
Const MoisRangeMm = "157:180"
Const MoisRangeMs = "182:199"
Const MoisRangeMtj1 = "154:156"
Const MoisRangeMtj2 = "200:204"
Const FeuilleMois = "Septembre"

Dim Mm, Ms, Mtj As Boolean 'Mm: traduit par Mercredi matin, Ms: par Mercredi soir et Mtj: Toute la journée

'Modifie l'affichage des lignes du mois seulement si le mercredi est modifié
If Intersect(Target, Union(Me.Range(InfosRangeMm), Me.Range(InfosRangeMs))) Is Nothing Then Exit Sub

'Set flags
Mm = Application.CountA(Me.Range(InfosRangeMm)) = 0
Ms = Application.CountA(Me.Range(InfosRangeMs)) = 0
Mtj = Mm And Ms

'Affiche / masque les lignes du mois
With ThisWorkbook.Worksheets(FeuilleMois)
.Rows(MoisRangeMm).EntireRow.Hidden = Mm
.Rows(MoisRangeMs).EntireRow.Hidden = Ms
.Rows(MoisRangeMtj1).EntireRow.Hidden = Mtj
.Rows(MoisRangeMtj2).EntireRow.Hidden = Mtj
End With

End Sub

Edit: Ajouter la déprotection / protection de la feuille Septembre si nécessaire avant les modifs de Hidden !



Modifié par Debrief le 22/08/2019 21:54
delta70
 Posté le 22/08/2019 à 22:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonsoir Debrief
Je te remercie pour ta réponse.
Bonne soirée

Debrief
 Posté le 23/08/2019 à 06:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

No problem ! Si ça ne te convient pas, n'hésite pas à re-poster.

Cordialement,
D.

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
macro excel Tirage d'une tombola
macro pour date en pied de page
VBA/Macro, collage spéciale avec liaison
Creation d' une macro sur EXCEL
MACRO EXCEL MAC POUR ENREGISTRER PDF
Macro excel pour une somme conditionnel
Macro excel pour calcul d’itération
Word 2007 problème Macro au démarrage
problème enregistrement macro par enregistreur
Macro Excel Afficher message d'intervention
Plus de sujets relatifs à Macro à corriger
 > Tous les forums > Forum Bureautique