Traitement données

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
laplacea
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 5 janvier 2020
Version d'Excel : 2016 Microsoft

Message par laplacea » 30 mars 2020, 12:23

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
.Cells(3, dercol + 2).Formula = _
"=IF(M3=""W"",IF(C3=C2,N2+1,1),0)" 'ta formule
.Range(Cells(3, dercol + 2), Cells(derlig, dercol + 2)).FillDown 'on tire la formule jusqu'à la dernière ligne


.Cells(2, dercol + 3) = "Série D": .Cells(2, dercol + 3).Interior.ColorIndex = 6 'titre et couleur colonne
.Cells(3, dercol + 3).Formula = _
"=IF(M3=""D"",IF(C3=C2,O2+1,1),0)" 'ta formule
.Range(Cells(3, dercol + 3), Cells(derlig, dercol + 3)).FillDown 'on tire la formule jusqu'à la dernière ligne


.Cells(2, dercol + 4) = "Série L": .Cells(2, dercol + 4).Interior.ColorIndex = 6 'titre et couleur colonne
.Cells(3, dercol + 4).Formula = _
"=IF(M3=""L"",IF(C3=C2,P2+1,1),0)" 'ta formule
.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
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 2'327
Appréciations reçues : 263
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 30 mars 2020, 13:48

Re,

Comme je n'arrive toujours pas à comprendre, nous allons procéder par étape, car je ne sais plus où j'en suis, :lole:
Ça te parait simple, mais mon cerveau est ramolli en ce moment, peut-être du au confinement, :bav:

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)
Macro série.V1xlsm.xlsm
(181.66 Kio) Pas encore téléchargé
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, :-)))
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Avatar du membre
laplacea
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 5 janvier 2020
Version d'Excel : 2016 Microsoft

Message par laplacea » 30 mars 2020, 14:37

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
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 2'327
Appréciations reçues : 263
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 30 mars 2020, 15:56

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, :lole:
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
Macro série.V2.xlsm
(133.16 Kio) Téléchargé 7 fois

Cordialement,
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Avatar du membre
laplacea
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 5 janvier 2020
Version d'Excel : 2016 Microsoft

Message par laplacea » 30 mars 2020, 16:19

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
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 2'327
Appréciations reçues : 263
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 30 mars 2020, 16:38

Re,
C'est exactement ça pour les conditions.
:ppg: :appl2: :ppg:

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.JPG
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.JPG
Capture2.JPG (36.06 Kio) Vu 53 fois

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


Cordialement,
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Avatar du membre
laplacea
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 5 janvier 2020
Version d'Excel : 2016 Microsoft

Message par laplacea » 31 mars 2020, 15:55

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
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 2'327
Appréciations reçues : 263
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 31 mars 2020, 17:17

Re,

Ravi d'avoir pu t'aider, :)

A bientôt, (°v°)°
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Avatar du membre
laplacea
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 5 janvier 2020
Version d'Excel : 2016 Microsoft

Message par laplacea » 7 avril 2020, 11:40

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
TEST.xlsm
(290.4 Kio) Téléchargé 9 fois
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 2'327
Appréciations reçues : 263
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 7 avril 2020, 13:10

Salut Laplacea, (°v°)°
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, :wink:

Cordialement,
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message