Enregistrer une date et recopier dans des cellules filtrées
Bonjour,
Je suis débutante en VBA et je suis bloquée sur une macro.
Je travaille sur un fichier de 35000 lignes. Dans la colonne O, je fais une simple soustraction entre 2 dates qui calcule un délais.
Lorsque les deux dates sont identiques et que le résultat est donc de 0, via une macro, je fais un filtre en colonne O pour sélectionner toutes les cellules à 0.
Puis, Je supprime toutes les dates enregistrées en colonne N pour les remplacer par 31/12/2016. Cette même date doit être copiée dans toutes les cellules pour lesquelles j'ai supprimé les dates.
Sans macro, j'utilise le CRTL+B mais dans une macro, le résultat n'est pas probant...
Si quelqu'un pouvait m'aider à faire cela de manière un peu plus "pro", ce serait vraiment sympa.
Voici la macro générée grâce à l'enregistreur :
Range("D1").Select
Selection.AutoFilter
ActiveWindow.SmallScroll ToRight:=3
ActiveSheet.Range("$A$1:$O$37154").AutoFilter Field:=15, Criteria1:="=0", _
Operator:=xlAnd
Range("N3:N37154").Select
Selection.ClearContents
Range("N3").Select
ActiveCell.FormulaR1C1 = "12/31/2016"
Range("N3:N37154").Select
Selection.FillDown
ActiveWindow.ScrollRow = 36979
ActiveWindow.ScrollRow = 36662
ActiveWindow.ScrollRow = 36106
ActiveWindow.ScrollRow = 35392
ActiveWindow.ScrollRow = 34043
ActiveWindow.ScrollRow = 31821
ActiveWindow.ScrollRow = 29361
ActiveWindow.ScrollRow = 26505
ActiveWindow.ScrollRow = 23807
ActiveWindow.ScrollRow = 21585
ActiveWindow.ScrollRow = 19760
ActiveWindow.ScrollRow = 18490
ActiveWindow.ScrollRow = 17221
ActiveWindow.ScrollRow = 16268
ActiveWindow.ScrollRow = 15475
ActiveWindow.ScrollRow = 14919
ActiveWindow.ScrollRow = 14443
ActiveWindow.ScrollRow = 14284
ActiveWindow.ScrollRow = 14205
ActiveWindow.ScrollRow = 13412
ActiveWindow.ScrollRow = 11348
ActiveWindow.ScrollRow = 9365
ActiveWindow.ScrollRow = 8412
ActiveWindow.ScrollRow = 7778
ActiveWindow.ScrollRow = 6984
ActiveWindow.ScrollRow = 6429
ActiveWindow.ScrollRow = 5714
ActiveWindow.ScrollRow = 5000
ActiveWindow.ScrollRow = 4286
ActiveWindow.ScrollRow = 3493
ActiveWindow.ScrollRow = 2858
ActiveWindow.ScrollRow = 2144
ActiveWindow.ScrollRow = 1588
ActiveWindow.ScrollRow = 1033
ActiveWindow.ScrollRow = 636
ActiveWindow.ScrollRow = 318
ActiveWindow.ScrollRow = 80
ActiveWindow.ScrollRow = 1
Range("N1").Select
Un grand merci !
Stéphanie
Ta macro ne fait absolument pas ce que tu as dit...
Bonjour et bienvenu
Pourquoi effacer si c'est pour écrire après
A tester
Sub test()
Range("$A$1:$O$37154").AutoFilter Field:=15, Criteria1:="=0"
Range("N3").FormulaR1C1 = "12/31/2016"
Range("N3:N37154").FillDown
Range("N1").Select
End SubSi pas ça ton fichier serait utile
Banzai64 a écrit :Bonjour et bienvenu
Pourquoi effacer si c'est pour écrire après
A tester
Sub test() Range("$A$1:$O$37154").AutoFilter Field:=15, Criteria1:="=0" Range("N3").FormulaR1C1 = "12/31/2016" Range("N3:N37154").FillDown Range("N1").Select End SubSi pas ça ton fichier serait utile
Bonsoir Banzai,
Merci de ton aide !
Ca marche mais la macro écrit 31/12/2016 dans toutes les cellules mêmes celles qui ne sont pas sélectionnées par le filtre.
Je veux bien mettre mon fichier mais au risque d'être ridicule, je ne vois pas comment "insérer un fichier"....
Sans vouloir abuser, en plus de ton aide pour ma macro, peux-tu m'expliquer comment joindre un fichier sur le forum ?
Encore merci
Stéphanie
Banzai64 a écrit :Bonjour et bienvenu
Pourquoi effacer si c'est pour écrire après
A tester
Sub test() Range("$A$1:$O$37154").AutoFilter Field:=15, Criteria1:="=0" Range("N3").FormulaR1C1 = "12/31/2016" Range("N3:N37154").FillDown Range("N1").Select End SubSi pas ça ton fichier serait utile
Re bonsoir Banzai,
En fait, cela fonctionne très bien !!! Mille mercis !!
J'ai une dernière question si tu veux bien m'accorder encore un peu de temps.
Voici ma macro complète :
Sub filtredateretard()
'
' Macro2 Macro
'
'
Range("$A$1:$O$37154").AutoFilter Field:=15, Criteria1:="=0"
Range("N3").FormulaR1C1 = "31/12/2016"
Range("N3:N40000").FillDown
Range("N1").Select
If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
ActiveSheet.Range("$A$1:$P$40000").AutoFilter Field:=12
Range("N1").Select
ActiveSheet.Range("$A$1:$P$40000").AutoFilter Field:=11, Criteria1:="=V*", _
Operator:=xlAnd
ActiveSheet.Range("$A$1:$P$40000").AutoFilter Field:=14, Criteria1:=">" & Range("O1").Value
ActiveSheet.Range("$A$1:$P$40000").AutoFilter Field:=1, Criteria1:="<" & Range("O1").Value, Operator:=xlAnd
ActiveSheet.Range("$A$1:$P$40000").AutoFilter Field:=15, Criteria1:=">30", _
Operator:=xlAnd
ActiveSheet.Range("$A$1:$P$40000").AutoFilter Field:=2, Criteria1:="=" & Range("B15").Value
End Sub
Je dois ajouter un dernier filtre après toutes ces étapes qui correspond à la dernière ligne.
Le problème est que le premier nom du client qui est en B15 après tout les filtres aujourd'hui pourra être en B3 ou autre demain.
Je ne sais pas comment dire de faire un filtre sur le premier nom du client filtré afin de le sélectionner
Il s'agit de faire un filtre sur le premier nom du client qui apparait après toutes les étapes sauf la dernière ligne.
C'est compliqué à expliquer, j'espère être assez claire...
Encore merci!!
Stéphanie
Bonsoir
Stefc69 a écrit :j'espère être assez claire...
Pour toi sans doute, pour moi pas du tout
Le mieux c'est de joindre ton fichier, dans lequel tu expliques ce que tu veux obtenir (fais un exemple)
A te lire
Banzai64 a écrit :Bonsoir
Stefc69 a écrit :j'espère être assez claire...
Pour toi sans doute, pour moi pas du tout
Le mieux c'est de joindre ton fichier, dans lequel tu expliques ce que tu veux obtenir (fais un exemple)
A te lire
Je ne peux pas joindre mon fichier, il est trop gros.
Je peux te l'envoyer par mail ou ne laisser que 30 lignes sur un fichier test ?
Bonjour
Tu as pensé à le compresser ?
Tu as la possibilité de le joindre par cjoint http://cjoint.com/index.php
Sinon tu réduis le nombre de données, mais surtout tu détailles bien les actions à faire et ce que tu dois obtenir