je suis nouveau dans la programmation vba excel. J'ai ecrit un programme mais il y a faute qui apparait au niveau Tableau(i, 1) = Str(Tableau(i, 1)) dans mon programme lorsque je compile. n'ayant pas assez d'experiences et de connaissances, pouvez vous m'aider? vous verez le programme totale en dessous
Sub listeDoublonsPlage()
Dim Plage As Range
Dim Tableau(), Resultat() As String
Dim Tableau_sans_zero() As String
Dim Tableau_cinq_jours() As Double
Dim Tableau_moy_lis() As Double
Dim i As Integer, j As Integer, m As Integer
Set Un = New Collection
'La plage de cellules (sur une colonne) à tester
Set Plage = Range("B10:B" & Range("B65536").End(xlUp).Row)
'lecture de la colonne B et affecter les valeurs dans Array
Tableau = Plage.Value
' il transforme les valeurs en string
For i = 1 To Plage.Count
Tableau(i, 1) = Str(Tableau(i, 1))
Next i
' il compte le nombre des elements vides
ncount = 0
For i = 1 To Plage.Count
If Tableau(i, 1) = " 0" Then
ncount = ncount + 1
End If
Next i
'ndim2 est la dim de la nouvelle array sans les elts vides
ndim2 = Plage.Count - ncount
' il definit la nouvelle dim
ReDim Tableau_sans_zero(ndim2)
' il met toutes les valeurs non nulles de l 'ancien tableau dans le nouveau tableau
ndim_count = 0
For i = 1 To Plage.Count
If Tableau(i, 1) <> " 0" Then
ndim_count = ndim_count + 1
Tableau_sans_zero(ndim_count) = Tableau(i, 1)
End If
Next i
'MsgBox ndim2
'MsgBox Tableau_sans_zero(0)
'MsgBox Tableau_sans_zero(ndim2 - 1)
som_dim = 0
' verification k le dernier elt est bien la somme des autres
For i = 1 To (ndim2 - 1)
som_dim = som_dim + Tableau_sans_zero(i)
Next i
If (som_dim - Tableau_sans_zero(ndim2) = 0) Then
ndim2 = ndim2 - 1
End If
' MsgBox ndim2
' ndim2 est le nombre de semaines travaillées
' moyenne de la production par semaine
moy = 0
For i = 1 To ndim2
moy = moy + Tableau_sans_zero(i)
Next i
moy = moy / ndim2
' MsgBox moy
' compter les semaines en moyenne 5 jrs travaillés
ndim3 = 0
For i = 1 To ndim2
tmp = Tableau_sans_zero(i) - (moy / 2)
If (tmp > 0) Then
ndim3 = ndim3 + 1
End If
Next i
ReDim Tableau_cinq_jours(ndim3)
MsgBox moy / 2
MsgBox ndim3
'remplir le tableau avec les elts sup moy/2
ndim_count = 0
For i = 1 To ndim2
tmp = Tableau_sans_zero(i) - (moy / 2)
If tmp > 0 Then
ndim_count = ndim_count + 1
Tableau_cinq_jours(ndim_count) = Tableau_sans_zero(i)
End If
Next i
ReDim Tableau_moy_lis(ndim3 - 2)
' calcul de toutes les moyennes lissées
For i = 3 To ndim3
Tableau_moy_lis(i - 2) = (1 / 3) * (Tableau_cinq_jours(i) + Tableau_cinq_jours(i - 1) + Tableau_cinq_jours(i - 2))
Next i
' MsgBox Tableau_moy_lis(1)
' MsgBox Tableau_moy_lis(ndim3 - 2)
' calcul de la somme du tableau 5 jours travaillés
OcQuad = 0
For i = 1 To ndim3
OcQuad = OcQuad + Tableau_cinq_jours(i)
Next i
' MsgBox OcQuad
' calcul du max 3SL
maxLS = 0
For i = 1 To (ndim3 - 2)
If Tableau_moy_lis(i) > maxLS Then
maxLS = Tableau_moy_lis(i)
End If
Next i
MsgBox maxLS
' sortir le max de 3SL et OcQuad pour afficher dans une fenetre
Cells(64, 8) = maxLS
'Worksheets("Feuil2" ).Cells(7, i + 1) = 2 + i
'Worksheets("TCD PMMECA").Cells(64, 8) = maxLS
'MsgBox Plage.Count
End Sub
Sub listeDoublonsPlage()
Dim Plage As Range
Dim Tableau(), Resultat() As String
Dim Tableau_sans_zero() As String
Dim Tableau_cinq_jours() As Double
Dim Tableau_moy_lis() As Double
Dim i As Integer, j As Integer, m As Integer
Set Un = New Collection
'La plage de cellules (sur une colonne) à tester
Set Plage = Range("B10:B" & Range("B65536").End(xlUp).Row)
'lecture de la colonne B et affecter les valeurs dans Array
Tableau = Plage.Value
' il transforme les valeurs en string
For i = 1 To Plage.Count
Tableau(i, 1) = Str(Tableau(i, 1))
Next i
' il compte le nombre des elements vides
ncount = 0
For i = 1 To Plage.Count
If Tableau(i, 1) = " 0" Then
ncount = ncount + 1
End If
Next i
'ndim2 est la dim de la nouvelle array sans les elts vides
ndim2 = Plage.Count - ncount
' il definit la nouvelle dim
ReDim Tableau_sans_zero(ndim2)
' il met toutes les valeurs non nulles de l 'ancien tableau dans le nouveau tableau
ndim_count = 0
For i = 1 To Plage.Count
If Tableau(i, 1) <> " 0" Then
ndim_count = ndim_count + 1
Tableau_sans_zero(ndim_count) = Tableau(i, 1)
End If
Next i
'MsgBox ndim2
'MsgBox Tableau_sans_zero(0)
'MsgBox Tableau_sans_zero(ndim2 - 1)
som_dim = 0
' verification k le dernier elt est bien la somme des autres
For i = 1 To (ndim2 - 1)
som_dim = som_dim + Tableau_sans_zero(i)
Next i
If (som_dim - Tableau_sans_zero(ndim2) = 0) Then
ndim2 = ndim2 - 1
End If
' MsgBox ndim2
' ndim2 est le nombre de semaines travaillées
' moyenne de la production par semaine
moy = 0
For i = 1 To ndim2
moy = moy + Tableau_sans_zero(i)
Next i
moy = moy / ndim2
' MsgBox moy
' compter les semaines en moyenne 5 jrs travaillés
ndim3 = 0
For i = 1 To ndim2
tmp = Tableau_sans_zero(i) - (moy / 2)
If (tmp > 0) Then
ndim3 = ndim3 + 1
End If
Next i
ReDim Tableau_cinq_jours(ndim3)
MsgBox moy / 2
MsgBox ndim3
'remplir le tableau avec les elts sup moy/2
ndim_count = 0
For i = 1 To ndim2
tmp = Tableau_sans_zero(i) - (moy / 2)
If tmp > 0 Then
ndim_count = ndim_count + 1
Tableau_cinq_jours(ndim_count) = Tableau_sans_zero(i)
End If
Next i
ReDim Tableau_moy_lis(ndim3 - 2)
' calcul de toutes les moyennes lissées
For i = 3 To ndim3
Tableau_moy_lis(i - 2) = (1 / 3) * (Tableau_cinq_jours(i) + Tableau_cinq_jours(i - 1) + Tableau_cinq_jours(i - 2))
Next i
' MsgBox Tableau_moy_lis(1)
' MsgBox Tableau_moy_lis(ndim3 - 2)
' calcul de la somme du tableau 5 jours travaillés
OcQuad = 0
For i = 1 To ndim3
OcQuad = OcQuad + Tableau_cinq_jours(i)
Next i
' MsgBox OcQuad
' calcul du max 3SL
maxLS = 0
For i = 1 To (ndim3 - 2)
If Tableau_moy_lis(i) > maxLS Then
maxLS = Tableau_moy_lis(i)
End If
Next i
MsgBox maxLS
' sortir le max de 3SL et OcQuad pour afficher dans une fenetre
Cells(64, 8) = maxLS
'Worksheets("Feuil2" ).Cells(7, i + 1) = 2 + i
'Worksheets("TCD PMMECA").Cells(64, 8) = maxLS
'MsgBox Plage.Count
End Sub