Reporting Synthese 2017-2019

Bonjour à tous,

J’espère que vous allez bien.

Je viens à vous, car j’aimerais réaliser une macro pour extraire des données d’un fichier Excel vers un autre fichier Excel : «Synthese Reporting 2017-2019 »

Dans chaque fichier, nous allons avoir des feuilles « Signal » allant de signal +8 à Signal -2, en allant de gauche à droite :

feuille 1

L’idée serait, sur les feuilles « Signal +8 » à « Signal 0 »,d’extraire chaque ligne dans laquelle dans la colonne C à partir de la ligne 3 où le nombre y figurant est supérieur à 380, et de l’écrire sous cette forme dans le classeur Excel « Synthèse Reporting 2017-2019 »

  • Colonne DATE FICHIER : J’aimerais reprendre le nom du fichier traité et sélectionner seulement les caractères dans lequel la date y figure. Par exemple pour le fichier joint intitulé : «107-VF Excel backtesting 08-06-2018» seulement y extraire le « 08-06-2018 » et l’écrire en format français et non américain. Par exemple « 08-06-2018 » correspond au 8 juin 2018 et non au 6 août 2018.
  • Colonne CHAMPIONNAT : Y figurer le nom du championnat dans la ligne traitée
  • Colonne NB APP : Y inscrire le nombre extrait dans la même colonne du fichier extrait
  • Colonne TEAM : Y inscrire le nom de l’équipe du fichier extrait
  • STATISTIQUES : Y figurer le nom de la statistique dans laquelle le nombre apparait entre la colonne E et S
  • Colonne UNDER 3,5 : Ici le but serait d’inscrire le numéro présent dans le fichier extrait s’il est présent dans les colonnes « Over 1,5 » en E, « Over 2,5 » en F, « Over 3,5 » en G et « Over 4,5 » en H.
  • Colonne OVER 1,5 : Y inscrire ici le chiffre s’il est présent dans les colonnes « Under 1,5 » en I, « Under 2,5 » en J, « Under 3,5 » en K & « Under 4,5 » en L.
  • Colonne UNDER 1,5 HT : Y inscrire ici le chiffre si il est présent dans les colonnes « Over 0,5» en M, « Over 1,5 » en N
  • Colonne OVER 0,5 HT : Y inscrire ici le chiffre si il est présent dans les colonnes « Under 0,5 HT» en O, « Under 1,5 HT » en P
  • Colonne NUL : Y inscrire ici le chiffre s’il est présent dans la colonne « Max Nul » en R

Nous aurions par exemple ce résultat pour la feuille dont j’ai mis l’image plus haut :

image 23

Attention, le format de date est ici en américain et ne correspond pas à la bonne date…

J’imagine que j’ai peut-être oublié des informations ou manqué de clarté, car c’est difficile de tout expliquer synthétiquement, dans ce cas je me montre à votre entière disposition pour vous répondre dans les plus brefs délais.

Je vous joins les deux fichiers a utilisé :

Je vous remercie par avance pour votre aide et pour votre temps et je vous prie de passer à tous une bonne journée.

Bien cordialement.

Laplacea

Hello,

Tu veux absolument 2 fichiers ?

Salut Rag02700,

Je te remercie pour ton retour.

C'est vrai que je ne l'ai pas précisé, mais j'aimerais que la macro soit dans le fichier : synthese-reporting-2017-2019.xlsm

À partir de ce fichier j'aimerai pouvoir extraire dans d'autres feuilles commençant : "XX-vf-excel-backtesting-JJ-MM-AAAA"

XX serait le nombre qui peut être à 1, 2 ou 3 chiffres et J pour "Jour", M pour "Mois" & A pour "Année"

Je te remercie par avance pour ton aide et ton temps et je te souhaite un bon après-midi.

Laplacea

Bonjour à tous,

Je me permets d'écrire ce message de relance.

Je vous souhaite une bonne journée à tous et je reste à votre disposition.

Bien cordialement.

Laplacea

Bonjour laplacea, Rag02700, le forum,

sur les feuilles « Signal +8 » à « Signal 0

  • Faut-il inclure la feuille Signal 0 ?

