Voici mon classeur Excel, j'en peux plus, j'en appelle à vos lumières !!

Tonino7

XLDnaute Occasionnel
Bonjour à tous,

alors voilà. Après avoir brillament réussi une matrice excel avec des codes vba pour la phase finale de la Coupe du Monde en Allemagne le mois dernier. Je me suis lancé la semaine derniere dans un classeur excel pour le championnat de France de L1 saison 2006-2007.

Et là... je n'en puis plus lol je me suis résigné à vous balancer tout mon fichier avec toutes mes problématiques afin que vous veniez à mon secours lol

donc, mon classeur comporte 4 feuilles (pour le moment).


Ce lien n'existe plus


La premiere : "L1 06-07" (c'est la page principale, la seule qui sera visible à la fin. Celle où on saisit les scores, et où l'on peut voir les anciens également, ainsi que les prochaines journées).

La deuxieme : "BDD". (Tous les matchs du championnat ont été enregistrées ici par la magie de la conversion) et c'est sur cette feuille que les "buts p" et les "buts c" seront inscrit temporairement par rapport à la saisie de la feuille principale "L1 06-07".

La troisième : "Scorebackup" (cette feuille est la vraie Base de donnée. Car tous les scores et les chiffres inscrits ici sont quasi-définitif. Hormis biensur si l'ont resaisi un autre score pour un match déja joué. Mais c'est définitif par rapport à la deuxieme feuille. Et justement, les chiffres sont directement issus de la deuxieme feuille.

La quatrieme :"TCD" c'est le tableau croisé dynamique relié directement à la base de donnée précédente. Et c'est en partie grâce à ce tableau, que les matchs de tel ou tel journée s'afficheront sur la feuille principale "L1 06-07".

Les problèmes auquel je suis confronté ne concernent pour le moment aucunement les points par équipe, avec le classement dans le tableau, etc... ça , logiquement, je saurai faire.

Mais le PROBLEME ici, c'est de rendre le petit encadré de "saisie des scores" sur la page principale en haut à gauche, parfait.
Or,c'est assez complexe.

Car , grâce à la liste déroulant que j'ai créée sur le numéro de journée, je veux que les matchs correspondants apparaissent, ainsi que les scores, si cette journée a déja été jouée. Et si cette journée n'a pas été jouée, il me faut bien évidemment des cellules de saisie vierges, pretes à recevoir le score, qui sera à son tour prêt à etre copié dans la bdd puis le scorebackup.

Je vous explique maintenant la façon dont je veux prodécer:

1) Si je sélectionne la liste déroulant en B5 de "L1 06-07" ; alors la date en B44 se met à jour (ça j'ai réussi à le faire), et tous les matchs avec tous les scores doivent également se mettre à jour à partir de la feuille "TCD" (j'ai fait une macro evenementielle sur la feuille "L1 06-07", mais , en fait les matchs copiés vers la feuille principale sont ceux en cours sur la feuille "tcd", ce qui fait que le fait de changer de journée prend les matchs de l'ancienne journée, enfin ceux qui sont à ce moment précis sur la feuille "tcd". Il y a un temps de décalage.)




Logiquement, tous mes matchs s'affichent ainsi que tous les scores, ou alors des cellules vides si le match n'a pas encore été joué.(quand le probleme de timing aura été réglé)

2) Une fois, ce premier affichage réussit; je passe à la saisie des scores si les matchs n'ont pas encore été joués (ou alors modification de score).
Grâce aux formules rentrées dans les colonnes G et H de la feuille "bdd" ; les scores saisis sur "L1 06-07" sont enregistrés provisoirement sur la feuille"bdd".(tant que la liste déroulante ne change pas de journée).

3) Désormais, je souhaite qu'à l'instant où des scores ont été inscrit automatiquement dans "bdd", déclenchés par une saisie en "L1 06-07", une macro evenementielle se déclenche et copie les cellules non-vides des colonnes G et H de "bdd", dans les meme cellules sur "Scorebackup".
Comme ça, les scores saisies sont directement copiés définitivement dans scorebackup et ne restent pas temporaires comme sur "bdd".
Pour cela, j'ai tenté une macro evenementielle worksheet_change sur la feuille "bdd". En fait, ça marche bien, mais le probleme, c'est que les calculs automatiques via des formules ne sont pas considérés comme du worksheet_change. Donc en gros, la macro ne se déclenche pas automatiquement.

