Autres Multiple sur des filtres

chilo27

XLDnaute Occasionnel
Bonsoir le Forum
J'ai besoin de vos lumières
Est ce possible
Est il possible de faire fonctionner ma macro sur un filtre
En L je mets un nombre par exemple 4
Je filtre dans la colonne G le nombre 15 après 17 etc
j'ai un plus de 150 000 lignes à traiter cela me permettra d'accélérer l'opération
voir dans le worksheet de la feuille 3

En vous remerciant par avance
 

Pièces jointes

  • MULTIPLE.zip
    25.4 KB · Affichages: 8

chilo27

XLDnaute Occasionnel
Bonsoir le Forum, silvanu

Non je souhaite exécuter la macro sur des cellules filtrées

Le Filtre s'effectue sur la colonne G

je filtre le nombre 15 de la colonne G J'exécute la macro

Je renouvelle l'opération sur le nombre 17 par exemple et ainsi de suite

merci de m'avoir répondu
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Un essai en PJ.
Colorer des cellules est long en VBA, autant confier cette tache à une MFC avec :
VB:
=ET(J1<>"";MOD(J1;$L$1)=0)
Il ne reste en VBA que les "ok" à gérer sur les cellules visibles avec :
Code:
Sub MULTIPLE()
Dim L%, dl%, Modulo%
Application.ScreenUpdating = False
    Modulo = [L1]                                                   ' Capture du modulo
    dl = Sheets("feuil3").Range("J" & Rows.Count).End(xlUp).Row     'dernière ligne de la colonne A
    Range("J6:J" & dl).Interior.ColorIndex = xlNone                 'on efface les couleurs
    Range("L6:L" & dl).ClearContents                                'efface les données en L
    For L = 6 To dl
        If Cells(L, "J").EntireRow.Hidden = False Then
            If Cells(L, "J").Value Mod Modulo = 0 Then              'si multiple de L1
                Cells(L, "L") = "ok"                                'ok en L
            End If
        End If
   Next L
End Sub
A tester pour voir. J'ai mis 10k lignes dans le fichier.
( au fait, si la PJ fait moins de 1Mo vous pouvez livrer directement le xlsm )
 

Pièces jointes

  • Copie de MULTIPLE.xlsm
    433.6 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
La MFC prends peut de temps.
Dans cette V2 j'ai mis 20k lignes.
Avec un modulo 2, le cas le plus défavorable, mon PC met 4s soit 30s pour 150klignes, ce n'est pas rédhibitoire.
Sans MFC les temps sont quasi identique. Testez la seconde PJ.
 

Pièces jointes

  • Copie de MULTIPLE2.xlsm
    844.5 KB · Affichages: 2
  • Copie de MULTIPLE3 sans MFC.xlsm
    844.3 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bien le bonjour Chilo,
La nuit porte conseil. En PJ un algo qui va 40 fois plus vite.
Sur mon PC avec 20k lignes, modulo=2, et rien de masqué, ça tourne à 0.095s soit 0.7s pour 150k lignes.
L'astuce : coller des formules en colonne L et laisser bosser XL plutôt que de le faire en VBA. Avec :
VB:
Sub MULTIPLE()
Dim L#, dl#, Modulo%, T0#
    On Error GoTo Fin
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual                   ' suppression calcul automatique
    T0 = Timer                                                      ' mémorisation du timer
    dl = Sheets("feuil3").Range("J" & Rows.Count).End(xlUp).Row     ' dernière ligne de la colonne A
On Error Resume Next    
ActiveSheet.ShowAllData                                         ' retire les filtres
    With Range("L6:L" & dl)                                         ' pour tout le tableau utile colonne L
        .ClearContents                                              ' effacement des données précédentes
        .FormulaR1C1 = "=IF(MOD(RC[-2],R1C12)=0,""OK"","""")"       ' met formule : =SI(MOD(J6;$L$1)=0;"OK";"")
        .Value = .Value                                             ' supprime les formules et met les valeurs
    End With
    Application.Calculation = xlCalculationAutomatic                ' calcul automatique
   [N5] = Timer - T0                                                ' affichage du temps d'éxécution
Fin:
End Sub
 

Pièces jointes

  • Copie de MULTIPLE 6.xlsm
    845.6 KB · Affichages: 7
Dernière édition:

chilo27

XLDnaute Occasionnel
Bonjour le Forum, Sylvanu

merci de l'aide

J'ai décortiqué les différentes macros
A
1) concernant l'exemple multiple 6-1 fonctionne parfaitement sans filtrage et rapide de surcroît
2) concernant les autres exemples avec filtrage, c'est un peu plus compliqué l'exemple muultiple3 sans MFC
a) la macro fonctionne en arrière plan pas sur la filtrage
b) Lorsque l'on filtre sur le 13 , c'est le 23 qui apparaît
B
L'exemple multiple-1 correspond davantage à ce que j'aurai souhaité pour un meilleur confort
Le nombre filtré reste bien en place mais le décompte ne s'effectue pas à partie de la première ligne du nombre filtré
je m'arrête là pour ne pas écrire un roman

Certes, c'est mieux que rien

Encore une fois merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Prenez celui qui correspond le mieux à votre besoin.
C'est pour cela que j'ai tenté plusieurs solutions car le résultat en terme de vitesse dépendra de votre bécane, de votre XL et de votre fichier.
Mais quelque soit le fichier retenu penser à mettre en début :
Application.Calculation = xlCalculationManual
et à la fin
Application.Calculation = xlCalculationAutomatic
car avec 150k Sommeprod, il vaut mieux interdire le calcul automatique.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 989
dernier inscrit
jralonso