Colonne UNDER 3,5 : Ici le but serait d’inscrire le numéro présent dans le fichier extrait s’il est présent dans les colonnes « Over 1,5 » en E, « Over 2,5 » en F, « Over 3,5 » en G et « Over 4,5 » en H.

Colonne OVER 1,5 : Y inscrire ici le chiffre s’il est présent dans les colonnes « Under 1,5 » en I, « Under 2,5 » en J, « Under 3,5 » en K & « Under 4,5 » en L.

Colonne UNDER 1,5 HT : Y inscrire ici le chiffre si il est présent dans les colonnes « Over 0,5» en M, « Over 1,5 » en N

Colonne OVER 0,5 HT : Y inscrire ici le chiffre si il est présent dans les colonnes « Under 0,5 HT» en O, « Under 1,5 HT » en P

Si je prends le cas de la colonne UNDER 3,5 :

  • tu dis qu'il faut regarder dans les colonnes E,F,G,H ?
  • Donc une seule de ces 4 colonnes sera remplie ?

STATISTIQUES : Y figurer le nom de la statistique dans laquelle le nombre apparait entre la colonne E et S

  • Idem pour STATISTIQUES, une seule colonne de E à S devrait être remplie ?

Cordialement,

Re,

Un essai.....sous réserve.....

Sub Bouton1_Cliquer()
 Dim dl As Long, i As Long, x As Integer
 Dim wk As Workbook, sh As Worksheet
 Dim tablo, tabloR(), madate As Date

  Application.ScreenUpdating = False

 If FichOuvert("107-vf-excel-backtesting-08-06-2018.xlsm") Then '............teste si le classeur source est ouvert
 '...........................................................................fonction FichOuvert
 With Sheets("Exemple reporting")
   .Range("B2").CurrentRegion.Offset(1, 0).ClearContents '...................efface les données existantes
  End With

  Set wk = Workbooks("107-vf-excel-backtesting-08-06-2018.xlsm")
   madate = Left(Right(wk.Name, 15), 10) '...................................récupère la date du classeur
      For Each sh In wk.Worksheets '.........................................boucle sur les feuilles du classeur
       If Right(sh.Name, 2) > 0 Then
        tablo = sh.Range("B2:S" & sh.Range("B" & Rows.Count).End(xlUp).Row)
             k = 0
         For i = 2 To UBound(tablo, 1)
          If tablo(i, 2) > 380 Then
           ReDim Preserve tabloR(1 To 10, 1 To k + 1)
            tabloR(1, k + 1) = Format(madate, "mm/dd/yyyy") '................date
            tabloR(2, k + 1) = tablo(i, 1) '.................................championnat
            tabloR(3, k + 1) = tablo(i, 2) '.................................nb app
            tabloR(4, k + 1) = tablo(i, 3) '.................................team
             For x = 4 To 18
              If tablo(i, x) <> "" Then tabloR(5, k + 1) = tablo(1, x) '.....statistique
             Next x
             For x = 4 To 7
              If tablo(i, x) <> "" Then tabloR(6, k + 1) = tablo(i, x) '.....under 3,5
             Next x
             For x = 8 To 11
              If tablo(i, x) <> "" Then tabloR(7, k + 1) = tablo(i, x) '.....over 1,5
             Next x
             For x = 12 To 13
              If tablo(i, x) <> "" Then tabloR(8, k + 1) = tablo(i, x) '.....under 1,5 HT
             Next x
             For x = 14 To 15
              If tablo(i, x) <> "" Then tabloR(9, k + 1) = tablo(i, x) '.....over 0,5 HT
             Next x
            tabloR(10, k + 1) = tablo(i, 17) '...............................nul
             k = k + 1
          End If
        Next i
         On Error Resume Next
         Sheets("Exemple reporting").Range("B" & Sheets("Exemple reporting").Range("B" & Rows.Count).End(xlUp).Row + 1).Resize(UBound(tabloR, 2), 10) = Application.Transpose(tabloR)
         'Erase tabloR
       End If
      Next sh
    Else
      MsgBox "Le classeur" & Chr(10) & "107-vf-excel-backtesting-08-06-2018.xlsm" & Chr(10) & "n'est pas ouvert", 32, "Transfert des données impossible": Exit Sub
    End If