4) Logiquement, à ce stade, la base de donnée de "scorebackup" se remplit au fur et à mesure. Tout est prêt pour le TCD en feuille 4. Ce dernier me sert d'arriere chambre pour établir mes 10 matchs sur la plage A28:F47. Sur cette plage, je fait appel à la fonction BDLIRE pour retrouver léquipe adverse et les scores dans "scorebackup". Ainsi tout est prêt pour se copié sur le petit encadré des scores sur la feuille principale "L1 06-07", l'ordre est respecté.

Pour en revenir au tcd, j'ai fait une petite macro evenement dans "thisworkbook", avec un worksheet_change sur la cellule B5 (donc la liste déroulante en page principale). Et ceci, provoque une mise à jour du TCD en choisissant de sélectionner en page , la journée en cours.(grâce à la cellule adjacente)

Une derniere petite fantaisie que j'ai essayé de faire, est de mettre en gras constamment l'équipe vainqueur ainsi que son score dans le petit tableau de la page principale "L1 06-07". Au début , ça marchait, puis maintenant ça merde.




Voilà, une fois que j'aurais terminé ce petit encadré des scores. Je n'aurais plus qu'a établir le classement, mais ça je men chargerai tout seul, j'y arrive bien.




Je suis sur que j'ai été long et vraiment pas clair dans mes explications, mais pour ceux qui auront le courage de me lire et de me d'aider, je les remercie grandement par avance.

MERCI





PS: dans les bases de données, il y a 2 fois les meme matchs. Mais c'est normal. Il ne faut tenir compte que de la premiere partie jusqu'à la ligne 381.
 
Dernière édition:
M

Mytå

Guest
Re : Voici mon classeur Excel, j'en peux plus, j'en appelle à vos lumières !!

Salut Tonio et le Forum

Modifie ta macro

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("b5")) Is Nothing Then

Sheets("tcd").PivotTables("Tableau croisé dynamique1").PivotFields("journée"). _
CurrentPage = Range("B5").Value

Range("B45:E45").Value = Sheets("tcd").Range("b29:e29").Value
Range("B46:E46").Value = Sheets("tcd").Range("b31:e31").Value
Range("B47:E47").Value = Sheets("tcd").Range("b33:e33").Value
Range("B48:E48").Value = Sheets("tcd").Range("b35:e35").Value
Range("B49:E49").Value = Sheets("tcd").Range("b37:e37").Value
Range("B50:E50").Value = Sheets("tcd").Range("b39:e39").Value
Range("B51:E51").Value = Sheets("tcd").Range("B41:e41").Value
Range("B52:E52").Value = Sheets("tcd").Range("b43:e43").Value
Range("B53:E53").Value = Sheets("tcd").Range("b45:e45").Value
Range("B54:E54").Value = Sheets("tcd").Range("b47:e47").Value
End If
End Sub

Et supprime dans ThisWorkbook le code associé à

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Mytå
 

Tonino7

XLDnaute Occasionnel
Re : Voici mon classeur Excel, j'en peux plus, j'en appelle à vos lumières !!

Je te remercie grandement. Là tout de suite, ça va mieux pour cette partie. Mais le chemin est loin d'etre terminé lol

l'étape suivante est que si la plage C45: D54 de la premiere feuille change, alors les cellules non-vides des colonnes G et H de la feuille "BDD" doivent etre copiés exactement à la meme adresse mais sur la feuille "scorebackup".

