Simplifier le code VBA (suite)

Bonjour à tous

Nouveau souci de code trop long... ... voilà ce qui arrive quand on est pas douée !!!

Avant de poster ici, j'ai essayer d'adapter des codes plus ou moins similaires que j'utilise pour d'autres fichiers et qui fonctionnent à merveille (encore merci le forum!)... en vain...

Alors si les géniaux génies du code vba veulent bien m'aider une fois de plus et m'expliquer ce que signifie leurs lignes de codes ... ce serait super génial !

J'ai volontairement raccourci la longueur du fichier joint... qui faisait plus de 4000 ko vu le nombre de lignes utilisées en réel...

Pour plus de lisibilité aussi j'ai modifié les références des articles en chiffre simple... plutôt qu'un mélange de lettre, nombre et point....

Belle soirée à tous & encore une fois mes meilleurs voeux pour la nouvelle année !

8test-calcul.xlsm (142.05 Ko)

Bonjour

Je n'ai pas les mêmes résultats que toi (mais je n'ai pas compris ce que tu veux faire)

A vérifier

Sub B_CALCULS()
'Déclaration
Dim pc2 As Range  'Calcul Final
Dim pc3 As Range  'Calcul Final
Dim pc4 As Range  'Calcul Final
Dim pc5 As Range  'Calcul Final
Dim I As Long   'Ligne
Dim DL As Long
Dim Ligne As Long

  'Neutralisation des fonctions :
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Application.EnableEvents = False
  DL = Range("EZ" & Rows.Count).End(xlUp).Row  'Calcul dernière ligne à partir 1er chiffre des lots

  Ligne = Range("A" & Rows.Count).End(xlUp).Row
  For I = 4 To DL
    ' On se sert de la valeur de la colonne 156 (157,158 et 159) pour trouver la bonne colonne
    ' Exemple si en colonne 156 il y a 3
    ' Colonne = 8 + 3 = 11 --> Colonne K
    ' C'est ce que tu avais marqué dans ta macro
'    ElseIf Cells(i, 156) = 3 Then
'        Set pc2 = Range(Range("K4"), Range("K65536").End(xlUp))

    Set pc2 = Range(Cells(4, 8 + Cells(I, 156)), Cells(Ligne, 8 + Cells(I, 156)))
    Set pc3 = Range(Cells(4, 8 + Cells(I, 157)), Cells(Ligne, 8 + Cells(I, 157)))
    Set pc4 = Range(Cells(4, 8 + Cells(I, 158)), Cells(Ligne, 8 + Cells(I, 158)))
    Set pc5 = Range(Cells(4, 8 + Cells(I, 159)), Cells(Ligne, 8 + Cells(I, 159)))
    'CALCUL FINAL
    Cells(I, 161).Value = Application.WorksheetFunction.CountIfs(pc2, 1, pc3, 1, pc4, 1, pc5, 1)   'ok
    Cells(I, 162).Value = Application.WorksheetFunction.CountIfs(pc2, 1, pc3, 1, pc4, 1, pc5, 0)   'ok
    Cells(I, 163).Value = Application.WorksheetFunction.CountIfs(pc2, 1, pc3, 1, pc4, 0, pc5, 1)   'ok
    Cells(I, 164).Value = Application.WorksheetFunction.CountIfs(pc2, 1, pc3, 0, pc4, 1, pc5, 1)   'ok
    Cells(I, 165).Value = Application.WorksheetFunction.CountIfs(pc2, 0, pc3, 1, pc4, 1, pc5, 1)   'ok
    Cells(I, 166).Value = Application.WorksheetFunction.CountIfs(pc2, 1, pc3, 1, pc4, 0, pc5, 0)   'ok
    Cells(I, 167).Value = Application.WorksheetFunction.CountIfs(pc2, 1, pc3, 0, pc4, 1, pc5, 0)   'ok
    Cells(I, 168).Value = Application.WorksheetFunction.CountIfs(pc2, 1, pc3, 0, pc4, 0, pc5, 1)   'ok
    Cells(I, 169).Value = Application.WorksheetFunction.CountIfs(pc2, 0, pc3, 1, pc4, 1, pc5, 0)   'ok
    Cells(I, 170).Value = Application.WorksheetFunction.CountIfs(pc2, 0, pc3, 1, pc4, 0, pc5, 1)   'ok
    Cells(I, 171).Value = Application.WorksheetFunction.CountIfs(pc2, 0, pc3, 0, pc4, 1, pc5, 1)   'ok
    Cells(I, 160).Value = Application.Sum(Cells(I, 161).Resize(, 11))
  Next I

  Application.ScreenUpdating = True
  Application.Calculation = xlCalculationAutomatic
  Application.EnableEvents = True
End Sub

Bonjour Banzaï64

J'ai pas encore testé... ... mais je vois pas pourquoi cela fonctionnerait pas... ... vu que dans mes colonnes calculs j'ai pas modifié suite à la suppression des lignes suivantes du fichier...

4 lignes de code au lieu de 200... c'est purement génial....

Donc pour les lots de 5 ou 6 articles... ça va passer...

Merci aussi pour la ligne 160 et le SUM que je n'arrivait pas à faire fonctionner du fait de la mauvaise utilisation du resize...

Alors, je teste dans mon vrai fichier... ... et 99.99% de chance que je vienne mettre "résolu"

Encore de nous partager tes grandes connaissances & ... que dire de plus ?

et voici le post pour validé

et du coup j'ai essayé aussi avec d'autres fichiers créer l'an passé et ça fonctionne

donc immense merci Banzaï64

Rechercher des sujets similaires à "simplifier code vba suite"