End Sub

Function FichOuvert(F As String) As Boolean '.....fonction pour tester si fichier ouvert
'myDearFriend!  -  www.mdf-xlpages.com
    On Error Resume Next
    FichOuvert = Not Workbooks(F) Is Nothing
End Function

Cordialement,

Hello Xorsankukai, Rag02700, le forum,

Je te remercie xorsankukai pour ton retour et pour ton temps.

J'espère que tu vas bien.

Faut-il inclure la feuille Signal 0 ?

Alors oui il faut inclure la feuille "Signal 0"

D'ailleurs j'aimerais revenir sur ce que j'avais dit dans mon tout premier message ci-dessous :

L’idée serait, sur les feuilles « Signal +8 » à « Signal 0 »,d’extraire chaque ligne dans laquelle dans la colonne C à partir de la ligne 3 où le nombre y figurant est supérieur à 380, et de l’écrire sous cette forme dans le classeur Excel « Synthèse Reporting 2017-2019 »

J'aimerais inclure une condition en plus qui est d'aller dans la feuille : "Signal -1", et d'uniquement regarder les éléments qui sont supérieurs à 380 dans la colonne C à partir de la ligne 3 et qui ont des "-1" de la colonne I à L comme tu peux le voir dans l'image ci-dessous.

IMAGE

Si je prends le cas de la colonne UNDER 3,5 :

1-Tu dis qu'il faut regarder dans les colonnes E,F,G,H ?

2-Donc une seule de ces 4 colonnes sera remplie ?

1- C'est ça,

- Le Under 3,5 concerne les colonnes E, F, G & H.

- Le Over 1,5 concerne les colonnes I, J, K & L.

- Le Under 1,5 HT concerne les colonnes M & N

- Le Over 0,5 HT concerne les colonnes O & P

- Le Nul concerne la colonne R

2- Il se peut que pour une même ligne on ait 2 colonnes remplis. Par exemple dans le fichier 107-vf-excel-backtesting-08-06-2018.xlsm, si tu vas dans la feuille "Signal 0", tu verras à la ligne 36 "Guingamp" qui à deux colonnes remplis entre la colonne E & H. Dans ce cas, on écrira simplement "Guinguamp" "Under 3,5" une seule fois seulement.

Par contre, il se peut que pour une même ligne, on ait deux statistiques différentes. Par exemple sur le même fichier et la même feuille "Signal 0" tu as en ligne 73 "Crawley" qui est la fois présent sur le "Under 3,5" en raison de son 0 en colonne E, et le "Under 1,5HT" en raison de son 0 en colonne M. Dans ce cas, la macro devra réaliser 2 lignes. Une pour le "Under 3,5" et une autre pour le "Under 1,5HT"

Idem pour STATISTIQUES, une seule colonne de E à S devrait être remplie ?

Avec ce que j'ai raconté avant, comme dans le cas de "Crawley" nous aurions deux lignes. Nous aurons 2 colonnes remplis. L'idéal serait de réussir à les différencier.

Je reste à ta disposition xorsankukai et je te prie de passer une bonne journée !

Prends soin de toi.

Laplacea

Je viens de voir ton deuxième message, je le regarderais de manière poser un petit plus tard. Je te fais vite un retour !

Je te remercie encore.

Cordialement.

Laplacea

J'aimerais inclure une condition en plus qui est d'aller dans la feuille : "Signal -1", et d'uniquement regarder les éléments qui sont supérieurs à 380 dans la colonne C à partir de la ligne 3 et qui ont des "-1" de la colonne I à L comme tu peux le voir dans l'image ci-dessous.

Voici l'image que j'ai oublié d'introduire !

signal 0

Bien cordialement.

Re,

Merci pour ton retour et tes explications,

Mais ça me complique la tâche,


Nous avons donc pour chaque ligne, 5 "blocs":

- Le Under 3,5 concerne les colonnes E, F, G & H.

- Le Over 1,5 concerne les colonnes I, J, K & L.

- Le Under 1,5 HT concerne les colonnes M & N

- Le Over 0,5 HT concerne les colonnes O & P

- Le Nul concerne la colonne R


2 points me chiffonnent:

