[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 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 14 oct. 2011 à 18:41
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 14 oct. 2011 à 18:41
A voir également:
- [Excel/VBA] cacher lignes via macrocommande
- Liste déroulante excel - Guide
- Aller à la ligne excel - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Si et excel - Guide
- Word et excel gratuit - 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 ...
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
7 oct. 2011 à 13:03
7 oct. 2011 à 13:03
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
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 309
7 oct. 2011 à 13:11
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 ?
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 ?
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 309
Modifié par chossette9 le 7/10/2011 à 13:57
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.
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
Modifié par eriiic le 7/10/2011 à 15:02
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
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
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 309
Modifié par chossette9 le 7/10/2011 à 15:09
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 "
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 309
7 oct. 2011 à 15:08
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 !
Ca semble excellent ! Merci beaucoup eric. Je testerais un peu plus en profondeur chez moi ce weekend !
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 309
14 oct. 2011 à 09:39
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.
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
Modifié par eriiic le 14/10/2011 à 10:46
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
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
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 309
14 oct. 2011 à 13:32
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!
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!
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
14 oct. 2011 à 13:55
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
- 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
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 309
14 oct. 2011 à 16:52
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.
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
14 oct. 2011 à 18:41
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
eric
7 oct. 2011 à 11:10
Modifié par Lentz le 7/10/2011 à 11:15
A retranscrire en vba,
si score 1 = score 2 alors ligne prolongation,
si but lors de prolongation, stop
sinon ligne Tir aux buts
7 oct. 2011 à 11:24
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.
7 oct. 2011 à 11:29
7 oct. 2011 à 11:34
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.