[VBA] Définir une zone (ligne/colonne entière) pour pouvoir la masquer

antha

XLDnaute Occasionnel
[VBA] Définir une zone dynamique pour pouvoir la masquer

Bonsoir à tou(te)s !:)

J'essaye d'ajouter 2 macros qui ont le même but : définir une zone dynamique de lignes ou colonnes entières et les masquer.

J'ai réussi à le faire en passant par une zone nommée, mais ca ne fait que rajouter encore un nom, et alourdir un peu plus le fichier global.

Y aurait-il plus simple comme solution que :
Code:
  ActiveWorkbook.Names.Add Name:="masquer" & ActiveSheet.Range("B5"), RefersToR1C1:= _
      "=OFFSET(R6C1,COUNTIF(nomprat,""<>0"")*4,,,)" 'Définition de la zone à masquer (masquer##)
      
        Range(Range("masquer" & ActiveSheet.Range("B5")), Range("A161")).EntireRow.Hidden = True

C'est l'onglet2, je décale la cellule A6 d'un certain nombre (4*le nb d'une autre zone nommée du fichier) pour obtenir la 1ere ligne vide. Ensuite j'étend la sélection jusquà la cellule A161. et je masque.

Peut-on se passer de l'étape zone nommé et intégrer la formule directement dans le code pour masquer ? J'ai essayé, mais j'obtiens des erreurs que j'ai beaucoup de mal à déchiffrer.

Sur l'onglet 1, je cherche à faire la même chose sauf qu'il s'agit là de colonne.
Trouver la zone qui contient les 0 et masquer les colonnes qui correspondent.

Sinon, je passerai par la même solution :)

Merci de votre aide!
(en espérant avoir été compréhensible :p)
 

Pièces jointes

  • decaler et masquer.zip
    18.7 KB · Affichages: 87
  • decaler et masquer.zip
    18.7 KB · Affichages: 94
  • decaler et masquer.zip
    18.7 KB · Affichages: 86
Dernière édition:

Creepy

XLDnaute Accro
Re : [VBA] Définir une zone (ligne/colonne entière) pour pouvoir la masquer

Bonjour le Forum, Antha,

Tu n'as pas besoin de nommer une plage pour la masquer. Il te suffit de donner les bonnes "bornes".

Je n'ai pas bien compris ton histoire de formule et sur quoi elle repose.

Cependant tu trouveras dans l'exemple joint deux boutons. Le premier masque une plage fixe de 5 à 21 et le deuxieme masque une plage variable en fonctin de la valeur que tu auras mise en B1.

Comme cela tu vois les deux possibilités.

En espérant que cela t'aide.

@+

Creepy
 

Pièces jointes

  • decaler et masquer.zip
    24.2 KB · Affichages: 160
  • decaler et masquer.zip
    24.2 KB · Affichages: 162
  • decaler et masquer.zip
    24.2 KB · Affichages: 163

antha

XLDnaute Occasionnel
Re : [VBA] Définir une zone (ligne/colonne entière) pour pouvoir la masquer

Bonjour :)

Je suis tout à fait d'accord pour l'histoire des bornes. Mais justement je ne connais pas suffisamment vba pour pouvoir inscrire les bornes directement dans la macro. La seule solution que j'avais trouvée, c'est de définir par une formule excel la zone pour la réutiliser ensuite.

La formule sur chaque onglet revient à trouver le 1er zero et le dernier et masquer l'ensemble de la plage entre.

Je vais regarder le code que tu m'as donné et essayer de l'adapter! :)

Merci beaucoup et sûrement à toute à l'heure :p

Bonne journée
 

Creepy

XLDnaute Accro
Re : [VBA] Définir une zone (ligne/colonne entière) pour pouvoir la masquer

Re,

Avec plus de detail je peux te montrer comment inclure directement dans le code la cellule de fin.

Sinon regarde mon deuxième exemple qui te montre comment masquer en se basant sur la valeur d'une cellule comme valeur de fin de ta plage.

Creepy
 

antha

XLDnaute Occasionnel
Re : [VBA] Définir une zone (ligne/colonne entière) pour pouvoir la masquer

Re bonjour!:)

Dans la macro que tu as inséré, il y a une référence au contenu d'une cellule.

