Copie cellules ds ligne rep. à une condition

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 ^^)


      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:

2 réponses

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 770
 
Bonjour,
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.
0
oozenot
 
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:

      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
0