[Excel/VBA] cacher lignes via macrocommande

Résolu/Fermé
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 - 7 oct. 2011 à 11:04
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 14 oct. 2011 à 18:41
Bonjour,

je reviens à la charge avec mon fichier pour une nouvelle question :
https://www.cjoint.com/?AJgiMcJQ2Th

Ce fichier permet de gérer les résultats des matches de coupe d'Europe.
Chaque match se joue en match aller retour. Les règles pour déterminer le vainqueur d'un 'match' sont les suivantes :
- l'équipe qui a marqué le plus de buts sur l'ensemble des 2 rencontres
- en cas d'égalité, l'équipe qui a marqu" le plus de buts à l'extérieur
- si les équipes on marqué autant de buts à l'extérieur, on passe aux prolongations
- s'il y a toujours égalité au bout des prolongations, on passe à une séance de tirs aux buts.

A partir de ces constats, j'aimerais que :
- tant que les cases du match retour ne sont pas remplies, on cache les lignes correspondant aux prolongations et aux tirs aux buts.
- en cas d'égalité parfaite (même nombre de buts total, et marqués à l'extérieur), la ligne des prolongations apparaisse.
- en cas d'égalité même après les prolongations, afficher alors la ligne des tirs aux buts.

Cordialement.


A voir également:

3 réponses

petite précision,

si les équipes on marqué autant de buts à l'extérieur, on passe aux prolongations ==> revient à dire que le résultat du match 1 est le même que le match 2 !

Je vois ce que tu veux faire, mais pour le mettre en place je ne vois pas trop ...
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
7 oct. 2011 à 11:10
Oui je suis d'accord sur ta précision Lentz. C'est ce que j'ai fait normalement pour calculer le vainqueur du match (si tu remplis les cases des scores, sous les dernières cases doivent s'afficher le score cumulé et le nom de l'équipe qui est qualifiée).
0
Je sais pas si la précision était utile mais on ne sait jamais, ça peut aider pour la macro...

A retranscrire en vba,

si score 1 = score 2 alors ligne prolongation,
si but lors de prolongation, stop
sinon ligne Tir aux buts
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
7 oct. 2011 à 11:24
Je modifierais ta retranscription Lentz :

si score1 = score 2 alors ligne prolongation
si prolongation_domicile <> prolongation_extérieur stop
sinon ligne tirs aux buts.

En effet, s'il y a 1-1 en prolongation, il y a toujours égalité, il faut donc passer par les tirs aux buts.
0
euh...tu es sur ? car il y a plus de but a l'extérieur du coup
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
7 oct. 2011 à 11:34
Oui je suis sur de mon coup :)

La règle du but à l'extérieur n'est valable que pendant le temps réglementaires des deux rencontres. A partir du moment où on passe aux prolongations, il faut qu'un équipe marque un but de plus que l'autre, sinon l'égalité aux but des prolongations entraine la séance de tirs aux buts.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
7 oct. 2011 à 13:03
Bonjour,

Une proposition (si j'ai bien compris les règles) :
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ligMatch As Long, scoreOk As Boolean
    If (Target.Column = 7 Or Target.Column = 9) And Target.Row > 2 Then
        ligMatch = Target.Row
        While Left(Cells(ligMatch, 1), 6) <> "Match "
            ligMatch = ligMatch - 1
        Wend
        ' ligne prolongation
        scoreOk = Not (Cells(ligMatch, 7) = "" Or Cells(ligMatch, 9) = "" Or Cells(ligMatch + 1, 7) = "" Or Cells(ligMatch + 1, 9) = "")
        If scoreOk Then
            Rows(ligMatch + 2).Hidden = Not (Cells(ligMatch, 7) = Cells(ligMatch + 1, 9) And Cells(ligMatch, 9) = Cells(ligMatch + 1, 7))
        Else
            Rows(ligMatch + 2).Hidden = True
        End If
        ' ligne tirs aux buts
        If scoreOk Then
            Rows(ligMatch + 3).Hidden = Cells(ligMatch + 2, 7) <> 0 Or Cells(ligMatch + 2, 9) <> 0
        Else
            Rows(ligMatch + 3).Hidden = True
        End If
    End If
End Sub

Sub initLignesMasquées()
    Dim lig As Long
    Application.ScreenUpdating = False
    For lig = 3 To [A65536].End(xlUp).Row Step 7
        Worksheet_Change (Cells(lig, 7))
    Next lig
    Application.ScreenUpdating = True
End Sub

eric
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
7 oct. 2011 à 13:11
Je teste et te dit si c'est ce qu'il me faut. Mais en tout cas tu vas me sortir d'un bien mauvais pas !

Par contre pour que les lignes soient masquées à l'ouverture du fichier, il faut que je mette la procédure initLignesMasquées dans une procédure Workbook_Open ?
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
Modifié par chossette9 le 7/10/2011 à 13:57
La macro marche sur cet onglet, mais (oui il y a un mais, mais pas taper, pas taper !), mon classeur contiendra au final plusieurs onglets (7 au total). Cette macro devra être appliqué sur 4 des 7 onglets.

Je pense qu'une version de mon classeur avec plusieurs onglets sera utile, alors la voici :
https://www.cjoint.com/?AJhnwNB1u9u
Les lignes masquées doivent l'être sur les onglets où les matches sont à élimination directe en aller-retour (Barrages EL, Phases finales EL, Barrages CL, Phase finales CL).

Désolé de ne pas avoir tout donné d'un coup.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 7/10/2011 à 15:02
J'ai mis dans ThisWorkbook.
Par contre avant je me basais sur 'Match x' pour me caler sur le début, maintenant il peut y avoir 'Quart', Seizième' etc.
Pour simplifier je recherche donc la 1ère cellule non vide pour me caller, n'inscrit rien d'autre en A entre 2 matches.

Par contre pour que les lignes soient masquées à l'ouverture du fichier, il faut que je mette la procédure initLignesMasquées dans une procédure Workbook_Open ?
Non, c'est à lancer 1 fois c'est tout, ensuite ça s'ajuste au fur et à mesure des saisies en G et I.

http://www.cijoint.fr/cjlink.php?file=cj201110/cijgBreR8m.xls
Je te laisse tester.

eric
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
Modifié par chossette9 le 7/10/2011 à 15:09
Ca ne marche pas, quand j'essaie d'exécuter la fonction initLignesMasquées, j'ai un message d'erreur 1004, et la ligne suivante est surlignée en jaune dans la procédure Worksheet_Change :
While Left(Cells(ligMatch, 1), 6) <> "Match "
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
7 oct. 2011 à 15:08
autant pour moi je n'ai rien dit, je n'avais pas vu que ma macro Workbook_Open fonctionnait :D

Ca semble excellent ! Merci beaucoup eric. Je testerais un peu plus en profondeur chez moi ce weekend !
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
14 oct. 2011 à 09:39
Bonjour,

mes ardeurs d'hier soir étant calmé, je vais faire un point sur la situation : j'ai repris les macros du dernier fichier d'eric. Cela fonctionne à 99%, car il y a 2 petits problèmes un peu spéciaux :

- sur les feuilles avec les matches aller-retour, les prolongations et t.a.b du dernier match ne sont pas masqués. Je suis obligé de le faire moi même.

- à chaque fois sur le deuxième tour (deuxième tour pour les feuilles de barrages, Huitièmes de finale en Europa League, quarts en Champions League), le premier match à 3 lignes de masquées. La ligne concernant le match retour est masquée alors qu'elle ne devrait pas, et je ne comprends pas pourquoi.

J'ai réussi à légèrement modifier la macro pour que seule la ligne des prolongations apparaisse lorsqu'il y a égalité parfaite entre les deux équipes, puis que la ligne des tirs aux buts apparaisse à son tour quand il y a 0-0 pendant les prolongations.

Cordialement.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 14/10/2011 à 10:46
Bonjour,

1) constaté, il faut ajouter + 7 dans :
For lig = 3 To .[A65536].End(xlUp).Row + 7 Step 7