2- Il se peut que pour une même ligne on ait 2 colonnes remplis. Par exemple dans le fichier 107-vf-excel-backtesting-08-06-2018.xlsm, si tu vas dans la feuille "Signal 0", tu verras à la ligne 36 "Guingamp" qui à deux colonnes remplis entre la colonne E & H. Dans ce cas, on écrira simplement "Guinguamp" "Under 3,5" une seule fois seulement.

  • Est-il possible que E et H aient des valeurs différentes ? Donc 2 valeurs différentes pour un même bloc ?(de même pour I:L et M:N et OP)

Dans la colonne STATISTIQUES:

  • Tu souhaites récupérer l'intitulé de la colonne de la feuille Exemple reporting où il y a une donnée ? (et non celui de la feuille du classeur 107-vf-excel.... comme je l'ai fait sur ma macro)
1

Est-ce le résultat souhaité ?

2

Cordialement,

Hello xorsankukai,

J'espère que tu es en forme !

Merci pour ton retour ! J'imagine que ce que je demande est assez complexe ... Je te remercie vraiment pour ta patience et de toute l'énergie que tu y mets !

Est-il possible que E et H aient des valeurs différentes ? Donc 2 valeurs différentes pour un même bloc ?(de même pour I:L et M:N et OP)

Alors non ce n'est pas possible qu'il y ait 2 valeurs différentes au sein d'un même bloc, car chaque feuille de calcul "signal" à son propre numéro. Par exemple dans la feuille "Signal 0" tu auras que des "0". Dans la feuille "Signal +2", tu auras que des "2".

Tu souhaites récupérer l'intitulé de la colonne de la feuille Exemple reporting où il y a une donnée ? (et non celui de la feuille du classeur 107-vf-excel.... comme je l'ai fait sur ma macro)

Je souhaiterais récupérer l'intitulé justement de la feuille de calcul traitée. Je te montre un exemple ci-dessous en regardant les 5 premières lignes de la feuille "Signal 0".

exemple1 exemple 2

Ici, dans la colonne "STATISTIQUES", nous avons repris la valeur de la colonne où le "0" apparaissait dans la feuille de calcul traitée.

Je reste à ta disposition si besoin et je te souhaite une bonne journée.

Bien cordialement.

Laplacea

Bonjour laplacea, le forum,

Merci pour le retour,

Il reste une question :

Si tu as plusieurs valeurs dans un bloc (par exemple 0 en E, et 0 en F), que retient-on pour la statistique ?

over 1,5over 2,5 ? Ou faut-il séparer en 2 lignes également ?

Pas simple ton affaire....

Cordialement,

Hello xorsankukai,

Je te remercie pour ton retour et j'espère que tu passes une bonne journée !

Il reste une question :

Si tu as plusieurs valeurs dans un bloc (par exemple 0 en E, et 0 en F), que retient-on pour la statistique ?

over 1,5 où over 2,5 ? Ou faut-il séparer en 2 lignes également ?

Alors dans ce cas-là il faudrait créer 1 ligne seulement

Je vais prendre un exemple du fichier " 107-vf-excel-backtesting-08-06-2018.xlsm" sur la feuille "Signal 0" avec l'équipe de Charlton en ligne 9. Cette équipe présente 2 signal via le "Under 1,5" en colonne I, et le "Under 2,5" en colonne J. L'idée serait de créer deux lignes comme dans l'image ci-dessous à la ligne 8 en Orange:

excel pratique 2 cas dans 1 bloc

Tu vas certainement me demander quelle statistique mettre dans ce cas où l'on a deux statistiques différentes dans un même bloc ... Je t'avoue que je ne sais pas. Autant mettre celle qui est la plus à gauche où celle qui t'arrange.

Si tu as d'autres questions je reste à ta disposition xorsankukai ! Et je te remercie encore de ton temps et pour ton énergie !

Prends soin de toi.

Laplacea

Re,

En fait, je pense que le plus simple est de distinguer toutes les lignes qui comportent plusieurs valeurs....

Pour l'instant, je suis à la peine sur la séparation des lignes.......mais je ne t'oublie pas....

Voilà où j'en suis:

4test.xlsm (30.88 Ko)

Bon week-end,

