Bonjour,

voici mon 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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
 
 
Dim Dlmin, nbEssai As Integer
Dim CellFormuleMoyAire, CellFormuleMoyPres, CellFormuleEcartAire, CellFormuleEcartMoy As Variant
Dim tabDl() As Integer
 
nbEssai = 3
ReDim tabDl(0 To nbEssai - 1)
 
 
 
 
 
Cells(2, (nbEssai + 1) * 2 - 1) = "Moyenne"
 
Cells(2, (nbEssai + 1) * 2 - 1) = "Aire Moyenne"
Cells(2, (nbEssai + 1) * 2) = "Pression de surface moyenne"
Cells(2, (nbEssai + 1) * 2 + 1) = "Ecart Type (Aire Moyenne)"
Cells(2, (nbEssai + 1) * 2 + 2) = "Ecart Type (surface moyenne)"
 
'----------------Recherche de la dernière ligne de l'essai le plus "court"----------
 
'ceci afin de s'assurer que toutes les séries auront une valeur à soumettre à la moyenne
 
For j = 0 To nbEssai - 1
col = j * 2 + 1
    tabDl(j) = Cells(Rows.Count, col).End(xlUp).Row
Next j
 
Dlmin = tabDl(0)
 
'recherche de la "dernière ligne" la plus petite parmi les essais
For j = 0 To nbEssai - 1
    If tabDl(j) <= min Then
    Dlmin = tabDl(j)
    End If
Next j
 
'----------------Calcul des moyennes et écart types associés----------
 
For i = 3 To Dlmin
 
CellFormuleMoyAire = ""
CellFormuleMoyPres = ""
CellFormuleEcartAire = ""
CellFormuleEcartPres = ""
 
 
 
    For j = 0 To nbEssai - 1
        colA = j * 2 + 1
        colP = colA + 1
 
 
 
       CellFormuleMoyAire = CellFormuleMoyAire & "+" & Cells(i, colA)
       CellFormuleMoyPres = CellFormuleMoyPres & "+" & Cells(i, colP)
 
'remplacement des virgules par des points dans la formule sinon ça bug
    CellFormuleMoyAire = Replace(CellFormuleMoyAire, ",", ".")
    CellFormuleMoyPres = Replace(CellFormuleMoyPres, ",", ".")
 
 
    Next j
 
Cells(i, (nbEssai + 1) * 2 - 1).Formula = "=(" & CellFormuleMoyAire & ")/" & nbEssai
Cells(i, (nbEssai + 1) * 2).Formula = "=(" & CellFormuleMoyPres & ")/" & nbEssai
 
  For j = 0 To nbEssai - 1
        colA = j * 2 + 1
        colP = colA + 1
 
       'formule dynamique qui s'allonge en fonction du nombre de fichier
       'donc de colonnes à moyenner
       CellFormuleEcartAire = CellFormuleEcartAire & "+" & (Cells(i, colA) - Cells(i, nbEssai * 2 - 1)) * (Cells(i, colA) - Cells(i, nbEssai * 2 - 1))
       CellFormuleEcartPres = CellFormuleEcartPres & "+" & (Cells(i, colP) - Cells(i, nbEssai * 2)) * (Cells(i, colP) - Cells(i, nbEssai * 2))
 'remplacement des virgules par des points dans la formule sinon ça bug
    CellFormuleEcartAire = Replace(CellFormuleEcartAire, ",", ".")
    CellFormuleEcartPres = Replace(CellFormuleEcartPres, ",", ".")
 
    Next j
    Cells(i, (nbEssai + 1) * 2 + 1).Formula = "=RACINE((" & CellFormuleEcartAire & ")/" & nbEssai & ")"
Cells(i, (nbEssai + 1) * 2 + 2).Formula = "=RACINE((" & CellFormuleEcartPres & ")/" & nbEssai & ")"
 
 
Next i

Les formules CellFormuleEcartAire et CellFormuleEcartPres sont des formules dynamiques qui me permettent de calculer un écart type. La formule est à priori correcte et sans faute de syntaxe, mais toutes les cellules dans laquelle cette formule est calculée m'affiche #NOM (aucun problème avec CellFormuleMoyAire et CellFormuleMoyPres). De plus elle apparaît dans la barre de formule Excel et il suffit de la valider à la main pour que le calcul se fasse.

Mais le but n'est pas de valider cellule après cellule une formule correcte écrite en VBA, vous vous en doutez.

Aussi je me demandais s'il y avait une parade à ce bug agaçant.

Merci d'avance pour votre aide,

David