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


2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. 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