XL 2016 simplifier avec boucle la macro de l'enregistreur de macro

PASCAL84810

XLDnaute Junior
bonjour,

je dois filtrer à tour de rôle des colonnes de droite à gauche et relever le nombre sous total de la colonne filtrée et la somme sous total de la 4 ème colonnes.
je voudrais simplifier avec une boucle style colonne -1 jusqu'a colonne 7, mais je ne sais pas faire.
je joins également un fichier

merci pour votre aide,
pascal

l'enregistreur donne pour les deux premières colonnes:

Macro5 Macro
'
'
ActiveSheet.Range("$A$1:$AS$1248").AutoFilter Field:=44, Criteria1:=">-24" _
, Operator:=xlAnd
Range("ci2").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,C[-43])-1"
Range("ci3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,C[-82])"


Range("ci2:ci3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$AS$1248").AutoFilter Field:=43, Criteria1:=">-24" _
, Operator:=xlAnd
Range("ch2").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,C[-42])-1"
Range("ch3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,C[-81])"
Range("ch2:ch3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
 

Pièces jointes

  • Classeur1 simplification macro.xlsm
    12.9 KB · Affichages: 55

Lone-wolf

XLDnaute Barbatruc
Bonjour PASCAL

Ton fichier en retour. Double-clique sur une colonne pour filtrer, pour supprimer le filtre clique dans la colonne A. Comme c'est du n'importe quoi, dur dur de faire un test.
 

Pièces jointes

  • Classeur1 simplification macro(1).xlsm
    20.9 KB · Affichages: 47

PASCAL84810

XLDnaute Junior
Bonjour,

je vous remercie,
pour les filtres cela fonctionne bien.
par contre pour les sous totaux cela ne correspond pas à mes besoins.
pour chaque mois je dois avoir les deux sous totaux, donc ils doivent se décaler d'une colonne vers la gauche pour chaque colonne que je vais filtrer aussi de droite à gauche.
Ils doivent rester figés pour chaque mois et ne pas ce modifier à chaque nouveau filtre comme c'est le cas dans votre fichier.
j'avais pensé à un copier-coller "valeur".
le but du fichier et d'avoir le nombre et les quantités de références en stock, de rotation nul depuis la date d'entrée du lot.
le passé n’évoluera plus. je pourrai le faire à la main vu que le passé et unique, mais j'ai une trentaine de familles d'articles à traiter.
De plus je rajouterai une colonne chaque mois.
Encore merci.

Pascal
 

gosselien

XLDnaute Barbatruc
Bonjour,

du VBA est-il vraiment utile sur ce fichier ???
Perso, je pense que tes dates devraient se trouver dans UNE colonne et pas en ligne :)
Un tcd pourra aider ensuite
P.

On ne fait pas du VBA si on ne connait pas une base d'excel ...
 
Dernière édition:

PASCAL84810

XLDnaute Junior
Bonjour,

je connais très bien excel et mon fichier est déjà le résultat d'un TCD.
le fichier originale fait 280 000 lignes.
mais je suis ouvert à toutes sujétions, je vais réfléchir à votre proposition.
j'ai une trentaine de fichiers à traiter ainsi.
cordialement
Pascal
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@Lone-wolf
Je me permets cette petite suggestion ;)
Quitte à utiliser des endives, autant prendre de l'endive globale ;)
VB:
Sub Filtrer()
Dim plage As Range, vForm
Set plage = Range("A1:AS1248"): vForm = Array("=SUBTOTAL(3,AR:AR)-1", "=SUBTOTAL(9,E:E)")
plage.AutoFilter Field:=ActiveCell.Column, Criteria1:=">-24", Operator:=xlAnd
With Range("CI2:CI3")
    .Formula = Application.Transpose(vForm)
    .Value = .Value
    With .Offset(, -1)
        .Formula = Application.Transpose(vForm)
        .Value = .Value
    End With
End With
End Sub
 

PASCAL84810

XLDnaute Junior
Bonjour,

en fait j'ai besoin pour chaque colonne "mois" en remontant dans le temps, donc de droite à gauche d'avoir
les deux formules. Chaque mois avec les filtres, j'ai moins de lignes à compter et à éditionner.
dans vos propositions la valeur du mois n et copiée dans le mois n-1.
concrètement mon besoin
je filtre la colonne AR : j'applique mes deux formules en CI2 et CI3 et fige la valeur,
je filtre la colonne AQ (en laissant la colonne précédente filtrée : j'applique mes deux formules en CH2 et CH3 et fige la valeur,
ainsi de suite pour les 38 colonnes.
le tout peut être fait en une boucle
je voyais quelque chose comme cela dans l'idée :
VB:
Sub Filtrer()
Dim plage As Range, vForm
Set plage = Range("A1:AS1248"): vForm = Array("=SUBTOTAL(3,AR:AR)-1", "=SUBTOTAL(9,E:E)")
Set plage = Range("a1:ar1248")
    plage.AutoFilter Field:=ActiveCell.Column, Criteria1:=">-24", Operator:=xlAnd
With Range("CI2:CI3")
    .Formula = Application.Transpose(vForm)
    .Value = .Value
  
    With .Offset(, -1)
        .Formula = Application.Transpose(vForm)
        .Value = .Value
    With .Offset(, 1)
      Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
     End With
    End With
End With
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
Call Filtrer
Cancel = True
End Sub
VBA
Cordialement
 

Staple1600

XLDnaute Barbatruc
Re

Ah bon?
Où est la différence?
NB: Je parle de la seule procédure Filtrer lancée dans VBE en ayant pris soin de d'inhiber les procédures événementielles au préalable.

Que ce soit ta version ou la mienne, le résultat est le même, non ?

(En tout cas, c'est comme cela que j'ai testé)
 

Staple1600

XLDnaute Barbatruc
Re

@Lone-wolf
On ne se comprends pas
Je te demande simplement si ma syntaxe fait que la même chose que la tienne si on exécute la macro en mode "test"
Je vais prendre un exemple
Ces syntaxes sont différentes et pourtant elles produisent le même résultat
VB:
Sub SyntaxeA()
Range("A1").FormulaR1C1 = "1"
Range("A2").FormulaR1C1 = "2"
Range("A1:A2").AutoFill Destination:=Range("A1:A10"), Type:=xlFillDefault
End Sub
Sub SyntaxeB()
[A1] = "1": [A1:A10].DataSeries 2, -4132
End Sub

C'est pareil ici, nos syntaxes sont différentes mais elles font la même chose.
Elles appliquent un filtre et insère des formules en CI2:CI3 et en CH2:CH3 puis passent en valeur seule.
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 319
Membres
102 862
dernier inscrit
Emma35400