Copie cellules ds ligne rep. à une condition
oozenot
-
oozenot -
oozenot -
Bonjour,
J'essaie, tant bien que mal, de trouver une solution au problème suivant:
Je dispose d'un tableau Excel dans lequel j'ai une colonne date et une colonne montant (parmi d'autres ^^)
je souhaite que lorsque l'on compare la date de la colonne date avec une date stocké dans y et que la condition est respectée, il retienne la ligne et aille me copier la cellule de la colonne "montant" située sur cette même ligne dans un autre cellule d'une autre feuille.
Suis-je clair ?
j'ai réussi à exprimer la logique via et à donner mes conditions via
Select case....
Case...
...
End select
Mon code ne bug pas... mais il ne copie rien !!!!
un code inutile quoi !!
il y aurais t'il une âme charitable qui veuille bien m'éclairer ?
ci dessous le code
(je pense que ma méthode de copie n'est pas bonne.. mais en utilisant Range, rien ne se passe non plus...du moins, quand c'est moi qui les utilise ^^)
J'essaie, tant bien que mal, de trouver une solution au problème suivant:
Je dispose d'un tableau Excel dans lequel j'ai une colonne date et une colonne montant (parmi d'autres ^^)
je souhaite que lorsque l'on compare la date de la colonne date avec une date stocké dans y et que la condition est respectée, il retienne la ligne et aille me copier la cellule de la colonne "montant" située sur cette même ligne dans un autre cellule d'une autre feuille.
Suis-je clair ?
j'ai réussi à exprimer la logique via et à donner mes conditions via
Select case....
Case...
...
End select
Mon code ne bug pas... mais il ne copie rien !!!!
un code inutile quoi !!
il y aurais t'il une âme charitable qui veuille bien m'éclairer ?
ci dessous le code
(je pense que ma méthode de copie n'est pas bonne.. mais en utilisant Range, rien ne se passe non plus...du moins, quand c'est moi qui les utilise ^^)
Dim A, D, R As Worksheet
Dim I, J, K, L As Date
Dim g, e, h As Long
Dim iD, iA As Long
Set A = Worksheets("Age Analysis")
Set R = Worksheets("Results")
iA = 1
g = 0
h = 0
I = DateAdd("m", -3, y)
J = DateAdd("m", -6, y)
K = DateAdd("m", -9, y)
L = DateAdd("m", -12, y)
Select Case I & J & K & L
Case ActiveSheet.Cells(iD, 7).Value >= I
Cells(iD, 13).Value.Select
Selection.Copy
A.Cells(iA, 1).Paste
A.Cells(iA, 1).Value = e
g = g + e 'g permet de stocker la somme
h = h + 1 'compte le nombre d'operations passe entre les dates definies
iA = iA + 1
R.Cells(10, 6).Value = g 'affiche la somme dans la cellule de la feuille Results
R.Cells(10, 5).Value = h 'affiche le nombre d'opérations dans la cellulle de la feuille results
Case I > ActiveSheet.Cells(iD, 7).Value >= J
Cells(iD, 13).Value.Select
Selection.Copy
A.Cells(iA, 1).Paste
A.Cells(iA, 1).Value = e
g = g + e 'g permet de stocker la somme
h = h + 1 'compte le nombre d'operations passe entre les dates definies
iA = iA + 1
R.Cells(9, 6).Value = g 'affiche la somme dans la cellule de la feuille Results
R.Cells(9, 5).Value = h 'affiche le nombre d'opérations dans la cellulle de la feuille results
etc....
End Select
Next
A voir également:
- Copie cellules ds ligne rep. à une condition
- Partager photos en ligne - Guide
- Copie cachée - Guide
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Copie écran samsung - Guide
2 réponses
Bonjour,
1- Evite les .Select, tout le monde te le dira.
peut être remplacé par :
Exemple dans ton code :
A remplacer par :
2-
2a) Qu'est ce que "e"? Pas définit au préalable
Ta cellule A.Cells(iA, 1) aura de toutes façons la valeur de "e"... Est ce que tu veux vraiment.
Vois déjà cela et si ça ne fonctionne toujours pas revient.
1- Evite les .Select, tout le monde te le dira.
Range("A1").Select
Selection.Copy
Range("B1").Select
ActiveCell.Paste
peut être remplacé par :
Range("A1").Copy Range("B1")
Exemple dans ton code :
Cells(iD, 13).Value.Select Selection.Copy A.Cells(iA, 1).Paste
A remplacer par :
Cells(iD, 13).Copy A.Cells(iA, 1)
2-
A.Cells(iA, 1).Paste A.Cells(iA, 1).Value = e
2a) Qu'est ce que "e"? Pas définit au préalable
Ta cellule A.Cells(iA, 1) aura de toutes façons la valeur de "e"... Est ce que tu veux vraiment.
Vois déjà cela et si ça ne fonctionne toujours pas revient.
et bien en fait, c'est ce que j'avais fait avant mais ne sachant plus trop ou ça coinçait, j'ai décomposé les étapes....
pour répondre à l'utilité de la valeur e, elle me sert a enregistrer au fur et à mesure les montants qui sont pris en compte par la condition (puis copiés et collés) afin de pouvoir faire la somme de ces derniers (variable g) pour pouvoir l'afficher dans une cellule d'une autre feuille.
(h compte le nombre de condition qui sont validées)
voici le code:
pour répondre à l'utilité de la valeur e, elle me sert a enregistrer au fur et à mesure les montants qui sont pris en compte par la condition (puis copiés et collés) afin de pouvoir faire la somme de ces derniers (variable g) pour pouvoir l'afficher dans une cellule d'une autre feuille.
(h compte le nombre de condition qui sont validées)
voici le code:
Dim A, D, R As Worksheet
Dim I, J, K, L As Date
Dim g, e, h As Long
Dim iD, iA As Long
Set A = Worksheets("Age Analysis")
Set R = Worksheets("Results")
iA = 1
g = 0
h = 0
I = DateAdd("m", -3, y)
J = DateAdd("m", -6, y)
K = DateAdd("m", -9, y)
L = DateAdd("m", -12, y)
Sheets("Debit").Select
For iD = 2 To 65536
Select Case I & J & K & L
Case ActiveSheet.Cells(iD, 7).Value >= I
ActiveSheet.Range(iD & ";" & 13).Copy A.Cells(iA, 1)
e = A.Cells(iA, 1)
g = g + e 'g permet de stocker la somme
h = h + 1 'compte le nombre d'operations passe entre les dates definies
iA = iA + 1
R.Cells(10, 6).Value = g 'affiche la somme dans la cellule de la feuille Results
R.Cells(10, 5).Value = h 'affiche le nombre de date dans la cellulle de la feuille results
Case I > ActiveSheet.Cells(iD, 7).Value >= J
ActiveSheet.Range(iD & ";" & 13).Copy A.Cells(iA, 1)
e = A.Cells(iA, 1)
g = g + e 'g permet de stocker la somme
h = h + 1 'compte le nombre d'operations passe entre les dates definies
iA = iA + 1
R.Cells(9, 6).Value = g 'affiche la somme dans la cellule de la feuille Results
R.Cells(9, 5).Value = h 'affiche le nombre de date dans la cellulle de la feuille results
Case J > ActiveSheet.Cells(iD, 7).Value >= K
ActiveSheet.Range(iD & ";" & 13).Copy A.Cells(iA, 1)
e = A.Cells(iA, 1)
g = g + e 'g permet de stocker la somme
h = h + 1 'compte le nombre d'operations passe entre les dates definies
iA = iA + 1
R.Cells(8, 6).Value = g 'affiche la somme dans la cellule de la feuille Results
R.Cells(8, 5).Value = h 'affiche le nombre de date dans la cellulle de la feuille results
Case K > ActiveSheet.Cells(iD, 7).Value >= L
ActiveSheet.Range(iD & ";" & 13).Copy A.Cells(iA, 1)
e = A.Cells(iA, 1)
g = g + e 'g permet de stocker la somme
h = h + 1 'compte le nombre d'operations passe entre les dates definies
iA = iA + 1
R.Cells(7, 6).Value = g 'affiche la somme dans la cellule de la feuille Results
R.Cells(7, 5).Value = h 'affiche le nombre de date dans la cellulle de la feuille results
Case ActiveSheet.Cells(iD, 7).Value < L
ActiveSheet.Range(iD & ";" & 13).Copy A.Cells(iA, 1)
e = A.Cells(iA, 1)
g = g + e 'g permet de stocker la somme
h = h + 1 'compte le nombre d'operations passe entre les dates definies
iA = iA + 1
R.Cells(6, 6).Value = g 'affiche la somme dans la cellule de la feuille Results
R.Cells(6, 5).Value = h 'affiche le nombre de date dans la cellulle de la feuille results
End Select
Next