Affichage/Masquage de lignes/colonnes selon 2 conditions Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
c
cazst
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 5 mars 2014
Version d'Excel : 2003 FR

Message par cazst » 25 mars 2014, 15:24

Bonjour tout le monde et déjà merci pour le temps que vous accordez à ma problématique,

Je me permets de faire appel à vos connaissances afin de répondre à cette interrogation :
Est il possible d'afficher/masquer des lignes et/ou des colonnes selon deux conditions ?

Le document (simplifié) présent en PJ permettra d'illustrer mes propos.

Voici les deux conditions :
CONDITION 1 : selon le contenu des cellules A8 à O8, certaines colonnes devront être masquées.
CONDITION 2 : selon le contenu des cellules A11 à O11, certaines lignes devront être masquées.
(Je pars du principe que le 1 signifie que je veux les infos correspondantes et que le 0 signifie que non)

Je souhaite donc définir un modèle (création d'une macro ?) permettant, selon les champs renseignés dans les tableaux des colonnes A à O, d'afficher ou de masquer certaines colonnes ou certaines lignes, afin de n'avoir de façon visible que les informations relatives au site et au métier recherché.

Pour illustrer, voici un exemple de ce que je souhaiterai :

CONDITION 1 : en mettant un 1 en cellule B8, les colonnes R à AA sont affichées (partie commune, qui doit tjrs être affichée peu importe les conditions) ainsi que les colonnes AJ à AQ (informations relatives au site choisi). Toutes les autres colonnes devront dans ce cas être masquées.

CONDITION 2 : Par ailleurs, tout en laissant la première condition active, je souhaite qu'en cas de 1 en A11, les lignes 8 à 10 (infos spécifiques au métier 1) et les lignes 14 à 17 (infos communes aux métiers 1 et 2) soient également affichées. Les autres lignes devant être masquées.


CONCLUSION : Selon cet exemple seules les lignes 8 à 10 et 14 à 17 ainsi que les colonnes R à AA et AJ à AQ devront être affichées.

J'espère ne pas avoir été trop confus. Je souhaite dans un premier temps savoir si la solution que j'ai imaginé est faisable sous excel ?
Si vous me répondez par l'affirmative, je mettrai en ligne le document complet afin de réfléchir ensemble sur la solution finale.

Je vous remercie encore pour votre aide et suis à votre disposition pour plus de précisions au besoin.

Bonne journée !

Steven
Exemple.xls
(236.5 Kio) Téléchargé 17 fois
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'668
Appréciations reçues : 346
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 26 mars 2014, 13:27

Bonjour et bienvenue sur le forum

Un essai à tester.
Te convient-il ?
Exemple V1.xls
(279 Kio) Téléchargé 42 fois
c
cazst
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 5 mars 2014
Version d'Excel : 2003 FR

Message par cazst » 26 mars 2014, 14:09

Bonjour GMB, et merci pour votre aide.

Je suis désolé mais lorsque j'ouvre votre document, un message d'alerte m'affiche que "les macros du classeur sont désactivées en raison d'un niveau de sécurité élevé ou de l'absence de signature numérique au moyen d'un certificat approuvé (...)".

Je n'arrive donc pas à afficher vos macro ou à les faire fonctionner... Savez vous comment y remédier ?

Merci et bonne journée.
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'668
Appréciations reçues : 346
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 26 mars 2014, 16:09

c
cazst
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 5 mars 2014
Version d'Excel : 2003 FR

Message par cazst » 27 mars 2014, 08:59

Bonjour GMD,

C'est exactement ce que je recherche ! merci.

En revanche, quand je change une valeur dans mes tableaux "site" ou "métier" (quand je mets un 1 par exemple), une erreur de compilation s'affiche : variable non définie :

Private Sub Worksheet_Change(ByVal Target As Range)

Set RepèreDép = Cells.Find("Site", Lookat:=xlWhole)


End Sub


Merci !


Sinon, de mon coté j'ai commencé à travailler sur du code concernant les sites (les métiers ce sera pour aujourd'hui) tel que celui ci (les noms de colonnes correspondent pas au document que tu as, mais tu comprendras l'idée) :

'Masquer les colonnes Z:EO
Columns("Z:EO").Select
Selection.EntireColumn.Hidden = True

'si 08=1 alors afficher les colonnes Z:AH
If Range("O8") = "1" Then
Columns("Z:AH").Select
Selection.EntireColumn.Hidden = False
End If
'si 08=0 alors masquer les colonnes Z:AH
If Range("O8") = "0" Then
Columns("Z:AH").Select
Selection.EntireColumn.Hidden = True
End If

(... répétition pour chaque site)

End Sub


Le code donne également des résultats satisfaisant lors de mes premiers tests. Qu'en penses tu ?

Bonne journée.
Steven.

En revanche, une question me vient :

Est ce que les données de la Macro sont modifiées après le rajout d'une ligne par exemple.

Prenons le cas d'une macro qui masque les lignes 19 à 28. Si je rajoute une ligne entre la ligne 13 et 14, par exemple, est ce que la macro masquera, du coup, les lignes 20 à 29 ou continuera de masquer les lignes 19 à 28 et donc ne sera plus fidèle à son objectif initial ?

Merci.
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'668
Appréciations reçues : 346
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 27 mars 2014, 10:05

Bonjour
Pour ce qui est du bug, essaie la nouvelle version que je t’envoie.
A propos des bouts de code que tu as écris, tu me demandes ce que j’en pense.
Voici, en prenant l’exemple du premier :
Columns("Z:EO").Select
Selection.EntireColumn.Hidden = True
1 – Tu ne précises pas à quelle feuille appartiennent les colonnes Z à EO. La macro va donc travailler sur la feuille active au moment oû elle rencontrera ces instructions. Il faut donc t’assurer que ce sera bien le cas. Sinon, tu devras lui préciser sur quelle feuille aller :
Sheets(« Feuil2 »).select
Columns("Z:EO").Select
Selection.EntireColumn.Hidden = True
2 – Tu n’es pas obligé de sélectionner feuilles et cellules. Tu peux rester sur la même feuille ou la même cellule et dire à la macro d’aller y faire le travail sans se déplacer ; elle ira plus vite :
Columns("Z:EO"). EntireColumn.Hidden = True
Ou encore :
Sheets(« Feuil1 »). Columns("Z:EO")..EntireColumn.Hidden = True
Bon courage !
Bye !
Exemple V3.xls
(279 Kio) Téléchargé 32 fois
c
cazst
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 5 mars 2014
Version d'Excel : 2003 FR

Message par cazst » 27 mars 2014, 11:18

GMD,

Concernant ton fichier, super il marche ! merci !

Concernant mon code, par chance, le fait que la feuille concernée ne soit pas identifiée n'affecte en rien aux résultats souhaitée, donc ça va. En revanche je prend en note tes conseils pour simplifier mon code ! Merci.

En revanche, une question me vient :

Est ce que les données de la Macro sont modifiées après le rajout d'une ligne par exemple.

Prenons le cas d'une macro qui masque les lignes 19 à 28. Si je rajoute une ligne entre la ligne 13 et 14, par exemple, est ce que la macro masquera, du coup, les lignes 20 à 29 ou continuera de masquer les lignes 19 à 28 et donc ne sera plus fidèle à son objectif initial ?

Merci.

Steven
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'668
Appréciations reçues : 346
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 27 mars 2014, 12:52

Re

Pour répondre à ta question et en reprenant ton exemple, je dirai que la macro ne pourra pas deviner que tu as ajouté une ligne et continuera de masquer les lignes 19 à 28.
Toute l’astuce consistera à identifier les numéros de la première et de la dernière des lignes à masquer. Ex le numéro de la ligne où en colonne C on a « Métier 2 » et celui où on a « Métier 3 ».
Bye !
c
cazst
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 5 mars 2014
Version d'Excel : 2003 FR

Message par cazst » 27 mars 2014, 13:02

GMD,

OK. Et un nouveau merci pour ton aide.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message