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...

Cesar1275

XLDnaute Occasionnel
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
Merci beaucoup pour votre aide !

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.
 

Cesar1275

XLDnaute Occasionnel
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("D3:D12").Copy
Workbooks("Classeur1.xlsm").Activate
Workbooks("Classeur1.xlsm").Sheets("Feuil1").Range("D3:D12").Select
Workbooks("Classeur1.xlsm").Sheets("Feuil1").Paste
Workbooks(FichierRecent).Close
MsgBox "Les données ont été actualisées avec succès"
End Sub
 

sylvanu

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

sylvanu

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

sylvanu

XLDnaute Barbatruc
Supporter XLD
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 nouvelle quantité
   Sheets("Feuil1").Range("E" & L) = AncienneQuantité + 1
et ça marche beaucoup mieux. :)
En PJ le fichier rectifié. Pensez à modifier le Rep, que j'ai bidouillé pour fonctionner sur mon PC.
 

Pièces jointes

  • Classeur1.xlsm
    24.6 KB · Affichages: 11

Discussions similaires

Réponses
5
Affichages
272

Statistiques des forums

Discussions
315 095
Messages
2 116 169
Membres
112 676
dernier inscrit
little_b