Corriger une macro

Fermé
kawtdanne Messages postés 11 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 19 juillet 2013 - 19 juil. 2013 à 14:49
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 19 juil. 2013 à 15:41
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
A voir également:

2 réponses

Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
19 juil. 2013 à 15:33
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
Modifié par michel_m le 19/07/2013 à 15:42
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