Macro lien Extract-PARAM

Bonjour à tous,

J'espère que vous allez bien !

Je viens à vous car j'aimerai réaliser une macro dont je vous ai indiqué les instructions dans le PDF ci-dessous avec le XLS lié

Je suis à votre disposition si vous avez besoin.

Je vous remercie par avance de votre aide et je vous souhaite un bon week-end.

Prenez soin de vous.

Laplacea

Bonjour à tous,

Je me permets ce petit message de relance.

Je vous souhaite à tous une excellente semaine !

Laplacea

Bonjour,

Voici plus ou moins la marche à suivre, mais à adapter avec vos propres données (vos ranges notamment) et avec les conditions - que je ne suis pas certain d’avoir saisies parfaitement - à parfaire.

Je précise que je suis parti de votre pdf uniquement, pour ne pas être tenté de retravailler la structure de votre fichier.

Il serait judicieux, si ce n’était pas déjà le cas, de définir des tableaux afin de coder plus aisément.

Note préalable :

TeamG est la colonne Team du tableau de gauche

TeamD est la colonne Team du tableau de droite

TabG le tableau de gauche

TabD le tableau de droite

ScoreG la colonne score du tableau de gauche

NomEquipe la colonne avec les noms d’équipes de la feuille SIGNAL

Statistique la colonne avec les statistiques de la feuille SIGNAL

StatD est la colonne Stat du tableau de droite

Code :

Option Base 1 (en début de module)

Sub XXX()

Dim Positions()

Dim NbTeams%, i%, k%
Dim Bool as boolean

NbTeams = TeamD.rows.count

Redim Positions(NbTeams)

For i=1 to NbTeams ‘boucle sur toutes les équipes de TeamD

Positions(i) = Worksheetfunction.Match(TeamD.Cells(i), TeamG, -1) -1 ‘renvoie la dernière ligne de l’équipe dans TabG

Bool = 1

for k = 1 to 17

‘ SI les valeurs des colonnes 22 et suivantes du tableau de gauche sont supérieures à celles des colonnes 3 et suivantes - 4 ALORS

if not TabG.cells(i, k + 21).value >= TabD.cells(i, k+ 2) - 4 Then

    Bool = 0

end if

next k

If scoreG.cells(Positions(i)).value >= 1 and Bool = 1 then 'si le score du tableau de gauche (pour la dernière ligne de l’équipe) est sup. à 1

Sheets(« Signal »).Range(NomEquipe).value = TeamD.cells(i).value

Sheets(« Signal »).Range(Statistique).value = StatD.cells(i).value

‘autre méthode : TeamD.cells(i).offset(0, X) pour chercher la cellule à X colonnes de la colonne TeamD (ici, c’est le nombre de colonnes pour atteindre les stats).

‘PUIS Même procédé pour le record et autres

end if

Next i

end sub

J'espère que ça correspondra un peu à ce que vous cherchez...

Bon courage,

Bonjour 3GB,

J'espère que tu vas bien, et je te remercie pour ton retour.

J'ai un problème pour exécuter le code comme tu peux l'avoir avec l'image suivante :

macro

Je te remercie encore pour ton retour et je te souhaite une bonne soirée.

Bien à toi.

Laplacea

Bonsoir,

Comme je te l'ai expliqué sur mon précédent post, je t'ai donné la marche à suivre, dans la mesure de ma compréhension de ton attente.

Il faut au préalable que tu nommes tes tableaux de valeurs :

- Par exemple ton tableau de gauche, tu pourrais le nommer TabG (ou comme tu veux) et tu devrais alors remplacer tous TabG de mon code par Range("TabG").

Idem pour TabD => Range("TabD").

Idem pour TeamG que tu devrais remplacer par Range("TabG[Team]") si les équipes sont inscrites dans la colonne "Team" du tableau "TabG".

Idem pour TeamD => Range("TabD[Team]").

Idem pour ScoreG => Range("TabG[Score]").

Idem pour StatD => Range("TabD[Stats]").

Toutes ces modifications sont des exemples partant du principe que tu as 2 tableaux nommés (volet Insertion/Tableau/Laisser cocher "mon tableau comporte des en-têtes", que tu auras renommer dans ce même volet) TabG et TabD contenant les colonnes dont les noms seraient ceux figurant ci-dessus. Mais tu pourrais très bien les nommer autrement (blabla et bloblo par ex) et tu devrais alors changer ton code en conséquence (Range("blabla") et range("bloblo")).

