Simplifier le code VBA (suite)
Nouveau souci de code trop long...
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
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 !
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
J'ai pas encore testé...
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...
Encore
et du coup j'ai essayé aussi avec d'autres fichiers créer l'an passé et ça fonctionne
donc immense merci Banzaï64