Bonjour à tous,

Je viens juste de me mettre au VBA pour faire du traitement de données sur Excel, et je suis confronté à l'erreur 1004 "Erreur définie par l'application ou par l'objet".

La problématique est la suivante :

J'ai des colonnes de données, et je veux faire des moyennes d'une partie de ces données. Par exemple je fais la moyenne des cellules (42,i) et (44,i) et j'envois le résultat dans la cellule (6, i) (cf code ci-dessous).

Le problème est que le premier code marche très bien (le "Janvierlissagesemaine"), alors que le deuxième code ("Janvierlissagedimanche"), qui est un copié collé du premier avec seulement des modifications au niveau des colonnes sélectionnées, ne marche que partiellement : j'obtiens bien mes moyennes dans les cellules (31, i+1) mais dans toutes les autres cellules de (31+1, i+1) à (31+4, i+1) les moyennes affichées sont nulles!

Pourtant j'ai vérifié les cellules appellées ne sont pas vides, elles contiennent bien des nombres; et j'ai essayé d'ouvrir un nouveau tableau excel, je l'ai rempli avec des nombres aléatoires (pour voir si l'erreur ne venait pas de mes données sélectionnées), j'ai ouvert VBA et fait un copié collé des codes utilisés précédemment, et j'ai obtenu le même résultat, à savoir le "Janvierlissagesemaine" qui marche très bien, et le "Janvierlissagedimanche" que partiellement.

Le code erreur apparaît dans le CODE 2 au niveau de cette ligne : Set Cellules1 = Union(Cells(150, i), Cells(152, i), Cells(154, i)).

Merci beaucoup d'avance pour votre aide, je suis en stage et coincé depuis hier dessus...

Voici le code :

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
51
52
53
54
55
56
57
58
59
60
61
62
Sub JanvierLissagesemaine()
'CODE1
'Lissage semaine Janvier
'i est le numéro de la colonne du tableau
 
For i = 3 To 25
 
                Dim Cellules1 As Range
                Dim Cellules2 As Range
                Dim Cellules3 As Range
                Dim Cellules4 As Range
                Dim Cellules5 As Range
                Dim Cellules6 As Range
                Dim Cellules7 As Range
 
                Set Cellules1 = Union(Cells(42, i), Cells(44, i))
                Set Cellules2 = Union(Cells(46, i), Cells(48, i), Cells(50, i), Cells(52, i))
                Set Cellules3 = Union(Cells(54, i), Cells(56, i))
                Set Cellules4 = Union(Cells(58, i), Cells(60, i), Cells(62, i), Cells(64, i), Cells(66, i))
                Set Cellules5 = Union(Cells(68, i), Cells(70, i), Cells(72, i), Cells(74, i))
                Set Cellules6 = Union(Cells(76, i), Cells(78, i), Cells(80, i), Cells(82, i))
                Set Cellules7 = Union(Cells(84, i), Cells(86, i), Cells(88, i))
 
                Cells(6, i + 1).Value = WorksheetFunction.Average(Cellules1)
                Cells(6 + 1, i + 1).Value = WorksheetFunction.Average(Cellules2)
                Cells(6 + 2, i + 1).Value = WorksheetFunction.Average(Cellules3)
                Cells(6 + 3, i + 1).Value = WorksheetFunction.Average(Cellules4)
                Cells(6 + 4, i + 1).Value = WorksheetFunction.Average(Cellules5)
                Cells(6 + 5, i + 1).Value = WorksheetFunction.Average(Cellules6)
                Cells(6 + 6, i + 1).Value = WorksheetFunction.Average(Cellules7)
 
Next
 
End Sub
Sub JanvierLissagedimanche()
'Lissage dimanche
'CODE 2
 
For i = 3 To 6
 
                Dim Cellules1 As Range
                Dim Cellules2 As Range
                Dim Cellules3 As Range
                Dim Cellules4 As Range
                Dim Cellules5 As Range
 
                Set Cellules1 = Union(Cells(150, i), Cells(152, i), Cells(154, i))
                Set Cellules2 = Union(Cells(156, i), Cells(160, i), Cells(162, i), Cells(164, i), Cells(166, i), Cells(168, i))
                Set Cellules3 = Union(Cells(170, i), Cells(172, i), Cells(174, i), Cells(176, i), Cells(178, i), Cells(180, i), Cells(182, i), Cells(184, i))
                Set Cellules4 = Union(Cells(184, i), Cells(186, i), Cells(188, i), Cells(190, i), Cells(192, i))
                Set Cellules5 = Union(Cells(194, i), Cells(196, i))
 
 
                Cells(31, i + 1).Value = WorksheetFunction.Average(Cellules1)
                Cells(31 + 1, i + 1).Value = WorksheetFunction.Average(Cellule2)
                Cells(31 + 2, i + 1).Value = WorksheetFunction.Average(Cellule3)
                Cells(31 + 3, i + 1).Value = WorksheetFunction.Average(Cellule4)
                Cells(31 + 4, i + 1).Value = WorksheetFunction.Average(Cellule5)
 
Next
 
End Sub