Corriger une macro

Bonjour,

J'ai un fichier excel avec 2 macros,
la premiere permet de definir deux periodes (cette macro marche bien)
Me deuxième macro normalement doit copier la colonne a feuille1 dans la colonne a feuille2, enlever les doublons, et apres effectuer des calculs seulement pour les données de la periode A.
Mon probleme c'est mon code fonctionne sauf qu'il ne prend pas en considération la condition que j'ai ajouté du coup, il effectue le calcul pour toutes les données.
mon code est le suivant:
Sub Macro2()
Sheets("Feuil1").Select
Columns("A:A").Select
Selection.Copy
Sheets("Feuil2").Select
Columns("A:A").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$A$13").RemoveDuplicates Columns:=1, Header:=xlYes
Application.ScreenUpdating = False

With Worksheets("Feuil1")
Dim CELL As Range
End With
With Worksheets("Feuil2")
Dim I As Long
I = .Range("A" & Rows.Count).End(xlUp).Row
For Each CELL In Range("C2:C" & Range("C" & Rows.Count).End(xlUp).Row)
If CELL.Value >= Range("A_Debut") Or CELL.Value <= Range("A_Fin").Value Then
Sheets("Feuil2").Select
.Range("B2").Formula = "=SUMPRODUCT((Feuil1!C[-1]=Feuil2!RC[-1])*(Feuil1!C[2]=1))"
.Range("B2").AutoFill Destination:=.Range("B2:B" & I), Type:=xlFillDefault

End If
Next CELL
End With
End Sub

Est ce que vous pouvez me dire pourquoi le IF n'est pas pris en compte?
Merci

2 réponses

  1. Salut
    Comme ça, je dirais qu'il manque un .value à cette ligne :

    If CELL.Value >= Range("A_Debut").Value Or CELL.Value <= Range("A_Fin").Value Then

    Peut -être est-ce autre chose ...
    0
    1. Contributeur
      Bonjour

      peut-^tre

      Tu as créé sagement un bloc
      With Worksheets("Feuil2")

      End With

      il faut alors que tous les objets cells et/ou range marquent leur appartenance à ce bloc par un point

      With Worksheets("Feuil2")
      Dim I As Long
           I = .Range("A" & Rows.Count).End(xlUp).Row
           For Each CELL In .Range("C2:C" & .Range("C" & Rows.Count).End(xlUp).Row)
                If CELL.Value >= .Range("A_Debut") Or .CELL.Value <= .Range("A_Fin").Value Then
                     .Range("B2").Formula = "=SUMPRODUCT((Feuil1!C[-1]=Feuil2!RC[-1])*(Feuil1!C[2]=1))"
                     .Range("B2").AutoFill Destination:=.Range("B2:B" & I), Type:=xlFillDefaul
                End If
           Next CELL
           .Select
      End With
      

      tu n'as pas besoin d'écrire Sheets("Feuil2").Select puisque tu es dans le bloc
      "feuil2"
      le ".select" est mis à le fin de ta macro si tu veux que l'utisateur voit le résultat

      Pendant que j'y suis

      en début de macro utilise cette instruction
      Application.screenupdating=False
      qui évitera les sautes d'écran accélère l'éxécution de 80%

      Pourquoi une boucle puisque tu utilises xlfilldefaut ?

      Michel
      0