[Excel/VBA] cacher lignes via macrocommande
Résolu
chossette9
Messages postés
4239
Date d'inscription
Statut
Contributeur
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 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.
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:
- [Excel/VBA] cacher lignes via macrocommande
- Liste déroulante excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
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 ...
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 ...
Bonjour,
Une proposition (si j'ai bien compris les règles) :
eric
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.
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
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.
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
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
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
- 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.
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.
A retranscrire en vba,
si score 1 = score 2 alors ligne prolongation,
si but lors de prolongation, stop
sinon ligne Tir aux buts
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.
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.