[Excel/VBA] cacher lignes via macrocommande
Résolu
chossette9
Messages postés
6855
Date d'inscription
Statut
Contributeur
Dernière intervention
-
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
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.
--
Ce mec la n'était pas une lumière, car il était niais.
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.
--
Ce mec la n'était pas une lumière, car il était niais.
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 ...-
-
-
-
-
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.
-
-
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-
-
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. -
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 -
-
-
-
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.-
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 -
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! -
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 -
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. -
-