Traitement données

Bonjour à tous !

J'espère que vous allez bien en cette période de confinement

J'aimerai créer une macro qui parte de la 1er colonne où il n'y a pas de contenu (dans le fichier c'est dans la colonne M)

J'aimerai qu'elle crée 4 colonnes :

1 - Colonne FT WDL : avec cette formule pour chaque ligne ou il y a du contenu SI.CONDITIONS(D3>E3;"W";D3=E3;"D";D3<E3;"L") ici pour la ligne 3;

2 - Série W : avec cette formule pour chaque ligne où il y a du contenu SI(M3="W";SI(C3=C2;N2+1;1);0) ici pour la ligne 3;

3 - Série D : avec cette formule pour chaque ligne où il y a du contenu SI(M3="D";SI(C3=C2;O2+1;1);0) ici pour la ligne 3;

4 - Série L : avec cette formule pour chaque ligne où il y a du contenu SI(M3="L";SI(C3=C2;P2+1;1);0) ci pour la ligne 3;

Je suis disponible pour toutes vos questions, je vous remercie par avance la communauté !

Laplacea

12macro-serie.xlsm (339.05 Ko)

Bonjour laplacea, le forum,

Un essai.....à partir de tes formules.... .....CTRL + e pour exécuter la macro...

3macro-serie-1.xlsm (373.91 Ko)

Cordialement,

Merci pour ton retour !

Génial ce que tu as produits merci !

C'est presque complet car j'aimerai ajouter une condition sur les colonnes.

J'aimerai qu'il ajoute ces nouvelles colonnes crées à la droite de la dernière colonne où il y a des données. Dans notre fichier c'est en M, mais dans certains fichiers ce sera O et j'aimerais que la macro soit adaptables en fonction des colonnes où il y aura de la données.

Je te remercie par avance !

Laplacea

Re,

Nouvelle tentative.....toujours CTRL + e pour lancer la macro....

7macro-serie-2.xlsm (250.69 Ko)

Cordialement,

Merci pour ton retour !

C'est presque ça sauf que pour les colonnes "Série W"; "Série D" et "Série L", elles commencent toujours par "=SI(MX=XXX ...) alors que la données de WDL ne sont pas toujours en dans la colonne M. Et vis vers-ça pour las uite de la formule avec la colonne N.

Il faudrait que les formules soient évolutives en fonction de l'emplacement de la colonne "FT WDL" et où se trouvent les 3 suivantes.

Je t'ai souligné ce point en couleur dans le fichier joint.

Merci par avance pour ton aide !

Laplacea

8test-1.xlsm (282.70 Ko)

Bonjour laplacea,

Je ne suis pas sûr d'avoir tout compris,

"Home Team" reste bien en colonne C ?

Il y a juste la colonne "FT WDL" que l'on rajoute en dernier dont la position peut varier d'une feuille à l'autre ?

On doit donc commencer par rajouter "FT WDL" et ses calculs dans sa colonne, puis rajouter les 3 autres (Série W, Série D, Série L) et faire les calculs en fonction des colonnes C et FT WDL ?

Les colonnes N, O et P sont-elles toujours en N, O et P ?

Cordialement,

Bonjour xorsankukai,

Merci pour ton retour et pour tes questions

1 - Oui "Home Team" reste en colonne C

2 - On ajoute bien la colonne "FT WDL" en dernier dont la position peut varier en fonction de la feuille

3 - C'est tout à fait ça !

4 - Je ne suis pas sur de bien avoir compris ta question. Je n'effectue aucune modification avant cette macro sur ces colonnes. Il se peut néanmoins qu'il y ait déjà de la données dans ces colonnes d'ou l'idée de créer la colonne "FT WDL" à la suite de la dernière colonne qui a du contenu et d'ajouter les 3 suivantes comme tu l'as dit à la question 3.

J'espère que mes retours t'auront aidés.

Je te remercie par avance xorsankukai !

Bien à toi.

Bonjour laplacea,

.... l'idée de créer la colonne "FT WDL" à la suite de la dernière colonne qui a du contenu et d'ajouter les 3 suivantes...

A tester....vérifie bien si les résultats sont corrects....je m’emmêle un peu les pinceaux,

4test-v4.xlsm (285.53 Ko)

Cordialement,

Merci pour ton retour xorsankukai,

Pour les colonnes on est bon sauf que les séries ne donnent pas ce qu'elles devraient donner.

Est-il possible de modifier la série pour obtenir celle que tu avais réussi à obtenir tout en gardant ce que tu as fait pour les colonnes.

Je te remercie par avance !

Laplacea

7test-v4.xlsm (526.62 Ko)

Re,

J'aimerai qu'elle crée 4 colonnes :

1 - Colonne FT WDL : avec cette formule pour chaque ligne ou il y a du contenu SI.CONDITIONS(D3>E3;"W";D3=E3;"D";D3<E3;"L") ici pour la ligne 3;

2 - Série W : avec cette formule pour chaque ligne où il y a du contenu SI(M3="W";SI(C3=C2;N2+1;1);0) ici pour la ligne 3;

3 - Série D : avec cette formule pour chaque ligne où il y a du contenu SI(M3="D";SI(C3=C2;O2+1;1);0) ici pour la ligne 3;

4 - Série L : avec cette formule pour chaque ligne où il y a du contenu SI(M3="L";SI(C3=C2;P2+1;1);0) ci pour la ligne 3;

Pour la colonne FT WDL: c'est bon ?

Pour les autres, j'ai tenté de retranscrire tes conditions, d'où ma question pour les colonnes N,O,P.

Maintenant, je suis perdu, je ne sais plus ce qu'il faut calculer dans ces 3 colonnes,

.....à moins que......

5test-v5.xlsm (288.32 Ko)

Bonne soirée,

Hello !

Merci pour ton retour.

L'idée serait d'avoir les lignes de codes que tu as mis dans la V2 qui correspondait exactement au bon calcul pour les 3 dernières colonnes.

code que tu avais mis :

" .Cells(2, dercol + 2) = "Série W": .Cells(2, dercol + 2).Interior.ColorIndex = 6 'titre et couleur colonne

.Range(Cells(3, dercol + 4), Cells(derlig, dercol + 4)).FillDown 'on tire la formule jusqu'à la dernière ligne"

L'idée est d'obtenir le même résultat que ce code tout en conservant nos conditions que tu as bien écrites sur les colonnes car avant d'utiliser la macro la dernière colonne peut être en M, Q ect.

Je te remercie par avance et un grand merci pour toutes tes tentatives et de ne rien lâcher !

Je te souhaite une bonne journée.

Laplacea

Re,

Comme je n'arrive toujours pas à comprendre, nous allons procéder par étape, car je ne sais plus où j'en suis,

Ça te parait simple, mais mon cerveau est ramolli en ce moment, peut-être du au confinement,

Dans l'exemple ci-joint qui servira de base de travail:

La colonne FT WDL doit apparaitre en colonne M (sur d'autre feuille, ça pourrait être O, P, etc.....)

Donc cette partie de code est ok, non ?

.Cells(2, dercol + 1) = "FT WDL": .Cells(2, dercol + 1).Interior.ColorIndex = 6      'titre et couleur colonne
     .Cells(3, dercol + 1).Formula = _
         "=IF(D3>E3,""W"",IF(D3=E3,""D"",IF(D3<E3,""L"","""")))"                          'ta formule
     .Range(Cells(3, dercol + 1), Cells(derlig, dercol + 1)).FillDown                     'on tire la formule jusqu'à la dernière ligne
      dercol = .Cells(2, Cells.Columns.Count).End(xlToLeft).Column                        'dernière ligne (colonne FT WDL maintenant)

Ensuite, tu me dis que cette formule fonctionnait pour SérieW:

.Cells(3, dercol + 2).Formula = _

"=IF(M3=""W"",IF(C3=C2,N2+1,1),0)"

C'est sur cette partie qu'on ne se comprend pas....

M correspond bien à la colonne de FT WDL ? ( sur une autre feuille, ce sera O,P, où autre).

N correspond donc à la colonne Série W ? L' erreur doit être ici (je pensais que les colonnes N, O et P contenaient des valeurs et que les 4 colonnes venaient après, ).

Confirme-tu que cette fois-ci j'ai bien compris ?

Cordialement,

Hello !

Tu fais bien de revenir à la base ahah

Pour la première partie du code pour le traitement de la colonne "FT WDL" tout est bon

Pour la deuxième partie du code :

- Dans le code que tu as proposé, oui la colonne M fait référence à la colonne FT WDL, mais sur certaines feuilles elle ne sera pas toujours sur M, c'est pour ça qu'il faut qu'elle prenne en compte non pas qu'elle soit en M.

- Dans ton code, oui la colonne N correspond à la colonne "Série W", mais comme pour le tiret précédent, cette colonne ne sera pas toujours sur N mais doit bien prendre en compte le contenu figurant sur la colonne "FT WDL" et sa propre colonne.

N'hésite pas si tu as des questions.

Laplacea

Re,

Merci pour ces précisions,

Le souci étant que je ne peux pas utiliser tes formules puisque les colonnes sont variables, j'essaie donc une adaptation en vba.

En espérant que cela te convienne,

For i = 3 To derlig                                                                 'boucle de la ligne 3 à la dernière
       Select Case .Cells(i, dercol)                                                      'valeur cellule dernière colonne (FT WDL)
        Case Is = "W"                                                                     'valeur = W
         If .Cells(i, 3) = .Cells(i - 1, 3) Then                                          'si valeur cellule colonne C = valeur cellule précedente colonne C
          .Cells(i, dercol + 1) = .Cells(i - 1, dercol + 1).Value + 1                     'valeur cellule colonne "Série W"= valeur précédente colonne "Série W", incrémenté de 1
          .Cells(i, dercol + 2) = 0                                                       'valeur cellule colonne "Série D" = 0
          .Cells(i, dercol + 3) = 0                                                       'valeur cellule colonne "Série L" =0
         Else                                                                             'sinon
          .Cells(i, dercol + 1) = 1                                                       'valeur cellule colonne "Série W"= 1
          .Cells(i, dercol + 2) = 0                                                       'valeur cellule colonne "Série D" = 0
          .Cells(i, dercol + 3) = 0                                                       'valeur cellule colonne "Série L" = 0
         End If

Donc pour i =3

  • si W en colonne FT WDL (ligne 3) et
  • si C3=C2 alors dans la colonne SérieW, on prend la valeur précédente en ligne 2 à laquelle on rajoute 1
  • sinon, on met 1 dans la colonne SérieW
  • Si on n'a pas W où si C3<>C2, on met 0
8macro-serie-v2.xlsm (133.16 Ko)

Cordialement,

Merci pour ton retour xorsankukai,

C'est exactement ça pour les conditions.

Le code que tu as écrit dans ton message précédent je l'ajoute ou ?

Bien à toi et merci pour ta persévérance !

Laplacea

Re,

C'est exactement ça pour les conditions.

Tu fais un copier de l'intégralité du code suivant:

Sub test()
 Dim derlig As Long
 Dim dercol As Integer

 Application.ScreenUpdating = False

  With ActiveSheet                                                                        'agit sur la feuille active
           derlig = .Range("C" & Rows.Count).End(xlUp).Row                                'dernire ligne utilisée de la colonne D
           dercol = .Cells(2, Cells.Columns.Count).End(xlToLeft).Column                   'dernière colonne avant ajout

     .Cells(2, dercol + 1) = "FT WDL": .Cells(2, dercol + 1).Interior.ColorIndex = 6      'titre et couleur colonne
     .Cells(3, dercol + 1).Formula = _
         "=IF(D3>E3,""W"",IF(D3=E3,""D"",IF(D3<E3,""L"","""")))"                          'ta formule
     .Range(Cells(3, dercol + 1), Cells(derlig, dercol + 1)).FillDown                     'on tire la formule jusqu'à la dernière ligne
      dercol = .Cells(2, Cells.Columns.Count).End(xlToLeft).Column                        'dernière colonne après ajout (colonne FT WDL maintenant)

     .Cells(2, dercol + 1) = "SŽrie W": .Cells(2, dercol + 1).Interior.ColorIndex = 6     'titre et couleur colonne
     .Cells(2, dercol + 2) = "SŽrie D": .Cells(2, dercol + 2).Interior.ColorIndex = 6     'titre et couleur colonne
     .Cells(2, dercol + 3) = "SŽrie L": .Cells(2, dercol + 3).Interior.ColorIndex = 6     'titre et couleur colonne

      For i = 3 To derlig                                                                 'boucle de la ligne 3 à la dernière
       Select Case .Cells(i, dercol)                                                      'valeur cellule dernière colonne (FT WDL)
        Case Is = "W"                                                                     'valeur = W
         If .Cells(i, 3) = .Cells(i - 1, 3) Then                                          'si valeur cellule colonne C = valeur cellule précedente colonne C
          .Cells(i, dercol + 1) = .Cells(i - 1, dercol + 1).Value + 1                     'valeur cellule colonne "Série W"= valeur précédente colonne "Série W", incrémenté de 1
          .Cells(i, dercol + 2) = 0                                                       'valeur cellule colonne "Série D" = 0
          .Cells(i, dercol + 3) = 0                                                       'valeur cellule colonne "Série L" =0
         Else                                                                             'sinon
          .Cells(i, dercol + 1) = 1                                                       'valeur cellule colonne "Série W"= 1
          .Cells(i, dercol + 2) = 0                                                       'valeur cellule colonne "Série D" = 0
          .Cells(i, dercol + 3) = 0                                                       'valeur cellule colonne "Série L" = 0
         End If
        Case Is = "D"                                                                     'valeur = D
         If .Cells(i, 3) = .Cells(i - 1, 3) Then                                          ''si valeur cellule colonne C = valeur cellule précedente colonne C
          .Cells(i, dercol + 2) = .Cells(i - 1, dercol + 2).Value + 1                     'valeur cellule colonne "Série D"= valeur précédente colonne "Série D", incrémenté de 1
          .Cells(i, dercol + 1) = 0                                                       'valeur cellule colonne "Série W" = 0
          .Cells(i, dercol + 3) = 0                                                       'valeur cellule colonne "Série L" = 0
         Else                                                                             'sinon
          .Cells(i, dercol + 2) = 1                                                       'valeur cellule colonne "Série D"= 1
          .Cells(i, dercol + 1) = 0                                                       'valeur cellule colonne "Série W" = 0
          .Cells(i, dercol + 3) = 0                                                       'valeur cellule colonne "Série L" = 0
         End If
        Case Is = "L"                                                                     'valeur = L
         If .Cells(i, 3) = .Cells(i - 1, 3) Then                                          'si valeur cellule colonne C = valeur cellule précedente colonne C
          .Cells(i, dercol + 3) = .Cells(i - 1, dercol + 3).Value + 1                     'valeur cellule colonne "Série L"= valeur précédente colonne "Série L", incrémenté de 1
          .Cells(i, dercol + 1) = 0                                                       'valeur cellule colonne "Série W"= 0
          .Cells(i, dercol + 2) = 0                                                       'valeur cellule colonne "Série D"= 0
         Else                                                                             'sinon
          .Cells(i, dercol + 3) = 1                                                       'valeur cellule colonne "Série L"= 1
          .Cells(i, dercol + 1) = 0                                                       'valeur cellule colonne "Série W"= 0
          .Cells(i, dercol + 2) = 0                                                       'valeur cellule colonne "Série D"= 0
         End If
        End Select
      Next i

      With .Range(Cells(2, dercol), Cells(derlig, dercol + 3))                            'avec les 4 dernières colonnes (FT WDL, Série W, Série D, Série L)
       .HorizontalAlignment = xlCenter                                                    'centrer horizontalement
       .Font.Color = vbBlue                                                               'police en bleu
      End With
 End With
End Sub
capture

Ensuite tu fais ALT + F11 pour ouvrir l'éditeur vba

Insertion

Module

Tu colles le code dedans

Tu peux fermer l'éditeur

Pour attribuer un raccourci clavier à la macro:

ALT + F8

Tu sélectionnes la macro "test"

Options

Tu écris e dans la case à côté de ctrl la macro s'exécutera à chaque CTRL + e

capture2

Tu enregistres ton classeur avec l'extension.xlsm (prise en charge des macros).

Cordialement,

Hello xorsankukai ,

Super ça marche bien !

Je te remercie vraiment pour ta perseverance et pour le temps que tu as consacré à créer la macro !

ON L'A FAIT ahahah

Merci beaucoup et passes une bonne fin de journée.

Laplacea

Re,

Ravi d'avoir pu t'aider,

A bientôt,

Salut à toi xorsankukai !

J'espère que tu vas bien.

Suite à la macro que tu as proposé, j'essaie de l'utiliser sur un fichier. Il ne fonctionne pas sur les colonnes Serie D et serie L

Est-ce normal et est-ce possible de modifier cela ? Je t'ai mis le fichier joint avec la macro.

Je te remercie par avance pour ton aide !

Laplacea

12test.xlsm (290.40 Ko)

Salut Laplacea,

Il ne fonctionne pas sur les colonnes Serie D et serie L

Tes 2 colonnes sont au format date,

Change le format (en standard où nombre sans décimal) et ça devrait mieux aller,

Cordialement,

Rechercher des sujets similaires à "traitement donnees"