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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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...
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.
 
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😀12").Copy
Workbooks("Classeur1.xlsm").Activate
Workbooks("Classeur1.xlsm").Sheets("Feuil1").Range("D3😀12").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.
 
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour