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
Bonjour laplacea, le forum,
Un essai.....à partir de tes formules....
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....
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
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,
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
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......
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
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 'dernire 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
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
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
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,