Hello xorsankukai,

Excuse-moi de mon retour tardif.

J'espère que tu vas bien et que tu as passé un bon samedi.

Je te remercie pour ton update ! Je reste à ta disposition si tu as des questions.

Prends soin de toi xorsankukai et je te remercie encore pour ton temps et ta patience.

Bien cordialement.

Laplacea

Salut laplacea, le forum,

Comme je ne parvenais pas à faire fonctionner ma macro depuis un autre classeur, j'ai donc fait "appel à un ami" , , ici.

Je pense être parvenu au bon résultat, à toi de confirmer.

(Je ne me suis pas encore occupé de la feuille "Signal -1").

Sub Reporting()
 Dim iR As Long, i As Long, j As Long
 Dim wk As Workbook, wkdest As Workbook, sh As Worksheet
 Dim tablo, tabloR(), tabfeuil, madate As Date

  Application.ScreenUpdating = False

 Set wkdest = ThisWorkbook '......................................................................définit le classeur de destination
  On Error Resume Next '..........................................................................gestion des erreurs
 Set wk = Workbooks("107-vf-excel-backtesting-08-06-2018.xlsm") '.................................définit le classeur source
   If Err <> 0 Then '.............................................................................condition si erreur
    Err.Clear '...................................................................................supprime l erreur
    MsgBox "Le classeur" & Chr(10) & "107-vf-excel-backtesting-08-06-2018.xlsm" & Chr(10) & "n'est pas ouvert", 32, "Transfert des données impossible": Exit Sub
   Else
    On Error GoTo 0 '.............................................................................annule al gestion des erreurs
    wkdest.Sheets("Exemple reporting").Range("B2").CurrentRegion.Offset(1, 0).ClearContents '.....efface les données existantes

    madate = Left(Right(wk.Name, 15), 10) '.......................................................récupère la date du classeur
     Set tabfeuil = wk.Sheets(Array("Signal +8", "Signal +7", "Signal +6", "Signal +5", _
      "Signal +4", "Signal +3", "Signal +2", "Signal +1", "Signal 0")) '..........................feuilles à traiter

      For Each sh In tabfeuil '...................................................................boucle sur les feuilles du classeur
            tablo = sh.Range("B2:S" & sh.Range("B" & Rows.Count).End(xlUp).Row) '.................définit le tablo
            ReDim tabloR(1 To (UBound(tablo, 1) - 1) * (UBound(tablo, 2) - 1), 1 To 12) '.........dimensionne tabloR

                iR = 1
          For i = 2 To UBound(tablo, 1)
           For j = 4 To UBound(tablo, 2)
            If tablo(i, j) <> "" And tablo(i, 2) > 380 Then '.....................................si NB APP>380 et si valeur présente
                tabloR(iR, 1) = Format(madate, "mm/dd/yyyy") '....................................date comprise dans nom classeur source
                tabloR(iR, 2) = tablo(i, 1) '.....................................................championnat
                tabloR(iR, 3) = tablo(i, 2) '.....................................................NB APP
                tabloR(iR, 4) = tablo(i, 3) '.....................................................Villes
                tabloR(iR, 5) = tablo(1, j) '.....................................................STAT (intitulé colonne feuille source)
               Select Case tablo(1, j) '..........................................................en fonction de STAT
                Case "OVER 1,5", "OVER 2,5", "OVER 3,5", "OVER 4,5" '.............................on écrit la valeur dans colonne correspondante
                 tabloR(iR, 6) = tablo(i, j) '....................................................UNDER 3,5
                Case "UNDER 1,5", "UNDER 2,5", "UNDER 3,5", "UNDER 4,5"
                 tabloR(iR, 7) = tablo(i, j) '....................................................OVER 1,5
                Case "OVER 0,5 HT", "OVER 1,5 HT"
                  tabloR(iR, 8) = tablo(i, j) '...................................................UNDER 1,5 HT
                Case "UNDER 0,5 HT", "UNDER 1,5 HT"
                  tabloR(iR, 9) = tablo(i, j) '...................................................OVER 0,5 HT
                Case "MAX VICT"
                  tabloR(iR, 10) = tablo(i, j) '..................................................VIC
                Case "MAX NUL"
                  tabloR(iR, 11) = tablo(i, j) '..................................................NUL
                Case "MAX DEF"
                  tabloR(iR, 12) = tablo(i, j) '..................................................DEF
               End Select
                  iR = iR + 1
            End If
           Next j
          Next i
           On Error Resume Next
          'on écrit les données sur la feuille Exemple reporting du classeur synthese-reporting-2017-2019.xlsm
           Set dest = wkdest.Worksheets("Exemple reporting").Cells(Application.Rows.Count, "B").End(xlUp).Offset(1, 0)
               dest.Resize(UBound(tabloR, 1), 12).Value = tabloR
           Erase tablo: Erase tabloR '...........................................................libère la mémoire
      Next sh '..................................................................................prochaine feuille,on recommence
    End If
