XL 2019 Création d'une macro permettent d'ouvrir le fichier le plus recent d'un dossier

Cesar1275

XLDnaute Occasionnel
Bonjour à tous

J'ai un blocage sur la création d'une macro dans un tableau excel sur lequel je suis en train de travailler.

En effet, je cherche une fonction me permettant d'ouvrir le fichier le plus recent d'un dossier.

Voici comment sont nommés les fichiers en question :
1604323866827.png

En l'occurence, j'aurais besoin que la macro ouvre le fichier 201029.

Est ce que quelqu'un pourrais m'aider svp ?

Merci d'avance !
 
Solution
Bonjour,
La feuille Moy jour existe bien
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 :
VB:
Workbooks("Classeur1.xlsm").Sheets("Moy Jour").Range(....
ne peuvent qu'être qu'en erreur.
J'ai rectifié ces 4 lignes :
Code:
    Workbooks("Classeur1.xlsm").Activate
    AncienneQuantité = Sheets("Feuil1").Range("E" & L)
    ' Recalcul l'ancienne somme avec les anciennes moyennes et quantité
    AncienneSomme = Sheets("Feuil1").Range("D" & L) * AncienneQuantité
    ' Stocke la nouvelle moyenne
    Sheets("Feuil1").Range("D" & L) = (AncienneSomme + NouvelleValeur) / (AncienneQuantité + 1)
    ' Stocke la...

patricktoulon

XLDnaute Barbatruc
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!!!!

LOL ;)
 

Cesar1275

XLDnaute Occasionnel
Merci beaucoup Lolote83 en effet il fallait bien supprimer le "rep&"

Tant que j'y suis il me reste un dernier problème à résoudre

Comment je pourrais faire pour que la macro colle des données dans des cellules qui en contiennent deja en ajoutant les données ?

Merci d'avance !
 

Lolote83

XLDnaute Barbatruc
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
 

patricktoulon

XLDnaute Barbatruc
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 ;) :p :p :p

@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
 

patricktoulon

XLDnaute Barbatruc
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 )
;)
 
Dernière édition:

Cesar1275

XLDnaute Occasionnel
Bonjour à tous

Lolote83:

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 !

1604390511305.png

Il faudrait ajouter les données au fur et à mesure dans les cellules vertes afin de faire des moyennes pour chaque cellule.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
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 :
Valeurs​
"Vrai" moyenne​
Somme + Moyenne​
555
23,53,5
855,75
106,257,875
66,26,9375
25,54,46875
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
mais un collègue m'a dit que c'était faisable ...
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.
 

Cesar1275

XLDnaute Occasionnel
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)

Merci !
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

Pièces jointes

  • Moyennes.xlsm
    14.6 KB · Affichages: 8

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 837
dernier inscrit
Ugo