Ensuite, il faut bien mettre en début du module "Option Base 1" avant ta première procédure.

Il faut corriger tous les guillemets (car j'ai saisi ce proto-code sur un bloc-note) de manière à ce qu'ils soient en double quotes (" " au lieu de << >>).

Enfin, il faudrait que le tableau de la feuille Signal accueillant les valeurs soit nommé lui aussi (exemple TabS) et contienne les colonnes aux noms Equipe et Statistique.

Alors, les lignes en rouge seraient à remplacer par :

Range("TabS[Equipe]").cells(i).value = Range("TabD[Team]").cells(i).value

Range("TabS[Statistique]").cells(i).value = Range("TabD[Stats]").cells(i).value

Mais, comme je t'ai dit, je n'ai pas vu ton fichier. Donc si le tableau de Signal contient des formules, ces lignes sont peut-être à éviter. Il faudra après ajouter quelques petits trucs.

Mais déjà, si tu peux essayer de faire tout ça, ce serait bien.

Bon courage,

Bonsoir 3GB, le forum,

Je te remercie pour ton retour détaillé.

J'ai un souci qui est que j'ai près de 150 feuilles a traités avec autant de tableaux à renommer...

Est-ce que pourrait regarder sur l'Excel comment réaliser cela car honnêtement je suis assez perdu ^^

Je te remercie par avance de ton retour et je te souhaite une bonne soirée.

Laplacea

Salut à tous,

Je me permets de vous partager une simple vidéo de mon écran pour vous expliquez les différentes actions de la macro en plus du PDF et de l'Excel figurant le premier message de la conversation.

6video.pdf (51.76 Ko)

J'ai conscience que la macro soit difficile à réaliser ,je me montre disponible au besoin.

Je vous remercie par avance de votre aide

Prenez-soin de vous !

Laplacea

Bonjour laplacea, le forum,

Sympa la vidéo, , c'est nettement plus parlant....mais ne simplifie pas la tâche pour autant....

Après avoir pas mal galéré , voici une tentative (qui mériterait certainement d'être optimisée car quand je vois le code de 3GB, je ne suis pas fier du mien)....mais je suis au bout de mes possibilités....

Je te laisse le soin de vérifier....en croisant les doigts pour que le résultat soit celui attendu,

La macro se nomme SIGNAL...

Amicalement,

Hello Xorsankukai, le forum,

Je te remercie pour ton temps et pour ton retour.

J'imagine que c'est assez compliqué ...

Mais tu as parfaitement réussi à atteindre le résultat que je souhaitais.

J'aimerai effectuer quelques modifications en ajoutant des critères supplémentaires pour que les lignes de la feuilles soit plus pertinents par rapport à ce que je t'ai proposé auparavant.

Je reviendrai sur le sujet une fois que j'aurai effectué que j'aurai modifié quelques-unes de mes précédentes macros.

Je te remercie encore une fois Xorsankukai pour ton temps.

Passes un bon week-end ainsi qu'à l'ensemble des membres du forum.

Bien à toi.

Laplacea

Xorsankukai, le forum,

Je reviens à toi suite aux modifications qu'on a effectuées ensemble.

Tu pourras remarquer que j'ai ajouté des données dans la colonne AM de chaque feuille avec un nom de pays.

L'idée est de conserver les mêmes actions que dans la macro précédente en ajoutant davantage de critères de sélection.

1- Sélectionner uniquement dans la feuille signal les équipes qui ont au moins un score d'au moins150 dans la colonne AM de chacune des feuilles traitées.

2- (Peut être un peu plus difficile mais très important ), Pour chaque statistique sélectionnée par équipe. Ne la prendre en compte que si elle est égale à 1 ou plus.

Je vais te montrer un exemple ci-dessous :

tableau

Ici, j'ai pris le dernier match de l'équipe du Bayern et je l'ai confronté avec ses records historiques dans la ligne du dessous. Il y a un bien un écart de 3, mais cela ne m'intéresse pas (je précise que tu ne pouvais pas le savoir) car j'ai besoin que l'événement se produit au moins une fois pour que l'écart est une valeur.

L'idée de la feuille signal via ce deuxième critère est de regarder si les statistiques à la première ligne égale 1 ou plus, de la comparer avec le Tableau MAX. S’il y a un écart de 3, et que l'équipe apparait plus de 150x (colonne AM) alors on effectue la macro comme tu l'as fait.

Je suis disponible à ton besoin si tu as des questions. Je te remercie par avance car j'imagine que ce que je demande doit être complexe.

Mais on s'approche du résultat final que je souhaite.

Passes un bon après-midi !

Amicalement.

Laplacea

Bonjour laplacea, le forum,

Un essai.......

Sub SIGNAL()
 Dim DLig As Long, derlig As Long
 Dim X As Long, num As Long, I As Long, tI As Long, tJ As Long, k As Long, J As Long
 Dim Vr As String   ' ...........................................................................................valeur recherchée
 Dim titrecolonne() '............................................................................................tableau contenant les titres (pour feuille signal)
 Dim plage1 As Range, plage2 As Range
 Dim tablo1(), tablo2(), tabloR(), tabloS()
 Dim tabloF(), tabloG(), plage As Range

Application.ScreenUpdating = False

Sheets("Signal").Cells.Delete '..................................................................................efface les données de la feuille signal

titrecolonne = Array("CHAMPIONNAT", "TEAM", "OVER 1,5", "OVER 2,5", "OVER 3,5", "OVER 4,5", "UNDER 1,5", "UNDER 2,5", "UNDER 3,5", "UNDER 4,5", "OVER 0,5 HT", "OVER 1,5 HT", "UNDER 0,5 HT", "UNDER 1,5 HT", "MAX VICT", "MAX NUL", "MAX DEF")
 For X = 0 To UBound(titrecolonne, 1) '..........................................................................boucle sur chaque titre
   Sheets("Signal").Cells(2, 2 + X) = titrecolonne(X): Sheets("Signal").Cells(2, 2 + X).Font.Bold = True '.......écris titres en gras en ligne 2 de la feuille Signal
 Next X
derlig = Sheets("Signal").Range("B" & Rows.Count).End(xlUp).Row + 1 '............................................première cellule vide en colonne B

For I = 2 To Sheets("Liste des Pays").Range("A" & Rows.Count).End(xlUp).Row '....................................liste des pays
 If WsExist(Sheets("Liste des Pays").Range("A" & I)) Then '......................................................si l'onglet existe
  Sheets(Sheets("Liste des Pays").Range("A" & I).Value).Activate '...............................................on active l'onglet
  Call CreateCustomerList '......................................................................................en colonne A, on crée la liste des villes sans doublons

   Set plage1 = ActiveSheet.Range("B3:AK" & ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row)
    tablo1 = plage1 '............................................................................................premier tableau de valeurs
   Set plage2 = ActiveSheet.Range("AM3:BD" & ActiveSheet.Range("AM" & Rows.Count).End(xlUp).Row)
    tablo2 = plage2 '...........................................................................................second tableau de valeurs

num = 3 '.......................................................................................................départ en ligne 3
  While num <= ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row '...............................................boucle jusqu'à la dernière valeur en colonne A
     Vr = ActiveSheet.Range("A" & num)   ' < à adapter au besoin
   DLig = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row '....................................................dernière ligne en colonne C

       k = 0
      For tI = UBound(tablo1, 1) To 1 Step -1
        If tablo1(tI, 2) = Vr Then  '...........................................................................si ville présente en colonne C (colonne 2 du tablo1)
         ReDim Preserve tabloR(1 To 17, 1 To k + 1) '...........................................................on stocke les données utiles de tablo1 dans tabloR
            tabloR(1, k + 1) = tablo1(tI, 1)
            tabloR(2, k + 1) = tablo1(tI, 2)
            tabloR(3, k + 1) = tablo1(tI, 22)
            tabloR(4, k + 1) = tablo1(tI, 23)
            tabloR(5, k + 1) = tablo1(tI, 24)
            tabloR(6, k + 1) = tablo1(tI, 25)
            tabloR(7, k + 1) = tablo1(tI, 26)
            tabloR(8, k + 1) = tablo1(tI, 27)
            tabloR(9, k + 1) = tablo1(tI, 28)
            tabloR(10, k + 1) = tablo1(tI, 29)
            tabloR(11, k + 1) = tablo1(tI, 30)
            tabloR(12, k + 1) = tablo1(tI, 31)
            tabloR(13, k + 1) = tablo1(tI, 32)
            tabloR(14, k + 1) = tablo1(tI, 33)
            tabloR(15, k + 1) = tablo1(tI, 34)
            tabloR(16, k + 1) = tablo1(tI, 35)
            tabloR(17, k + 1) = tablo1(tI, 36)
            k = k + 1
        End If
      Next tI

       k = 0
      For tJ = 1 To UBound(tablo2, 1)
        If tablo2(tJ, 2) = Vr Then  '.........................................................................si ville présente en colonne AN (colonne 1 du tablo2)
         ReDim Preserve tabloS(1 To 18, 1 To k + 1) '.........................................................on stocke les données utiles de tablo2 dans tabloS
            tabloS(1, k + 1) = tablo2(tJ, 1)
            tabloS(2, k + 1) = tablo2(tJ, 2)
            tabloS(3, k + 1) = tablo2(tJ, 3)
            tabloS(4, k + 1) = tablo2(tJ, 4)
            tabloS(5, k + 1) = tablo2(tJ, 5)
            tabloS(6, k + 1) = tablo2(tJ, 6)
            tabloS(7, k + 1) = tablo2(tJ, 7)
            tabloS(8, k + 1) = tablo2(tJ, 8)
            tabloS(9, k + 1) = tablo2(tJ, 9)
            tabloS(10, k + 1) = tablo2(tJ, 10)
            tabloS(11, k + 1) = tablo2(tJ, 11)
            tabloS(12, k + 1) = tablo2(tJ, 12)
            tabloS(13, k + 1) = tablo2(tJ, 13)
            tabloS(14, k + 1) = tablo2(tJ, 14)
            tabloS(15, k + 1) = tablo2(tJ, 15)
            tabloS(16, k + 1) = tablo2(tJ, 16)
            tabloS(17, k + 1) = tablo2(tJ, 17)
            tabloS(18, k + 1) = tablo2(tJ, 18)
            k = k + 1
        End If
      Next tJ

       On Error Resume Next
        Sheets("Signal").Range("B" & derlig).Resize(UBound(tabloR, 2), 17) = Application.Transpose(tabloR) '...écrit en dur données tabloR sur feuille Signal à partir de la colonne B
        Sheets("Signal").Range("T" & derlig).Resize(UBound(tabloS, 2), 18) = Application.Transpose(tabloS) '...écrit en dur données tabloS sur feuille Signal à partir de la colonne T
       Erase tabloR '..........................................................................................efface tabloR
       Erase tabloS '..........................................................................................efface tabloS

       derlig = derlig + 1 '...................................................................................redéfinit derlig

   num = num + 1 '.............................................................................................ligne suivante colonne A
  Wend
   ActiveSheet.Range("A:A").ClearContents '....................................................................efface colonne A car plus utile
 End If
Next I

 With Sheets("Signal") '.......................................................................................agit sur la feuille Signal uniquement
   .Activate
   Set plage = .Range("B3:AK" & .Range("B" & Rows.Count).End(xlUp).Row) '......................................définit la plage sur laquelle on agit (on retraite les données)
   tabloF = plage  '...........................................................................................premier tableau de valeur
    k = 0
    For I = 1 To UBound(tabloF, 1)
     If tabloF(I, 20) <> "" And tabloF(I, 19) >= 150 Then '....................................................si ville présentes en colonne C et colonne U et si nombre>=150 en colonne T
      ReDim Preserve tabloG(1 To 17, 1 To k + 1) '.............................................................on stocke les valeurs dans la tabloG
        tabloG(1, k + 1) = tabloF(I, 1) '......................................................................nom du Pays
        tabloG(2, k + 1) = tabloF(I, 2) '......................................................................nom de la ville
        tabloG(3, k + 1) = IIf(tabloF(I, 3) = 0, "", IIf(tabloF(I, 3) - tabloF(I, 22) <> -3, "", -3)) '........si valeur=0 et écart<>-3, on laisse vide , sinon on écrit -3
        tabloG(4, k + 1) = IIf(tabloF(I, 4) = 0, "", IIf(tabloF(I, 4) - tabloF(I, 23) <> -3, "", -3))
        tabloG(5, k + 1) = IIf(tabloF(I, 5) = 0, "", IIf(tabloF(I, 5) - tabloF(I, 24) <> -3, "", -3))
        tabloG(6, k + 1) = IIf(tabloF(I, 6) = 0, "", IIf(tabloF(I, 6) - tabloF(I, 25) <> -3, "", -3))
        tabloG(7, k + 1) = IIf(tabloF(I, 7) = 0, "", IIf(tabloF(I, 7) - tabloF(I, 26) <> -3, "", -3))
        tabloG(8, k + 1) = IIf(tabloF(I, 8) = 0, "", IIf(tabloF(I, 8) - tabloF(I, 27) <> -3, "", -3))
        tabloG(9, k + 1) = IIf(tabloF(I, 9) = 0, "", IIf(tabloF(I, 9) - tabloF(I, 28) <> -3, "", -3))
        tabloG(10, k + 1) = IIf(tabloF(I, 10) = 0, "", IIf(tabloF(I, 10) - tabloF(I, 29) <> -3, "", -3))
        tabloG(11, k + 1) = IIf(tabloF(I, 11) = 0, "", IIf(tabloF(I, 11) - tabloF(I, 30) <> -3, "", -3))
        tabloG(12, k + 1) = IIf(tabloF(I, 12) = 0, "", IIf(tabloF(I, 12) - tabloF(I, 31) <> -3, "", -3))
        tabloG(13, k + 1) = IIf(tabloF(I, 13) = 0, "", IIf(tabloF(I, 13) - tabloF(I, 32) <> -3, "", -3))
        tabloG(14, k + 1) = IIf(tabloF(I, 14) = 0, "", IIf(tabloF(I, 14) - tabloF(I, 33) <> -3, "", -3))
        tabloG(15, k + 1) = IIf(tabloF(I, 15) = 0, "", IIf(tabloF(I, 15) - tabloF(I, 34) <> -3, "", -3))
        tabloG(16, k + 1) = IIf(tabloF(I, 16) = 0, "", IIf(tabloF(I, 16) - tabloF(I, 35) <> -3, "", -3))
        tabloG(17, k + 1) = IIf(tabloF(I, 17) = 0, "", IIf(tabloF(I, 17) - tabloF(I, 36) <> -3, "", -3))
    k = k + 1
     End If
    Next I
     On Error Resume Next
        .Cells.Delete '........................................................................................on efface les données éxistantes
       For X = 0 To UBound(titrecolonne, 1) '..................................................................boucle sur chaque titre
        .Cells(2, 2 + X) = titrecolonne(X): Sheets("Signal").Cells(2, 2 + X).Font.Bold = True '............... ré-écrit les titres en gras en ligne 2 de la feuille Signal
       Next X
        .Range("B3").Resize(UBound(tabloG, 2), 17) = Application.Transpose(tabloG) '...........................écrit en dur les données du tabloG
         Erase tabloF: Erase tabloG '..........................................................................efface les 2 tableaux temporaires
        .Columns.AutoFit '.....................................................................................ajuste la largeur des colonnes
        '.Range("B2:R" & .Range("B" & Rows.Count).End(xlUp).Row).Borders.LineStyle = 1 '........................bordures sur les données
        '.Range("B2:R2").BorderAround Weight:=xlThick '.........................................................bordures plus épaisses en ligne 2
        .Columns("D:R").HorizontalAlignment = xlCenter '.......................................................centrage horizontal colonnes D à R
       'For I = .Range("B" & Rows.Count).End(xlUp).Row To 3 Step -1
        'If Application.WorksheetFunction.CountA(Range("D" & I & ":R" & I)) = 0 Then .Rows(I).Delete '..........supprime les lignes où il n'y a aucune valeur de D à R
       'Next I
 End With
End Sub

Bon dimanche,

Amicalement,

Bonjour Xorsankukai, laplacea,

Je me permets d'intervenir pour proposer de simplifier les parties laborieuses du code :

k = 0
      For tI = UBound(tablo1, 1) To 1 Step -1
        If tablo1(tI, 2) = Vr Then  '...........................................................................si ville présente en colonne C (colonne 2 du tablo1)
         ReDim Preserve tabloR(1 To 17, 1 To k + 1) '...........................................................on stocke les données utiles de tablo1 dans tabloR
            tabloR(1, k + 1) = tablo1(tI, 1)
            tabloR(2, k + 1) = tablo1(tI, 2)
            tabloR(3, k + 1) = tablo1(tI, 22)
            tabloR(4, k + 1) = tablo1(tI, 23)
            tabloR(5, k + 1) = tablo1(tI, 24)
            tabloR(6, k + 1) = tablo1(tI, 25)
            tabloR(7, k + 1) = tablo1(tI, 26)
            tabloR(8, k + 1) = tablo1(tI, 27)
            tabloR(9, k + 1) = tablo1(tI, 28)
            tabloR(10, k + 1) = tablo1(tI, 29)
            tabloR(11, k + 1) = tablo1(tI, 30)
            tabloR(12, k + 1) = tablo1(tI, 31)
            tabloR(13, k + 1) = tablo1(tI, 32)
            tabloR(14, k + 1) = tablo1(tI, 33)
            tabloR(15, k + 1) = tablo1(tI, 34)
            tabloR(16, k + 1) = tablo1(tI, 35)
            tabloR(17, k + 1) = tablo1(tI, 36)
            k = k + 1
        End If
      Next tI

       k = 0
      For tJ = 1 To UBound(tablo2, 1)
        If tablo2(tJ, 2) = Vr Then  '.........................................................................si ville présente en colonne AN (colonne 1 du tablo2)
         ReDim Preserve tabloS(1 To 18, 1 To k + 1) '.........................................................on stocke les données utiles de tablo2 dans tabloS
            tabloS(1, k + 1) = tablo2(tJ, 1)
            tabloS(2, k + 1) = tablo2(tJ, 2)
            tabloS(3, k + 1) = tablo2(tJ, 3)
            tabloS(4, k + 1) = tablo2(tJ, 4)
            tabloS(5, k + 1) = tablo2(tJ, 5)
            tabloS(6, k + 1) = tablo2(tJ, 6)
            tabloS(7, k + 1) = tablo2(tJ, 7)
            tabloS(8, k + 1) = tablo2(tJ, 8)
            tabloS(9, k + 1) = tablo2(tJ, 9)
            tabloS(10, k + 1) = tablo2(tJ, 10)
            tabloS(11, k + 1) = tablo2(tJ, 11)
            tabloS(12, k + 1) = tablo2(tJ, 12)
            tabloS(13, k + 1) = tablo2(tJ, 13)
            tabloS(14, k + 1) = tablo2(tJ, 14)
            tabloS(15, k + 1) = tablo2(tJ, 15)
            tabloS(16, k + 1) = tablo2(tJ, 16)
            tabloS(17, k + 1) = tablo2(tJ, 17)
            tabloS(18, k + 1) = tablo2(tJ, 18)
            k = k + 1
        End If
      Next tJ

A REMPLACER PAR :

dim n%

k = 0
      For tI = UBound(tablo1, 1) To 1 Step -1
        If tablo1(tI, 2) = Vr Then  '...........................................................................si ville présente en colonne C (colonne 2 du tablo1)
         ReDim Preserve tabloR(1 To 17, 1 To k + 1) '...........................................................on stocke les données utiles de tablo1 dans tabloR
            for n = 1 to 17
                select case n
                    case < 3
                        tabloR(n, k + 1) = tablo1(tI, n)
                    case else
                        tabloR(n, k + 1) = tablo1(tI, n + 19)
                end select
            next n
            k = k + 1
        End If
      Next tI

       k = 0
      For tJ = 1 To UBound(tablo2, 1)
        If tablo2(tJ, 2) = Vr Then  '.........................................................................si ville présente en colonne AN (colonne 1 du tablo2)
         ReDim Preserve tabloS(1 To 18, 1 To k + 1) '.........................................................on stocke les données utiles de tablo2 dans tabloS
            for n = 1 to 18
                tabloS(n, k + 1) = tablo2(tJ, n)
            next n
            k = k + 1
        End If
      Next tJ

et

k = 0
    For I = 1 To UBound(tabloF, 1)
     If tabloF(I, 20) <> "" And tabloF(I, 19) >= 150 Then '....................................................si ville présentes en colonne C et colonne U et si nombre>=150 en colonne T
      ReDim Preserve tabloG(1 To 17, 1 To k + 1) '.............................................................on stocke les valeurs dans la tabloG
        tabloG(1, k + 1) = tabloF(I, 1) '......................................................................nom du Pays
        tabloG(2, k + 1) = tabloF(I, 2) '......................................................................nom de la ville
        tabloG(3, k + 1) = IIf(tabloF(I, 3) = 0, "", IIf(tabloF(I, 3) - tabloF(I, 22) <> -3, "", -3)) '........si valeur=0 et écart<>-3, on laisse vide , sinon on écrit -3
        tabloG(4, k + 1) = IIf(tabloF(I, 4) = 0, "", IIf(tabloF(I, 4) - tabloF(I, 23) <> -3, "", -3))
        tabloG(5, k + 1) = IIf(tabloF(I, 5) = 0, "", IIf(tabloF(I, 5) - tabloF(I, 24) <> -3, "", -3))
        tabloG(6, k + 1) = IIf(tabloF(I, 6) = 0, "", IIf(tabloF(I, 6) - tabloF(I, 25) <> -3, "", -3))
        tabloG(7, k + 1) = IIf(tabloF(I, 7) = 0, "", IIf(tabloF(I, 7) - tabloF(I, 26) <> -3, "", -3))
        tabloG(8, k + 1) = IIf(tabloF(I, 8) = 0, "", IIf(tabloF(I, 8) - tabloF(I, 27) <> -3, "", -3))
        tabloG(9, k + 1) = IIf(tabloF(I, 9) = 0, "", IIf(tabloF(I, 9) - tabloF(I, 28) <> -3, "", -3))
        tabloG(10, k + 1) = IIf(tabloF(I, 10) = 0, "", IIf(tabloF(I, 10) - tabloF(I, 29) <> -3, "", -3))
        tabloG(11, k + 1) = IIf(tabloF(I, 11) = 0, "", IIf(tabloF(I, 11) - tabloF(I, 30) <> -3, "", -3))
        tabloG(12, k + 1) = IIf(tabloF(I, 12) = 0, "", IIf(tabloF(I, 12) - tabloF(I, 31) <> -3, "", -3))
        tabloG(13, k + 1) = IIf(tabloF(I, 13) = 0, "", IIf(tabloF(I, 13) - tabloF(I, 32) <> -3, "", -3))
        tabloG(14, k + 1) = IIf(tabloF(I, 14) = 0, "", IIf(tabloF(I, 14) - tabloF(I, 33) <> -3, "", -3))
        tabloG(15, k + 1) = IIf(tabloF(I, 15) = 0, "", IIf(tabloF(I, 15) - tabloF(I, 34) <> -3, "", -3))
        tabloG(16, k + 1) = IIf(tabloF(I, 16) = 0, "", IIf(tabloF(I, 16) - tabloF(I, 35) <> -3, "", -3))
        tabloG(17, k + 1) = IIf(tabloF(I, 17) = 0, "", IIf(tabloF(I, 17) - tabloF(I, 36) <> -3, "", -3))
    k = k + 1
     End If
    Next I

A REMPLACER PAR :

k = 0
    For I = 1 To UBound(tabloF, 1)
     If tabloF(I, 20) <> "" And tabloF(I, 19) >= 150 Then '....................................................si ville présentes en colonne C et colonne U et si nombre>=150 en colonne T
      ReDim Preserve tabloG(1 To 17, 1 To k + 1) '.............................................................on stocke les valeurs dans la tabloG
        for n = 1 to 17
            select case n
                case < 3
                    tabloG(n, k + 1) = tabloF(I, n)
                case else
                    tabloG(n, k + 1) = IIf(tabloF(I, n) = 0, "", IIf(tabloF(I, n) - tabloF(I, n + 19) <> -3, "", -3)) '........si valeur=0 et écart<>-3, on laisse vide , sinon on écrit -3
            end select
        next n
    k = k + 1
     End If
    Next I

Le résultat est le même a priori mais ça ferait un peu moins de lignes dans cette macro qui en contient déjà pas mal.

Cordialement,

Bonjour 3GB,

Je me permets d'intervenir pour proposer de simplifier les parties laborieuses du code 

Comment ça "laborieuse", tu es un peu dur, .

Je te remercie pour la correction, je n'avais pas pensé à faire une boucle, mais comme je le disais:

voici une tentative (qui mériterait certainement d'être optimisée car quand je vois le code de 3GB, je ne suis pas fier du mien)

J'ai encore du mal à maitriser les "tablo".....mais je ne désespère pas,

C'est vrai que c'est plus digeste ainsi, j'avais du mal à m'y retrouver. J'en prends bonne note, merci à toi.

Bon dimanche,

Amicalement,

Bonjour Xorsankukai, 3GB, le forum,

J'espère que vous allez bien et je vous remercie pour vos retours.

La macro est bien ,sauf que je ne comprends pas pourquoi est-ce qu'elle prend en compte des équipes qui ne sont pas proches de leur record ? (Ligne jaune dans la photo ci-dessous)

Également, pour un côté pratique dans l'analyse, j'aimerai ajouter une colonne (idéalement en C), où l'on ajouterait le nombre figurant en colonne AM pour l'équipe concernée dans les différentes feuilles avec un nom de pays.

tableau nombre apparitions

Est ce que cela vous semble jouable ?

Je vous remercie par avance et je vous souhaite une bon dimanche

Bien à vous.

Laplacea

Xorsankukai,

Aucune connotation négative à voir là-dedans. C'était juste pour aider à la digestion du code en cas de relecture.

Et je suis moi-même amateur qui essaie de progresser donc je n'ai pas encore tous les réflexes, j'ai encore du mal avec les tableaux... Enfin, on se comprend je pense.

Tu sais peut-être déjà mais en mettant Option Base 1 en début de module (avant la 1ere procédure), tu peux gérer tes tableaux sur leurs dimensions réelles, c'est-)-dire de 1 à N au lieu de 0 à N-1, ce qui est moins contre-intuitif. Ca te permettrait de mettre k à la place de k+1, en colonne de tableaux au sein des boucles...

laplacea,

Voyant que vous avanciez bien, je n'ai pas suivi assidument les retours de Xorsankukai, donc je ne saurais pas te répondre sur la partie interprétative du code, sur laquelle je ne me suis pas attardé.

J'espère en tout cas que tu obtiendras vite le résultat que tu attends.

Bon dimanche à tous les 2,

Re à vous 2,


@3GB:

Aucune connotation négative à voir là-dedans. C'était juste pour aider à la digestion du code en cas de relecture.

Aucun souci, je ne l'ai pas mal pris, je suis ouvert à toute proposition/amélioration qui me permette de progresser,

Encore merci.


@laplacea:

La macro est bien ,sauf que je ne comprends pas pourquoi est-ce qu'elle prend en compte des équipes qui ne sont pas proches de leur record ?

Les lignes correspondent bien aux critères souhaités pour l'affichage des villes, mais les cases restent vides si les conditions ne répondent pas aux critères (>0 et écart -3).

J'avais anticipé avec ces lignes de code que j'avais désactivées (n'étant pas sûr de ce que tu voulais).

For I = .Range("B" & Rows.Count).End(xlUp).Row To 3 Step -1
 If Application.WorksheetFunction.CountA(Range("E" & I & ":S" & I)) = 0 Then .Rows(I).Delete '..........supprime les lignes où il n'y a aucune valeur de E à S
Next I

A tester....

Cordialement,

Bonjour à tous,

J'espère que vous allez bien.

J'avais anticipé avec ces lignes de code que j'avais désactivées (n'étant pas sûr de ce que tu voulais).

Je vois que tu commences à bien me connaître ahah. C'est bien pensé de ta part en tout cas.

Je viens de réaliser 2-3 tests et ça correspond bien à ce que je recherche.

Si jamais je remarque quelque chose, j'en ferai part dans la discussion.

En tout cas merci beaucoup encore une fois Xorsankukai.

Merci également à toi 3GB.

Je vais pouvoir continuer d'avancer significativement dans mon projet grâce à vous.

Je vous souhaite le meilleur et à bientôt sur le forum !

Salut laplacea,

Tu peux surtout remercier xorsankukai, tout le mérite est pour lui.

J'espère au moins que ton fichier fera gagner le PSG ce soir !!!

Bonne continuation à tous les 2,

Rechercher des sujets similaires à "macro lien extract param"