End Sub

Cordialement,

Hello xorsankukai, le forum,

J'espère que tu vas bien et que tu passes une bonne journée !

Excuses de te répondre assez tardivement...

Je te remercie pour ton temps et pour ta disponibilité. J'en profite pour remercier ceux qui t'ont aidé C'est vraiment incroyable.

Alors je viens de tester et tout est bon pour les feuilles signals, sans la -1 comme tu l'as indiqué. Vraiment le résultat est très bon.

Je pense que peut le plus simple pour traiter les données d'une autre feuille serait de que la macro, avant de démarrer, demande qu'elle serait le nom du fichier à traiter ? Parce que j'en ai 208 à traiter.

Ça sera plus simple que de devoir rentrer dans le code à chaque fois. Qu'est-ce que tu en penses ?

Excellente journée à toi xorsankukai, et prends soin de toi.

Salut laplacea, le forum,

Excuses de te répondre assez tardivement...

Pas de souci, je n'ai pas beaucoup de disponibilités non plus,


Alors je viens de tester et tout est bon pour les feuilles signals, sans la -1 comme tu l'as indiqué. Vraiment le résultat est très bon.

Ouf !!!! , car ça m'a bien pris la tête , , je ne parvenais pas à exécuter la macro depuis le classeur Synthèse-reporting.


Pour la feuille "Signal -1" :

Elle seule t’intéresse où y en aura-t-il d'autres ? ("Signal -2", "Signal -3", etc...?.)


Je pense que peut le plus simple pour traiter les données d'une autre feuille serait de que la macro, avant de démarrer, demande qu'elle serait le nom du fichier à traiter ? Parce que j'en ai 208 à traiter.

Tout dépend de comment tu traites ces fichiers.

Tu ne veux en traiter qu'un seul à la fois ? Ça peut effectivement être une solution.

Certains seulement ? Tous à la fois ? Il va falloir boucler sur les fichiers.


Cordialement,

Ouf !!!! , car ça m'a bien pris la tête , , je ne parvenais pas à exécuter la macro depuis le classeur Synthèse-reporting.

Ah tu as été génial Tu es véritablement un magicien pour moi ahha

Je te remercie encore pour ton temps, ta patience et ta persévérance.

Pour la feuille "Signal -1" :

Elle seule t’intéresse où y en aura-t-il d'autres ? ("Signal -2", "Signal -3", etc...?.)

Pour l'instant seule celle-ci m'intéresse, car j'ai suffisamment à faire avec toutes ces données

Tout dépend de comment tu traites ces fichiers.

Tu ne veux en traiter qu'un seul à la fois ? Ça peut effectivement être une solution.

Certains seulement ? Tous à la fois ? Il va falloir boucler sur les fichiers.

Je vais les traiter un par un dans le fichier "Synthèse reporting" je vais créer une feuille de calcul par fichier. Si ça dépasse, je le ferai en plusieurs parties.

Je te remercie encore une fois pour ton aide xorsankukai et je te souhaite une bonne soirée !

Bien à toi.

Laplacea

Bonjour laplacea, le forum,

Un essai avec la feuille "Signal -1"......

Dis-moi si le résultat est correct.....si oui, je l'incorporerai dans le code précédent....

Clique sur le bouton "signal -1" (le code ne traite que cette feuille, c'est pour tester).

Cordialement,

Rechercher des sujets similaires à "reporting synthese 2017 2019"