Faire un calcul "que" sur une plage de cellule filtrée VBA

Bonjour,

Je cherche à calculer une différence entre deux dates après avoir appliquer 2 filtres :

Dim Ligne As Range

Dim Plage As Range

Application des filtres

Sheets("Suivi facturation VDP").Select

ActiveSheet.AutoFilterMode = False

ActiveSheet.Range("$A$1:$AM$36923").AutoFilter Field:=4, Criteria1:="=450*"

DateRepere = DateSerial(2017, 6, 30)

Worksheets("Suivi facturation VDP").Range("X:X").AutoFilter Field:=24, Criteria1:="<" & CLng(DateRepere)

Worksheets("Suivi facturation VDP").Range("AB:AB").AutoFilter Field:=28, Criteria1:="", Operator:=xlOr, _

Criteria2:=">" & CLng(DateRepere)

Définition de la plage filtrée:

Set Plage = Range("A1:AM" & Range("a36923").End(xlUp).Row).SpecialCells(xlCellTypeVisible)

Boucle sur plage filtrée

For Each Ligne In Plage

'

' Dat1 = Cells(Ligne.Row, 24)

' nbjour = DateDiff("j", DateRepere, Dat1)

' Cells(Ligne.Row, "AC") = nbjour

' Next Ligne

Le problème est que ma plage filtrée n'est pas détecté et la Ligne.Row reste à 1 alors que le End(xlUp).Row) est à 8250.

Merci d'avance pour vos réponses.

Bien cordialement.

Bonjour,

Ligne.row reste à 1 pour balayer toutes vos colonnes car votre plage est une plage de cellules et non de lignes.

ceci serait mieux :

Set Plage = Range("A1:AM" & Range("a36923").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Rows

ceci serait plus simple:

Set Plage = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows

Bonjour,

Merci pour la réponse. Je viens d'essayer et le Ligne.row reste à 1 avec le code suivants (la boucle ne se réalise pas):

Dim Ligne As Range

Dim Plage As Range

Sheets("Suivi facturation VDP").Select

ActiveSheet.AutoFilterMode = False

ActiveSheet.Range("$A$1:$AM$36923").AutoFilter Field:=4, Criteria1:="=450*"

DateRepere = DateSerial(2017, 6, 30) 'Echéance le 30 juin

Worksheets("Suivi facturation VDP").Range("X:X").AutoFilter Field:=24, Criteria1:="<" & CLng(DateRepere)

Worksheets("Suivi facturation VDP").Range("AB:AB").AutoFilter Field:=28, Criteria1:="", Operator:=xlOr, _

Criteria2:=">" & CLng(DateRepere)

Set Plage = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows

For Each Ligne In Plage

Dat1 = Cells(Ligne.Row, 24)

nbjour = DateDiff("j", Dat1, DateRepere)

Cells(Ligne.Row, "AC") = nbjour

Next Ligne

Bien cordialement.

bonjour

salut thev

une somme sur filtre se fait facilement par une simple formule ou un bête TCD.

VBA fait un calcul comme toi avec une calculette en suivant avec ton doigt sur une liste papier (sur laquelle tu as préalablement coché les lignes nécessaires)

joins ton fichier avec une explication

Bonjour,

Salut jmd,

Le problème pourrait venir de l'application de ton filtre. Insère un stop avant l'instruction set plage :

stop
Set Plage = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows

et regarde le contenu de la feuille active.

Rechercher des sujets similaires à "calcul que plage filtree vba"