2) je n'ai pas constaté...

J'avais oublié d'enlever le module1, les macros à prendre en compte sont bien dans ThisWorkbook..
Et il est inutile de lancer initLignesMasquées à chaque ouverture, 1 fois au début c'est suffisant.

Le fichier mis à jour :
http://www.cijoint.fr/cjlink.php?file=cj201110/cijySrNh92.xls
Fais tes tests sur celui-ci et confirme le 2)
Si pb donne-moi le vrai nom de la feuille et les actions à faire pour le constater

eric
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
14 oct. 2011 à 13:32
Bonjour Eric,

concernant le point 2, je constate toujours le problème dont je te parlais :
- onglet 'Barrages EL', ligne 382 : la 383 est cachée alors qu'il ne faudrait pas
- onglet 'Phases finales EL', ligne 116 : la 117 est cachée alors qu'il ne faudrait pas
- onglet 'Barrages CL', ligne 25 : la 26 est cachée alors qu'il ne faudrait pas
- onglet 'Phases finales CL', ligne 60 : la 61 est cachée alors qu'il ne faudrait pas

Concernant le lancement de initLignesMasquées, est-il possible de compter le nombre de fois où l'on ouvre un classeur?

Merci!
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
14 oct. 2011 à 13:55
concernant le point 2, je constate toujours le problème dont je te parlais :
- onglet 'Barrages EL', ligne 382 : la 383 est cachée alors qu'il ne faudrait pas
- onglet 'Phases finales EL', ligne 116 : la 117 est cachée alors qu'il ne faudrait pas
- onglet 'Barrages CL', ligne 25 : la 26 est cachée alors qu'il ne faudrait pas
- onglet 'Phases finales CL', ligne 60 : la 61 est cachée alors qu'il ne faudrait pas

Ta ligne de titre ajoutée brise le pas de 7 lignes.
Corrigé en forçant l'affichage de 2 lignes sur chaque ligne de match

Concernant le lancement de initLignesMasquées, est-il possible de compter le nombre de fois où l'on ouvre un classeur?
Oui on peut compter le nombre de fois que le classeur est ouvert mais je ne vois pas le rapport avec initLignesMasquées qui est à lancer une fois c'est tout (et là c'est déjà fait)

http://www.cijoint.fr/cjlink.php?file=cj201110/cij8PK5I1T.xls

eric
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
14 oct. 2011 à 16:52
Merci pour le premier point !

Je sais que je t'embête avec le lancement de la macro. Mais ce que je veux, c'est créer un modèle sans lignes cachées, et que quand j'ouvre ce modèle, il me crée un nouveau fichier avec les lignes cachées. Cette initialisation ne se fera qu'une fois.

Mais le plus simple effectivement c'est qu'à la création du nouveau fichier, je lance la procédure de masquage des lignes.

Cordialement.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
14 oct. 2011 à 18:41
Oui, je pense que c'est mieux de la lancer au coup par coup, c'est une procédure longue et c'est bête de se pénaliser systématiquement à l'ouverture.
eric
0