Les plages à masquer pouvant évoluer (cela tient compte du nombre de personnes à intégrer au planning (onglet2), ou du nombre de secteur (onglet1)), il faut que j'inscrive dans les cellules, la formule qui renverra les numéros de colonnes ou lignes.

Ce que je cherchais, c'est de savoir s'il est possible d'intégrer ces formules directement dans la macro, sans avoir besoin de référence à une cellule qui contiendrait elle la formule.

Voici les formules que je n'arrive pas à traduire en vba, et qui en charabia excelo-vba ressemblerait à :
Rows(MATCH(0,R6C2:R161C2,0)+5:MATCH(0,R6C2:R161C2,1)+5).EntireRow.Hidden = True
===> Cela me renvoie une incompatibilité de type

Columns(MATCH(0,R8C6:R8C26,0)+5:MATCH(0,R8C6:R8C26,1)+5).EntireColumn.Hidden = True
===> Cela génère également une erreur. Il semble même qu'il ne connaisse pas la syntaxe puisqu'en remplacant par des chiffres cela ne fonctionne pas.

Dans chaque cas, il s'agit de trouver le 1er zero, puis le dernier, et de sélectionner la plage entre.

Sinon, je retiendrai ta solution qui est tt de meme plus pratique que l'initiale :)

Bon après midi et merci à tous ceux qui auraient une idée.
 
Dernière édition:

Creepy

XLDnaute Accro
Re : [VBA] Définir une zone (ligne/colonne entière) pour pouvoir la masquer

RE,

Ca y'est j'ai compris !!!!

Vieux motard que jamais .... :p

Regarde la PJ c'est ce que tu veux. J'ai bcp commenté le code pour que tu comprennes !!

@+

Creepy
 

Pièces jointes

  • decaler et masquer.zip
    25 KB · Affichages: 160
  • decaler et masquer.zip
    25 KB · Affichages: 170
  • decaler et masquer.zip
    25 KB · Affichages: 160

antha

XLDnaute Occasionnel
Re : [VBA] Définir une zone (ligne/colonne entière) pour pouvoir la masquer

Re-Re :p

J'ai modifié légèrement le code pour les lignes à masquer... pour alléger la feuille et pouvoir l'attacher, j'avais supprimé des valeurs qui se trouvait à la suite du tableau. J'ai donc mis en fixe la dernière ligne (mais merci pour m'avoir expliqué comment trouver la derniere ligne, ca me sera utile) et cela marche impec merci !!!! :)

Concernant les colonnes à masquer, j'aurai (encore:d) une question :

J'ai réutilisé ta boucle pour trouver la cellule de départ, et c'est bon (vérifié par un msgbox). En revanche, il semble qu'il veuille une référence de type columns("f:y") plutot que ("6,20").

Comment faire pour passer de l'un à l'autre ??

J'ai cherché et ai trouvé :
Split(Columns(Boucle).Address(ColumnAbsolute:=False), ":")(1)

J'ai donc écrit (pour masquer dans le cas présent de J à Y) :
Code:
Columns(Split(Columns(Boucle).Address(ColumnAbsolute:=False), ":")(1) & ":" & Split(Columns(25).Address(ColumnAbsolute:=False), ":")(1)).Select
Selection.EntireColumn.Hidden = True

Cela cache de la colonne C à Y, alors que normalement cela devrait être de J à Y (j'ai vérifié par 2 Msgbox, qui renvoient bien 10 et $J avant l'exécution de la suite).

Saurais-tu pourquoi ? ou y a-t-il plus simple ?

Merci encore une fois pour l'aide et le temps que tu y as déjà passé!:)
 
Dernière édition:

antha

XLDnaute Occasionnel
Re : [VBA] Définir une zone (ligne/colonne entière) pour pouvoir la masquer

Ouf!

J'ai réussi en passant plus simplement par :

Range(Cells(8, Boucle), Cells(8, 20)).EntireColumn.Hidden = True

et cela fonctionne parfaitement !


Une autre question pendant que j'y suis (après tout...) : est-il possible de faire une boucle à l'envers ? Je m'explique : partir par exemple de la ligne 200 et remonter pour faire un test.
J'ai essayé en mettant For Boucle2 = 200 to 6, et le msg box reste à 200 après le test.

Edit : trouvé aussi! Step-1 :)


Merci pour ton aide Creepy, je vais pouvoir finaliser mon fichier

Bonne fin de journée.
 
Dernière édition: