Code VBA pour masquer des colonnes si...

P

Pierre

Guest
Salut Forum (et tous ceux qui y participent)

Dans un fichier qui gère des horaires, j'aimerais que les colonnes qui affichent les 29 février se masquent automatiquement si l'année sélectionnée sur la page d'accueil n'est pas bissextile.
Cela devrait donner quelque chose comme:
Si la feuille février cellule AE3 est égale à 1 (premier mars) alors masque les colonnes AE, BN et CX, sinon affiche les.
Un cador du VBA pourrait-il faire cette traduction pour le béotien que je suis?

D'avance merci. Et bonne journée.

Pierre
 
P

Pierre

Guest
Joolee Joley (bonjour en tibétain)

Génial!
J'aimerais cependant apporter une légère modification, à savoir ne pas activer la feuille "Février" et effectuer l'opération de manière transparente. J'ai essayé de bidouiller le code mais sans succès... I'm very Béotien :eek:(
L'intérêt c'est de masquer les colonnes dès que la date est entrée sur la page d'accueil.J'espère ne pas abuiser.
Merci à toi.


Pierre
 
V

Vériland

Guest
Bonsoir Pierre, Joley et toi le forum,

Voilà une macro qui te permettra de masquer les colonnes AE, BN et CX si l'année et bissextile...

Option Explicit
'
Sub Masquer()
'masquer certaines colonnes si année bissextile
'dans la cellule A1 il faut une donnée
'année (2003) et non une date (17/09/03)
'Vériland
'http://www.excel-downloads.com/html/French/forum/messages/1_49640_49619.htm
Dim Bissextile As String
Dim An As String
'on prend la valeur année
An = [A1]
'on définit la variable
Bissextile = (Day(DateSerial(An, 2, 29)) = 29)
'si année bissextile alors
If Bissextile = True Then
'cacher les colonnes AE(31), BN(66), CX(102)
With [A1]
.Columns(31).Hidden = True
.Columns(66).Hidden = True
.Columns(102).Hidden = True
End With
'fin
End If
End Sub

Sub Afficher()
'cà c'est pour afficher
'les colonnes AE(31), BN(66), CX(102)
With [A1]
.Columns(31).Hidden = False
.Columns(66).Hidden = False
.Columns(102).Hidden = False
End With
End Sub


j'ai fais en sorte de paramétrer la procédure depuis la cellule A1...euh oui...[A1] correspond à la cellule A1 de la feuille active...cela évite d'écrire range etc...

Son principe est simple...si A1 contient une année Bissextile (par exemple 2000) alors masquer les colonnes choisies...(ici AE, BN et CX)

mais Achtung !...lol

A1 doit contenir un nombre et non une date...ce qui veut dire que cette macro ne fonctionnera pas si A1 contient une valeur date : 17/09/03...il faut une valeur numérique entière : 2003...de toute façon un nombre est toujours numérique...ouarf !...enfin tu m'as compris là...lol

Voilà...en dehors d'une macro je pensais aussi à un format conditionnel qui aurait permis de cacher la valeur selon un critère simple =JOUR(A1)=29...mais bon...de toute façon ce format n'aurait pas permis de masquer une colonne...donc...

A+Veriland.gif


PS : Macro à copier depuis le forum auquel cas tu risques d'avoir les attributs gras du post dedans...
 
P

Pierre

Guest
Bonjour Vériland,

Dans ce classeur, j'ai déjà une cellule nommée An qui extrait l'année de la date entrée en D23 (en l'occurence la cellule F24 de la page d'accueil.) Cela a-t-il un influence sur le code?
De plus, la cellule A1 de la feuille de Février est déjà occupée, Y'a-t-il moyen de modifier la feuille Février en fonction de l'année en page d'accueil?
Comme ceci par exemple:
With [A1]
Worksheets("février").Columns(31).Hidden = True
Worksheets("février").Columns(66).Hidden = True
Worksheets("février").Columns(102).Hidden = True
End With
Merci pour les explications dans le code, cela me permet d'être moins ignare :eek:)).

Bonne journée.

Pierre
 
V

Vériland

Guest
Bonsoir Pierre et toi le Forum,

Bon attention...va y avoir de la lecture là...hi hi hi

D'abord pour ce qui est de la variable An dans la macro, il n'y aura aucune incidence dans le fonctionnement de celle-ci, même s'il éxiste déjà une cellule nommée An sur la feuille...en fait la macro est indépendante à ce niveau...

ça c'est pour la première question...

Maintenant pour la cellule A1 j'vais essayer de te répondre d'après ce que je crois comprendre ici...lol...je vais tâcher d'être le plus explicite...ouarf !

Bon à c't'heure-ci j'imagine un fichier avec deux feuilles...la première nommée SOMMAIRE et la deuxième nommée FEVRIER...bon çà c'est sur le classeur...

Mais dans VBA ces mêmes feuilles porteront le nom :

Feuil1(SOMMAIRE) et Feuil2(FEVRIER)...jusque là c'est simple...

Ainsi pour faire réference à la feuille FEVRIER dans la procédure With, on pourrait écrire...

With Feuil2
.Columns(31).Hidden = False
.Columns(66).Hidden = False
.Columns(102).Hidden = False
End With


ou bien...

With Sheets("FEVRIER")
.Columns(31).Hidden = False
.Columns(66).Hidden = False
.Columns(102).Hidden = False
End With


Mais le plus simple est de renommer chaque feuille dans vba :

F1(SOMMAIRE)......(à la place de Feuil1(SOMMAIRE))

F2(FEVRIER)......(à la place de Feuil1(FEVRIER))

ce qui donnerait dans la procédure With :

With F2
.Columns(31).Hidden = False
.Columns(66).Hidden = False
.Columns(102).Hidden = False
End With

c'est plus propre (hein Ti...lol)...c'était une parenthèse...
lol_05.gif


jusqu'à présent, la macro que je t'ai proposée au début se place dans un Module (et non sur une feuille dans vba)...
Seulement j'ai inscris With [A1]...
smiley_799.gif


...et ce [A1], dans les macros Afficher ou Masquer, applique la procédure sur la feuille active...

en clair, si ta feuille active est SOMMAIRE la macro se réfère automatiquement à la cellule A1 de cette feuille...et si ta feuille active est FEVRIER la macro travaillera automatiquement sur cette feuille et non sur l'autre...

Ca va ? tu suis...lool

Bon...ben j'continue alors...lol

maintenant, on va faire en sorte de cacher les colonnes de la feuille FEVRIER si année bissextile...

mais aussi que la variable An prenne la valeur de la cellule B5 de la feuille SOMMAIRE...ce qui donnera comme macro...

Option Explicit
'
Sub Masquer()
'masquer certaines colonnes si année bissextile
'dans la cellule A1 il faut une donnée
'année (2003) et non une date (17/09/03)
'Vériland
'http://www.excel-downloads.com/html/French/forum/messages/1_49640_49619.htm
Dim Bissextile As String
Dim An As String
'on prend la valeur année
'F1 = Feuil1 renommée
An = F1.Range("B5").Value
'on définit la variable
Bissextile = (Day(DateSerial(An, 2, 29)) = 29)
'si année bissextile alors
If Bissextile = True Then
'cacher les colonnes AE(31), BN(66), CX(102)
With F2
.Columns(2).Hidden = True
.Columns(3).Hidden = True
.Columns(4).Hidden = True
End With
'fin
End If
End Sub

Sub Afficher()
'cà c'est pour afficher
'les colonnes AE(31), BN(66), CX(102)
'F2 = Feuil2 renommée
With F2
.Columns(2).Hidden = False
.Columns(3).Hidden = False
.Columns(4).Hidden = False
End With
End Sub


j'ai pris la cellule B5 de la feuille SOMMAIRE mais j'aurais pu en choisir une autre...sur une feuille il y à 16.711.680 cellules...lol

Par contre pour que cela fonctionne bien il faut qu'il y ait une valeur entière de TYPE 2003 dans la cellule B5...

Mais...???

Comment inscrire cette valeur dans cette cellule ?...je ne vais tout de même pas la mettre à chaque fois non ???

Ah ben c'est une bonne question là...lol...il y a une solution...

Alors pour afficher l'année dans cette cellule B5 on va déjà supposer que dans la cellule D5 il y a déjà une date...

par exemple : 18/09/03

ainsi pour arriver au résultat souhaité dans B5 il faut inscrire cette formule...dans la cellule B5...

=ANNEE(D5)

...(ANNEE est une fonction)

...voilà...normalement je pense que tu y arriveras...si ce n'est pas compréhensible joins nous un fichier...

Bonne programmation

A+Veriland.gif


PS : Tiens j'bois un coup j'ai soif là...hi hi hi...Santé...

Macro à copier depuis le forum auquel cas tu risques d'avoir les attributs gras du post dedans...
 
P

Pierre

Guest
Bonjour Vériland,

Merci pour ta pédagogie, mais elle ne suffit pas à contrer mon ignorance :eek:(((.
Je vais donc t'envoyer le fichier MAIS après compression il fait 919 Ko. Pour le forum c'est un peu lourd non?
Puis-je te l'envoyer sur ta bal privée?

@+

Pierre
 
V

Veriland

Guest
Bonjour Pierre et toi le Forum,

Bon ben c'est pas tellement notre phyosophie ici mais je vais faire en sorte de terminer ce que j'ai commencé avec toi...tu peux m'envoyer ton fichier dans ma BAL...

mais je le regarderai plus tard...là j'suis pas chez moi...lool

Bonne journée

A+ vériland

PS : mon adresse est sur le post précedent...
 
V

Vériland

Guest
Re...

Voilà j'ai bien reçu ton fichier et j'viens de faire le tour du propriétaire...C'est vrai que tu n'aurais pas pu le joindre sur le forum celui là...vu sa taille...lol

Bon en tout cas c'est déjà une belle application...apparemment il n'y a pas grand chose à modifier si ce n'est qu'il reste à définir les procédures pour que la condition s'effectue comme tu le souhaites...

Bon ben j'pense te le renvoyer avant demain...

Patience...en attendant bois un coup...
smiley_233.gif
...mais pas d'excès...lol

A+Veriland.gif


PS : J'ai vu qu'il y a aussi mon ami Ti dans le prog...lol...c'est sympa
 
P

Pierre

Guest
Vériland, bien le bonsoir,

Ben oui c'est une réalisation collective, Celeda entre autre à aussi participé pour les mises en forme conditionnelles. Le forum à compensé mes lacunes et surtout m'a permis d'en apprendre plus long sur ce fabuleux programme. Peut-être que lorsque j'aurai terminé le graduat en info que je viens de commencer, je pourrai à votre instar, dépanner ceux qui apprennent.
S'il n'est pas trop tard peux-tu me renvoyer le fichier sur mon adresse privée (je ne travaille pas ce week-end...)?

Grand merci à toi et toute ma reconnaissance.

Pierre
 
V

Vériland

Guest
Re re et areuh...

Voilà les deux fichiers sont dans ta bal...le tien et celui que j'ai corrigé...en fait tout à l'heure je t'ai renvoyé ton fichier mais je ne sais pas si c'était bien à ton adresse perso...alors pour que tu puisses travailler ce WE j'les ai envoyé aux deux adresses...lool

Bonne programmation

A+Veriland.gif
 
P

Pierre

Guest
Salut Forum et toi Vériland,

Passés un bon week-end? Moi j'en ai profité pour plonger dans le code VBA...
Merci pour ton travail, mais hélas il ne fonctionne pas chez moi, aucun boutons ne fonctionne, et forcément pas non plus l'affichage masquage des colonne...:eek:(( (problème de compatibilté de versions???)
Et c'est vrai que s'il y a moyen de conserver les liens hypertextes plutôt que les boutons, je préfère... Je sais que je suis difficilie, mais ce n'est plus à mon âge que je vais changer...
Dans mes tentatives VBA j'ai réussi à masquer des colonnes sur la feuille 2 en entrant un chiffre sur le feuille 1... J'étais tout content, mais quand j'ai transformé l chiffre en date il me faisait un drôle de truc (troune en boucle sur les jours du mois de janvier, puis affiche un message d'erreur...)
Je vais cependant persévérer dans cette voie, toute aide et tout conseils restant plus que jamais les bienvenus... mais je sens que le chemin est long...
Bon encore merci et bon appétit...

Pierre
 
V

Vériland

Guest
Bonsoir Pierre et toi le forum,

Alors!

Aucun bouton ne fonctionne chez toi ? Ouarf!...
smiley_673.gif
.

Bon ben à mon avis c'est un problème de version Excel...car là les boutons que j'ai installés proviennent de la barre d'outils Contrôle...il n'y à rien d'exceptionnel dans les procédures...enfin bon...lol

Comme tu sembles vouloir garder le principe des liens Hypertexte pour passer d'une feuille à une autre on va néanmoins essayer une autre technique...car le problème avec des Hyperliens c'est qu'il n'est pas possible de leur attribuer une procédure macrologique...ouarf...et par la même enclencher la macro Bissextile devient plus que compliquée à gérer en dehors d'un bouton d'appel...bon...il y aurait la possibilité d'une macro évènementielle mais pour l'instant on va laisser çà de côté...

en fait je pense à ceci...

à la place d'avoir un bouton boite à outils contrôle actuellement en place, on va installer un autre bouton mais qui vient de la barre d'outils formulaire...alors ne me demande pas la différence entre les deux, moi je sais juste qu'il y en à une...loool

Seulement il y aurait quelques modifications à apporter dans les procédures d'appel...si tu y arrives c'est bien...mais je vais tâcher de te donner ton ficher avec ces nouvelles modifications dans la soirée...après tu me tiens au courant de la compatibilité...

Par contre tu peux me redonner ton adressse vers laquelle je peux te joindre ton fichier corrigé ?...

et puis tant qui j'y pense aussi ta version Excel ?

On y arrivera...foi d'Excel...lool

A+Veriland.gif
 
P

Pierre

Guest
Sûr qu'on y arrivera, je n'en ai jamais douté (vu la qualité des aidants sur XLD...)
Une autre possibilité serait d'afficher un MsgBox lors d'une année bissextile qui invite l'utilisateur à cliquer sur un bouton qui lance la macro.
C'est moins joli que quand c'est "toutautomatique" mais ca cumule les avantages des deux formules...
Je vais plancher demain, (je ne travaille pas...) pour voir cela.
Tu peux envoyer le fichier sur mes deux bal (et je reste poli :eek:)))
Pierre.wautier@advalvas.be (privé)
pierre.wautier@fracarita.org (boulot)
Ma version XL97 et pas 2000....

Bon on reste en contact ...

Bonne soirée.


Pierre
 

Discussions similaires