Corriger une macro
kawtdanne
Messages postés
12
Statut
Membre
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Corriger une macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Macro maker - Télécharger - Divers Utilitaires
- Corriger un message whatsapp - Guide
2 réponses
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 ...
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 ...
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
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
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