Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Comme je n'ai pas de réponse, je t'ai ajouté une nouvelle feuille de résultats.
Elle utilise une autre méthode sans ListBox1 et donc tu ne devrais plus avoir l'erreur.
Bonjour à toutes & à tous, bonjour @gbinforme @JFG choisira, s'il suit encore cette conversation.
Moi ce que je proposais, c'était plutôt pour l'exercice : "est-il possible de faire ça par formule" avec excel 2024 ou 365 ?"
Et tant qu'à faire en respectant le plus possible l'image donnée en exemple.
Il faut un peu se creuser la cervelle, mais on y arrive.
Bonjour à toutes & à tous, bonjour @JFG
Le sujet me semble clos, mais j'ai une proposition que je soumets ici :
Voilà l'aspect du tableau que j'obtiens : Regarde la pièce jointe 1222086
La hauteur des rangées est calibrée sur l'équipe présentant le plus de partants (ici l'équipe 6 a 12 partants)
Les données sont placées dans le tableau structuré "TS_Listing"
Deux formules donnent le nombre d'équipes et le nombre maximal de partant par équipes (les cellules contenant ces formules sont baptisées respectivement "NbEqu" et "NbParEqu")
Le tableau est généré grâce à 2 formules matricielles dynamiques. Il s'adapte automatiquement lorsque le contenu du TS "TS_Listing" évolue.
La première est placé dans un nom défini "Equipe". C'est une fonction LAMBDA qui génére la liste d'une équipe dont l'index est passé en paramètre : Equipe(1) renvoie le tableau élémentaire présentant l'équipe N° 1.
Sa formule est :
La deuxième c'est celle que l'on trouve sur la feuille "Tableau", elle génère la totalité du tableau. Elle est composée de deux fonctions LAMBDA récursives, l'une qui génère un groupe de lignes du tableau, l'autre itère sur chaque groupe de ligne. Sa formule est :
Le nombre d'équipes par groupe de lignes est défini par le paramètre PAS de la fonction LET (ici il est de 4)
Donc une seule formule sur la feuille tableau génère la totalité du tableau !
Le reste est réalisé par 7 formats conditionnels, une macro les remets à jour à l'activation de la feuille "Tableau" :
VB:
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
MàJ_MFC_Feuille_Tableau
Application.ScreenUpdating = True
End Sub
VB:
Sub MàJ_MFC_Feuille_Tableau()
Const Gris = 11184814, Orange = 49407, Bleu = 12611584
'Nouvelle plage d'application des formats conditionnels
Dim Rg As Range
With Sh_Tableau.[L_1#]
Set Rg = .Offset(-1, -1).Resize(.Rows.Count + 1, .Columns.Count + 1)
End With
'Suppression des anciens formats conditionnels
Sh_Tableau.Cells.FormatConditions.Delete
'Recréer les formats conditionnels
'Cellules grises horizontales
With Rg.FormatConditions.Add(Type:=xlExpression, Formula1:="=MOD(LIGNE()-LIGNE(L_1);13)=12")
.Interior.Color = Gris
.StopIfTrue = False
End With
'Cellules grises verticales
With Rg.FormatConditions.Add(Type:=xlExpression, Formula1:="=(MOD(COLONNE()-COLONNE(L_1);4)=3)*((COLONNE()<COLONNE(L_1))+(COLONNE()=(COLONNE(L_1)+COLONNES(L_1#)-1)))")
.Interior.Color = Gris
.StopIfTrue = False
End With
'Fond orange, texte bleu, gras pour le nom des équipes
With Rg.FormatConditions.Add(Type:=xlExpression, Formula1:="=(MOD(LIGNE()-LIGNE(L_1);13)=0)*(MOD(COLONNE()-COLONNE(L_1);4)<>3)*(DECALER(B3;0;1-MOD(COLONNE()-COLONNE(L_1);4);1;1)<>"""")")
.Interior.Color = Orange
.Font.Color = Bleu
.Font.Bold = True
.StopIfTrue = False
End With
'Trait horizontal supérieur
With Rg.FormatConditions.Add(Type:=xlExpression, Formula1:="=(MOD(LIGNE()-LIGNE(L_1);13)=1)*(MOD(COLONNE()-COLONNE(L_1);4)<>3)*(B3<>"""")")
.Borders(xlTop).LineStyle = xlContinuous
.StopIfTrue = False
End With
'Trait vertical Gauche
With Rg.FormatConditions.Add(Type:=xlExpression, Formula1:="=(MOD(COLONNE()-COLONNE(L_1);4)=0)*(B3<>"""")")
.Borders(xlLeft).LineStyle = xlContinuous
.StopIfTrue = False
End With
'Trait vertical droit
With Rg.FormatConditions.Add(Type:=xlExpression, Formula1:="=(MOD(COLONNE()-COLONNE(L_1);4)=2)*(B3<>"""")")
.Borders(xlRight).LineStyle = xlContinuous
.StopIfTrue = False
End With
'Trait horizontal inférieur
With Rg.FormatConditions.Add(Type:=xlExpression, Formula1:="=(B3<>"""")*(B4="""")")
.Borders(xlBottom).LineStyle = xlContinuous
.StopIfTrue = False
End With
End Sub
Voilà, juste une tentative pour voir si c'était possible 🤔: eh bien oui, c'est possible 🤗!
Bonjour,
Merci pour cette solution, en effet j'ai réalisé mon tableau avec l'aide précieuse de ce site, je suis ici débutant et je n'ai a priori pas répondu à certaines questions, je suis désolé mais encore merci a tous
@JFG
Merci de ton retour et de ton implication car tu aurais pu passer à autre chose.
Il y a toujours une première fois et toi tu as pu réaliser ce que tu souhaitais
c'est le principal car pour un début le stress est souvent plus intense.
Bonne continuation.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD