Faux. Votre fichier Classeur1.xlsm ne possède pas de feuille nommée Moy Jour, c'est le fichier Suivi Qualité qui a cette feuille.
Donc évidemment les lignes comportant ça :
Il vous faut mémoriser la somme et la quantité, soit sur deux colonnes soit sur une en concaténant du genre Somme&"-"&Quantité.
En PJ une possibilité avec :
VB:
Sub CalculNouvelleMoyenne()
Dim NouvelleNote, Valeurs
NouvelleNote = 6
Valeurs = Split([E2], "-")
[D2] = (Val(Valeurs(1)) + NouvelleNote) / (Val(Valeurs(2)) + 1)
[E2] = "C-" & Val(Valeurs(1)) + NouvelleNote & "-" & Val(Valeurs(2)) + 1
End Sub
Evidemment, si vous décidez d'utiliser deux colonnes ce sera plus simple :
Code:
Sub CalculNouvelleMoyenne2()
Dim NouvelleNote, Valeurs
NouvelleNote = 6
[K2] = [K2] + NouvelleNote
[L2] = [L2] + 1
[J2] = [K2] / [L2]
End Sub
Est ce qu'il vous serait possible de l'intégrer à la macro dont on a parlé précédement svp ? car j'ai essayé de le faire moi même mais ça ne fonctionne pas.
Sub Transfert_de_données()
' Fixe le répertoire à analyser
Rep = "C:\Users\victo\Documents\SNCF\Tableaux ICV\Tableaux brutes\"
' Recherche le fichier le plus récent
FichierLePlusRecent
' Et l'ouvre.
Workbooks.Open Rep & FichierRecent
' Le reste est identique
Workbooks(FichierRecent).Sheets("Moy Jour").Range("D312").Copy
Workbooks("Classeur1.xlsm").Activate
Workbooks("Classeur1.xlsm").Sheets("Feuil1").Range("D312").Select
Workbooks("Classeur1.xlsm").Sheets("Feuil1").Paste
Workbooks(FichierRecent).Close
MsgBox "Les données ont été actualisées avec succès"
End Sub
Utilisez les balises </> pour le code, c'est plus lisible.
Essayez cela :
VB:
Sub Transfert_de_données()
' Fixe le répertoire à analyser
Rep = "C:\Users\victo\Documents\SNCF\Tableaux ICV\Tableaux brutes\"
' Recherche le fichier le plus récent
FichierLePlusRecent
' Et l'ouvre.
Workbooks.Open Rep & FichierRecent
' Le reste est identique
For L = 3 To 12
' Récupère la nouvelle valeur à intégrer
NouvelleValeur = Workbooks(FichierRecent).Sheets("Moy Jour").Range("D" & L)
' Récupère la quantité déjà stockée
AncienneQuantité = Workbooks("Classeur1.xlsm").Sheets("Moy Jour").Range("E" & L)
' Recalcul l'ancienne somme avec les anciennes moyennes et quantité
AncienneSomme = Workbooks("Classeur1.xlsm").Sheets("Moy Jour").Range("D" & L) * AncienneQuantité
' Stocke la nouvelle moyenne
Workbooks("Classeur1.xlsm").Sheets("Moy Jour").Range("D" & L) = (AncienneSomme + NouvelleValeur) / (AncienneQuantité + 1)
' Stocke la nouvelle quantité
Workbooks("Classeur1.xlsm").Sheets("Moy Jour").Range("E" & L) = AncienneQuantité + 1
Next L
MsgBox "Les données ont été actualisées avec succès"
End Sub
La colonne E est à masquer.
J'utilise qu'une colonne car j'ai optimisé car :
Moyenne = Somme/Quantité, donc on peut retrouver Somme=Moyenne*Quantité.
Donc in suffit de stocker la quantité puis de faire :
NouvelleMoyenne=(Moyenne+NouvelleValeur)/(Quantité+1)
et stocker Quantité+1.
La feuille Moy jour existe bien
Mais je ne comprend pas ce que cela veut dire "déclarer toutes les variables"
Désolé mais je suis vraiment débutant en VBA
Si Option Explicit est précisé dans un des modules alors toute variable doit être déclarée :
VB:
Sub Transfert_de_données()
Dim NouvelleValeur ,AncienneQuantité ,AncienneSomme ,L
' Fixe le répertoire à analyser
Rep = "C:\Users\victo\Documents\SNCF\Tableaux ICV\Tableaux brutes\"
' Recherche le fichier le plus récent
FichierLePlusRecent
' Et l'ouvre.
Workbooks.Open Rep & FichierRecent
' Le reste est identique
For L = 3 To 12
' Récupère la nouvelle valeur à intégrer
NouvelleValeur = Workbooks(FichierRecent).Sheets("Moy Jour").Range("D" & L)
' Récupère la quantité déjà stockée
AncienneQuantité = Workbooks("Classeur1.xlsm").Sheets("Moy Jour").Range("E" & L)
' Recalcul l'ancienne somme avec les anciennes moyennes et quantité
AncienneSomme = Workbooks("Classeur1.xlsm").Sheets("Moy Jour").Range("D" & L) * AncienneQuantité
' Stocke la nouvelle moyenne
Workbooks("Classeur1.xlsm").Sheets("Moy Jour").Range("D" & L) = (AncienneSomme + NouvelleValeur) / (AncienneQuantité + 1)
' Stocke la nouvelle quantité
Workbooks("Classeur1.xlsm").Sheets("Moy Jour").Range("E" & L) = AncienneQuantité + 1
Next L
MsgBox "Les données ont été actualisées avec succès"
End Sub
Faux. Votre fichier Classeur1.xlsm ne possède pas de feuille nommée Moy Jour, c'est le fichier Suivi Qualité qui a cette feuille.
Donc évidemment les lignes comportant ça :