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 :
re
bonjour a tous (juste en passant)
prenez garde à filedatetime qui joue des vilains tours
parfois ça renvoie la date de dernière modif
voir même!!!
a supposer un fichierA créé en janvier un fichierB créé en décembre le fichierA déplacé en décembre et remis ou il était
ben je vous le donne dans le mille hein!!!!
Re bonjour,
Avant d'aller plus loin, as tu testé ma V3 ?
C'est juste pour savoir si cela correspondait bien à ton attente.
Bien que le code de Sylvanu soit aussi correct malgré l'intervention de notre ami PatrickToulon sur le problème soulevé du " filedatetime".
Merci
@+ Lolote83
Re, @patrick,
Tout dépend de ce que cherche l'utilisateur.
Filedatetime donne la date de la dernière modification du fichier.
DateCreated donne la date de création du fichier.
bonjour @sylvanu
et ben c'est la tout le problème en fait !!!!!!!!
un fichier A créé en janvier
un fichier B créé en décembre le 10
un fichierC créé en décembre le 20
le fichier B modifié le 21 décembre
byebye!! sylvanu
@Lolote83 scripting en late binding (pas de référence a activer
VB:
Sub test()
chemin = "C:\Users\polux\DeskTop\exemple poUr obfusquer"'adaptez votre chemin '
Set fs = CreateObject("Scripting.FileSystemObject")
fichier = Dir(chemin & "\*.*")
x = 0: recentFich = ""
Do While fichier <> ""
dat = DateValue(fs.GetFile(chemin & "\" & fichier).DateCreated)
dat2 = DateValue(fs.GetFile(chemin & "\" & fichier).DateLastModified)
Debug.Print chemin & "\" & recentFich & "---->" & dat
If dat > x Then x = dat: recentFich = fichier
fichier = Dir
Loop
MsgBox "le fichier le plus recent est le" & vbCrLf & recentFich & vbCrLf & "il a été créé le : " & x & vbCrLf & "derniere modif le:" & dat2
End Sub
Re bonjour,
Merci PatrickToulon pour cette remarque.
Je m'y suis plongé (dans le late binding) justement ce week-end et je n'ai pas tout saisi.
Je regarde donc don exemple pour mieux comprendre.
Merci
@+ Lolote83
re @Lolote83 earlybinding (liaison anticipée )
dim fs as new filesystemobject ' (reference activée ) (auto complétion)
late binding(déclaration tardive )
dim fs as object
set fs=createobject("scripting.filesystemobject") '(pas de reference activée) ( pas d'auto complétion)
avantage et inconvénients
avantage pour earlybinding autocompletion pratique pour les debutants inconvénients pour earlybinding dans certains cas la version de la reference n'est pas la meme d'un pc a l'autre (=crashe) faut l'adapter
avantage pour latebinding pas de ref marche sur tout pc car l'object est créé avec la version installé de la ref inconvénients pour latebinding pas d'auto complétion plus difficile pour les debutants (pas d'aide a la rédaction )
J'ai testé ton fichier mais quand je l'ouvre je tombe sur un classeur excel avec pleins de lignes et je ne vois pas ou est la macro ...
Pour les autres :
Ma macro arrive maintenant à ouvrir le dernier fichier et à en copier coller les données comme je voulais.
Le problème que j'ai maintenant est le suivant :
J'ai besoin de faire des moyennes en ajoutant des données au fur et à mesure dans des cellules. Concretement il faut que la macro coller les données dans les cellules mais en les ajoutant au données deja presentes pour faire une moyenne de la cellule.
Si vous ne comprenez pas n'hesitez pas à me redemander je vous réexplique
Merci encore pour votre aide !
Il faudrait ajouter les données au fur et à mesure dans les cellules vertes afin de faire des moyennes pour chaque cellule.
Doit on comprendre qu'à une nouvelle valeur, on prend la valeur de la cellule et on fait la moyenne avec la nouvelle valeur ?
Si c'est le cas, le résultat ne donnera jamais la vrai moyenne. Par exemple :
Oui c'est bien cela que je souhaite faire
Par exemple s'il y a 4 valeurs dans la cellule, je voudrais que la macro (en copiant la 5ème valeur) additionne les 5 valeurs présentes et redivise le tout par 5.
Je ne sais pas si c'est possible mais un collègue m'a dit que c'était faisable ...
Si tu ne sais pas comment faire aurait-tu une autre solution à me proposer ?
J'ai deux notes 8 et 9, ma moyenne est donc de 8.5 que je met dans ma cellule.
Arrive une nouvelle note : 3, je fais (8.5+3)/2 j'obtiens 5.75.
Or ma moyenne réelle est de (8+9+3)/3 soit 6.66.
C'est mathématique. Faire ((A+B)/2)+C)/2 ça fait (A+B+2C)/4 au lieu de (A+B+C)/3.
Sans conserver quelque part la somme et le nombre de notes, je ne vois pas.
J'ai deux notes 8 et 9, ma moyenne est donc de 8.5 que je met dans ma cellule.
Arrive une nouvelle note : 3, je fais (8.5+3)/2 j'obtiens 5.75.
Or ma moyenne réelle est de (8+9+3)/3 soit 6.66.
C'est mathématique. Faire ((A+B)/2)+C)/2 ça fait (A+B+2C)/4 au lieu de (A+B+C)/3.
Sans conserver quelque part la somme et le nombre de notes, je ne vois pas.
Je suis totalement d'accord !
Serait-il alors possible de faire en sorte que la macro créé une somme dans une autre cellule non visible afin d'avoir une moyenne valable ?
Ou alors une autre solution consisterais à ajouter les données journalières dans des colonnes différentes (cela serait peut etre plus simple à mettre en place)
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