Bonjour à tous, et tout d'abord tous mes voeux pour 2013!

Deux petites questions qui peuvent être stupides ce dont je m'excuse mais je débute en VBA:

QUESTION 1. J'ai un fichier Excel disons avec une colonne B de dates (plusieurs dates peuvent etre identiques), une colonne C de chiffres (rendements).

Il me faudrait creer un autre worksheet ayant la forme suivante (une ligne par date, unique cette fois):

en colonne A: Date
en colonne B: plus petite valeur de C pour cette date
en colonne C: moyenne des rendements pour cette date

QUESTION 2. j'avais des fichiers excel de 700 à 900.000 lignes à traiter dans lesquels il faut juste enlever les lignes qui contiennent un "#N/A". J’avais commencé avec des Offset et autre Delete mais cela prenait des heures. Ensuite j'ai essayé d’optimiser le code et cela prends une vingtaine de minutes pour cette macro, mais je suis sur que l'on peut faire bien mieux. Avez-vous des suggestions?

Voice le code actuel:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Public Sub H_DeleteNA()
 
'To delete all 'bad' cells as #N/A we got in column C and D
 
Dim fSourceH As Worksheet
Dim fDestH As Worksheet
Dim i As Long
Dim idest As Long
Dim ifin As Long
 
Set fSourceH = Worksheets("Feuil2") ' définit la feuille 1 en feuille source
Set fDestH = Worksheets("Feuil1")
idest = 1
 
 
Rows("1:1").Delete shift:=xlUp  'efface la premiere ligne qui est inutile
ifin = fSourceH.Range("C:C").End(xlDown).Row
 
For i = 1 To ifin
 
   If IsNumeric(fSourceH.Range("C" & i).Value) Then
 
        fSourceH.Range("A" & i & ":D" & i).Copy fDestH.Range("A" & idest)
        idest = idest + 1
 End If
 Next i
 
 fSourceH.Range("A:D").ClearContents 'efface Feuil2
 
Set fSourceH = Worksheets("Feuil1") ' définit la feuille 1 devient ma source
Set fDestH = Worksheets("Feuil2")
fSourceH.Activate
 
 
idest = 1
Range("A3").Activate
ifin = fSourceH.Range("d1048576").End(xlUp).Row + 1
For i = 1 To ifin
 
   If IsNumeric(fSourceH.Range("D" & i).Value) Then
 
        fSourceH.Range("A" & i & ":D" & i).Copy fDestH.Range("A" & idest)
        idest = idest + 1
 End If
 Next i
 
 fSourceH.Range("A:D").ClearContents 'efface Feuil1
 fSourceH.Name = "FeuilTemp"
 fDestH.Name = "Feul1"
End Sub
Merci par avance de vos précieux conseils