Pour cela, j'ai rajouté un ElseIf à la macro worksheet_change de la premiere feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range
Dim cel As Range
If Not Intersect(Target, Range("b5")) Is Nothing Then
With Sheets("tcd")
.PivotTables("Tableau croisé dynamique1").PivotFields("journée"). _
CurrentPage = Range("B5").Value
.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End With
Range("B45:E45").Value = Sheets("tcd").Range("b29:e29").Value
Range("B46:E46").Value = Sheets("tcd").Range("b31:e31").Value
Range("B47:E47").Value = Sheets("tcd").Range("b33:e33").Value
Range("B48:E48").Value = Sheets("tcd").Range("b35:e35").Value
Range("B49:E49").Value = Sheets("tcd").Range("b37:e37").Value
Range("B50:E50").Value = Sheets("tcd").Range("b39:e39").Value
Range("B51:E51").Value = Sheets("tcd").Range("B41:e41").Value
Range("B52:E52").Value = Sheets("tcd").Range("b43:e43").Value
Range("B53:E53").Value = Sheets("tcd").Range("b45:e45").Value
Range("B54:E54").Value = Sheets("tcd").Range("b47:e47").Value
ElseIf Not Intersect(Target, Range("c45:d54")) Is Nothing Then
Set plage = Sheets("bdd").Range("G1:G" & Range("G65536").End(xlUp).Row)
For Each cel In plage
If cel.Value <> "" Then
ActiveWorkbook.Sheets("scorebackup").Range(cel.Address) = cel.Value
End If
Next cel
Set plage = Sheets("bdd").Range("H1:H" & Range("H65536").End(xlUp).Row)
For Each cel In plage
If cel.Value <> "" Then
ActiveWorkbook.Sheets("scorebackup").Range(cel.Address) = cel.Value
End If
Next cel
End If
End Sub




Le problème , c'est que ça marche une fois sur 2. Et surtout, il doit y 'avoir un probleme de timing ou d'interference avec une autre macro. Car lorsque je change la journée dans la liste déroulante, et bien les scores inscris précedemment restent affichés, mais avec les nouveaux matchs. Enfin bref, c'est un petit merdier.

Voilà le nouveau fichier : Ce lien n'existe plus
 

abc

XLDnaute Impliqué
Re : Voici mon classeur Excel, j'en peux plus, j'en appelle à vos lumières !!

Bonjour,
j'ai acheté un bouquin sur EXCEL 2003.
Je pense que tu pourras y trouver ton bonheur sur le fichier Championnat 2.
J'ai rencontré le problème que le score ne changeait pas.
Pourquoi ,il était sélectionné deux fois, donc j'ai rajouté en vba sur whorsheet ceci et qui m'evite la saisie de deux foix la même équipe.

Private Sub Worksheet_Change(ByVal Cellule As Excel.Range)
If Cellule.Column = 1 Or 2 Then
If Application.WorksheetFunction. _
CountIf(Range("A1:B12"), Cellule.Value) > 1 Then
MsgBox "Déja inscrit -- retour"
Cellule.Value = ""
Cellule.Select
End If
End If
End Sub

Formule à adapter à ton tableau.
Donc tu tapes www.microatt.com ensuite recherche par mots clés et la tu tapes 7445 puis télecharge .Tu seras surpris
A +
 
M

Mytå

Guest
Re : Voici mon classeur Excel, j'en peux plus, j'en appelle à vos lumières !!

Re le Forum

Tonio7 garde juste cette macro sur ta feuille L1 06-07 et enlèvent toutes les autres.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Plage As Range
Dim Cel As Range

If Not Intersect(Target, Range("b5")) Is Nothing Then

Range("B45:E54").ClearContents

With Sheets("tcd")
.PivotTables("Tableau croisé dynamique1").PivotFields("journée"). _
CurrentPage = Range("B5").Value
.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End With

Range("B45:E45").Value = Sheets("tcd").Range("B29:E29").Value
Range("B46:E46").Value = Sheets("tcd").Range("B31:E31").Value
Range("B47:E47").Value = Sheets("tcd").Range("B33:E33").Value
Range("B48:E48").Value = Sheets("tcd").Range("B35:E35").Value
Range("B49:E49").Value = Sheets("tcd").Range("B37:E37").Value
Range("B50:E50").Value = Sheets("tcd").Range("B39:E39").Value
Range("B51:E51").Value = Sheets("tcd").Range("B41:E41").Value
Range("B52:E52").Value = Sheets("tcd").Range("B43:E43").Value
Range("B53:E53").Value = Sheets("tcd").Range("B45:E45").Value
Range("B54:E54").Value = Sheets("tcd").Range("B47:E47").Value

