J'ai une macro qui copie et colle des valeurs de cellules. Pour que cela marche je dois libérer le filtre exitantActiveSheet.Range("$H$10:$H$2000").AutoFilter Field:=1
ci dessous la macro
Sub Cumul()
ActiveSheet.Range("$H$10:$H$2000").AutoFilter Field:=1 'libère le filtre qu'il soit
Range("k18:k1859").Copy 'copie la sélection colonne k
Range("I18").PasteSpecial Paste:=xlPasteValues 'colle la sélection à partir d'une cellule
Range("J18:J1859").ClearContents 'efface la colonne J
End Sub
Mon souhait remettre le filtre à l'identique après l'exécution de la macro qu'il soit actif ou pas ....
Sub test()
'
Dim FiltreActif As Boolean
FiltreActif = False
On Error Resume Next
FiltreActif = ActiveSheet.AutoFilter.Filters.Item(1).On
ActiveSheet.Range("$H$10").AutoFilter Field:=1
Range("k18:k1859").Copy
Range("I18").PasteSpecial Paste:=xlPasteValues
Range("J18:J1859").ClearContents
If FiltreActif = True Then
ActiveSheet.Range("$H$10:$H$2000").AutoFilter Field:=1, Criteria1:="<>"
End If
End Sub
à tout hasard (indépendant de l'existence d'un filtre ou pas - ou du type de filtrage)
VB:
Sub Cumul()
Dim i&
Application.ScreenUpdating = False
For i = 18 To 1859: Cells(i, "i") = Cells(i, "k"): Next i
Range("J18:J1859").ClearContents
End Sub
Ben il suffit de mettre cette ligne après ton Clear.Contents nan ???
[edit]
Ah ben non, il faut tester l'état du filtre de la colonne H en début de macro, et n'activer le filtre en fin de macro que s'il était actif au début...
[/edit]
Sub test()
'
Dim FiltreActif As Boolean
FiltreActif = False
On Error Resume Next
FiltreActif = ActiveSheet.AutoFilter.Filters.Item(1).On
ActiveSheet.Range("$H$10").AutoFilter Field:=1
Range("k18:k1859").Copy
Range("I18").PasteSpecial Paste:=xlPasteValues
Range("J18:J1859").ClearContents
If FiltreActif = True Then
ActiveSheet.Range("$H$10:$H$2000").AutoFilter Field:=1, Criteria1:="<>"
End If
End Sub
Comme mon code du post #3 fonctionne avec n'importe quel filtrage, il faut après, avoir fait des modifications de données sur la plage, remettre à jour le filtrage pour tenir compte, le cas échéant, des changements de valeurs parmi les données des critères de filtrage. On rajoute donc une ligne :
VB:
Sub Cumul()
Dim i&
Application.ScreenUpdating = False
For i = 18 To 1859: Cells(i, "i") = Cells(i, "k"): Next i
Range("J18:J1859").ClearContents
If ActiveSheet.FilterMode Then ActiveSheet.AutoFilter.ApplyFilter
End Sub
Ma façon de voir les choses ..... ou une autre manière de faire
VB:
Sub Cumul()
Dim TestF As Byte
If Not ActiveSheet.AutoFilter Is Nothing Then
If ActiveSheet.FilterMode Then TestF = 1: ShowAllData
End If
[I18:I1859] = [k18:k1859].Value
[J18:J1859].ClearContents
If TestF = 1 Then ActiveSheet.[$H$10:$H$2000].AutoFilter Field:=1, Criteria1:="<>"
End Sub
Non, non ce n'est pas cela. C'est vraiment juste pour te saluer en ce samedi annoncé encore sans pluie. Une des conséquences du changement de climat : il va falloir revoir nos formules de politesse. On va bientôt se quitter en se souhaitant un week-end pluvieux et frais et ce sera bienveillant!
Sub test()
'
Dim FiltreActif As Boolean
FiltreActif = False
On Error Resume Next
FiltreActif = ActiveSheet.AutoFilter.Filters.Item(1).On
ActiveSheet.Range("$H$10").AutoFilter Field:=1
Range("k18:k1859").Copy
Range("I18").PasteSpecial Paste:=xlPasteValues
Range("J18:J1859").ClearContents
If FiltreActif = True Then
ActiveSheet.Range("$H$10:$H$2000").AutoFilter Field:=1, Criteria1:="<>"
End If
End Sub
[/cod
[/QUOTE]
Bonjour, je n'ai pas eu le courage à lecture de vos alertes (par email) de rallumer et me replonger dans les vba le 5/08.
Mais c'est chose faite ce jour, je suis novice et bricole comme je peux.
Je trouve les vba très addictives et peuvent parfois m'amener jusqu'au petit matin (c'est très dur de s'endormir sans avoir trouvé la solution )
je suis novice et bricole comme je peux.
Je trouve les vba très addictives et peuvent parfois m'amener jusqu'au petit matin (c'est très dur de s'endormir sans avoir trouvé la solution )