ElseIf Not Intersect(Target, Range("c45:d54")) Is Nothing Then

Set Plage = Sheets("bdd").Range("G1:G" & Range("G65536").End(xlUp).Row)
For Each Cel In Plage
If Cel.Value <> "" Then
ActiveWorkbook.Sheets("scorebackup").Range(Cel.Address) = Cel.Value
End If
Next Cel

Set Plage = Sheets("bdd").Range("H1:H" & Range("H65536").End(xlUp).Row)
For Each Cel In Plage
If Cel.Value <> "" Then
ActiveWorkbook.Sheets("scorebackup").Range(Cel.Address) = Cel.Value
End If
Next Cel

End If

End Sub

Mytå
 

Tonino7

XLDnaute Occasionnel
Re : Voici mon classeur Excel, j'en peux plus, j'en appelle à vos lumières !!

Alors en fait, j'ai une erreur sur ces lignes de codes :

ActiveWorkbook.Sheets("scorebackup").Range(Cel.Add ress) = Cel.Value
et
ActiveWorkbook.Sheets("scorebackup").Range(Cel.Add ress) = Cel.Value


Mais, hier, grâce à l'autre topic sur les jours de la semaine, et grâce à ta réponse, j'ai trouvé une autre méthode. Donc là c'est bon. Le fichier est quasiment terminé. Je vais le proposer au site une fois fini.
 

Dan

XLDnaute Barbatruc
Re : Voici mon classeur Excel, j'en peux plus, j'en appelle à vos lumières !!

Bonsoir,

Je viens de regarder ton fichier pour la partie TCD et la macro qui te permet de prendre les données dans le TCD.
J'y vois un petit problème dans le cas où ton TCD se déplacerait dans ta feuille. Exemple : imagine que le champ journée doit être placé en A2 plutôt qu'en A1. Cela déplacera tout le TCD vers le bas et ta macro devra être adaptée pour reprendre les valeurs au bon endroit.

Dans la feuille TCD tu te sers des valeurs reprises en ligne 29 et plus bas pour alimenter la feuille L1.

Saches qu'il existe la fonction LIREDONNEESTABCROISDYNAMIQUE qui permet de récupérer les infos du TCD et qui à mon avis pourrait te servir.
Elle te servirait notamment à remplacer la formume que tu as en C29 et D29.

Vois à ce sujet l'appli Fonction LIREDONNEES TABCROISDYNAMIQUE GETPIVOTDATA V1.02 qui est placée sur ce forum : https://www.excel-downloads.com/ind...id=49&func=selectfolder&filecatid=1&orderby=2
 

Tonino7

XLDnaute Occasionnel
Re : Voici mon classeur Excel, j'en peux plus, j'en appelle à vos lumières !!

pour quelle raison voudrais-tu que le champs journée soit placé en A2?

Sinon, peut-etre qu'effectivement les formules sont un peu artisanales, mais je connaissais également la formule LIREDONNESTABL Machin... d'ailleurs je l'ai utilisé sur une nouvelle feuille.
Enfin bref, j'ai modifié pas mal de chose sur le fichier, et là, je viens de le terminer. Y'a tout qui marche nickel meme apres avoir passer tous les tests avec des éventuelles erreurs.
 

Tonino7

XLDnaute Occasionnel
Re : Voici mon classeur Excel, j'en peux plus, j'en appelle à vos lumières !!

Bon voilà, pour ceux qui ont contribué à l'avancement de mon classeur et ceux que ça interesse. Je joins ici la version finale.

Si vous avez des suggestions ou des commentaires, hésitez pas.

Ce lien n'existe plus

Ce lien n'existe plus
 

Statistiques des forums

Discussions
300 795
Messages
1 987 250
Membres
209 755
dernier inscrit
bla89