Créer plusieurs boucles While dans un module

Fermé
fabkiller78 Messages postés 11 Date d'inscription lundi 21 juillet 2014 Statut Membre Dernière intervention 25 septembre 2014 - Modifié par fabkiller78 le 21/07/2014 à 16:50
fabkiller78 Messages postés 11 Date d'inscription lundi 21 juillet 2014 Statut Membre Dernière intervention 25 septembre 2014 - 22 juil. 2014 à 14:25
Bonjour,


Je découvre depuis peu le langage vba et essaye de créer des macros avec plus ou moins de succès (merci au forum qui m'apporte beaucoup d'aide)

Je rencontre un problème avec ma dernière macro et j'aurai besoin de votre aide.
A la base j'ai 5 modules que j'aimerais regrouper en 1 seul. Les 5 modules marchent très bien indépendamment mais si je les regroupe en un seul module ça plante.

Chaque module est quasiment identique.
Je m'explique :
j'ai voulu créer une macro afin d'actualiser tous les fichiers se trouvant dans un dossier.
J'ai créé un boucle While afin de lui dire tant qu'il y a des fichiers dans ce dossier les ouvrir, les actualiser, les enregistrer et les fermer

J'ai ensuite créé un module pour chaque dossier.


Je voudrais maintenant regrouper ces 5 modules en un seul.
Ces 5 dossiers étant un ensemble de sous-dossiers (ils sont tous dans le mêmes dossier), vous allez me dire de faire une boucle sur le dossier principal en incluant tous les sous-dossiers.
Mais dans ces 5 dossiers il y a également des sous dossiers qui ne doivent pas être mis à jour (j'espère être clair)

ci-dessous l'un des 5 modules (qui fonctionne parfaitement) et le module regroupant les 5 modules


Sub admin()

Dim Cheminadmin As String
Dim Documentadmin As String

Cheminadmin = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\ADMINISTRATION\"
Documentadmin = Dir(Cheminadmin & "*.xlsx")

While Documentadmin <> ""
    Workbooks.Open Cheminadmin & Documentadmin, UpdateLinks = 0
    Workbooks(Documentadmin).Save
    Workbooks(Documentadmin).Close
    Documentadmin = Dir
Wend

End Sub



Le module regroupant les 5 modules :

Sub suivibud()

Dim Cheminadmin As String
Dim CheminMKT As String
Dim CheminMKTdetailing As String
Dim CheminMKTorga As String
Dim Cheminregul As String

Dim Documentadmin As String
Dim DocumentMKT As String
Dim DocumentMKTdetailing As String
Dim DocumentMKTorga As String
Dim Documentregul As String


Cheminadmin = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\ADMINISTRATION\"
CheminMKT = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\MARKETING\"
CheminMKTdetailing = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\MARKETING DETAILING\"
CheminMKTorga = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\MARKETING ORGANISATION\"
Cheminregul = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\REGULATORY\"


Documentadmin = Dir(Cheminadmin & "*.xlsx")
DocumentMKT = Dir(CheminMKT & "*.xlsx")
DocumentMKTdetailing = Dir(CheminMKTdetailing & "*.xlsx")
DocumentMKTorga = Dir(CheminMKTorga & "*.xlsx")
Documentregul = Dir(Cheminregul & "*.xlsx")


While Documentadmin <> ""
    Workbooks.Open Cheminadmin & Documentadmin, UpdateLinks = 0
    Workbooks(Documentadmin).Save
    Workbooks(Documentadmin).Close
    Documentadmin = Dir
Wend
    
While DocumentMKTdetailing <> ""
    Workbooks.Open CheminMKTdetailing & DocumentMKTdetailing, UpdateLinks = 0
    Workbooks(DocumentMKTdetailing).Save
    Workbooks(DocumentMKTdetailing).Close
    <gras>DocumentMKTdetailing = Dir</gras>
Wend
    

While DocumentMKT <> ""
    Workbooks.Open CheminMKT & DocumentMKT, UpdateLinks = 0
    Workbooks(DocumentMKT).Save
    Workbooks(DocumentMKT).Close
    DocumentMKT = Dir
Wend
    
      
 While DocumentMKTorga <> ""
    Workbooks.Open CheminMKTorga & DocumentMKTorga, UpdateLinks = 0
    Workbooks(DocumentMKTorga).Save
    Workbooks(DocumentMKTorga).Close
    DocumentMKTorga = Dir
Wend
    
    
While Documentregul <> ""
    Workbooks.Open Cheminregul & Documentregul, UpdateLinks = 0
    Workbooks(Documentregul).Save
    Workbooks(Documentregul).Close
    Documentregul = Dir
Wend
    
End Sub



J'ai 2 problème sur ce module :
il n'ouvre qu'un fichier de la première boucle et passe sur la boucle suivante pour à nouveau ouvrir un fichier et planter sur la ligne en gras avec le message Erreur d'exécution '5'


Si quelqu'un a une explication à mon problème ça m'enlèverais une épine du pied

Merci
A voir également:

3 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
21 juil. 2014 à 18:40
Bonjour,

le premier Dir doit etre avant Chaque While

Documentadmin = Dir(Cheminadmin & "*.xlsx")
While Documentadmin <> ""
Workbooks.Open Cheminadmin & Documentadmin, UpdateLinks = 0
Workbooks(Documentadmin).Save
Workbooks(Documentadmin).Close
Documentadmin = Dir
Wend

DocumentMKT = Dir(CheminMKT & "*.xlsx")
While DocumentMKTdetailing <> ""
Workbooks.Open CheminMKTdetailing & DocumentMKTdetailing, UpdateLinks = 0
Workbooks(DocumentMKTdetailing).Save
Workbooks(DocumentMKTdetailing).Close
DocumentMKTdetailing = Dir
Wend

etc........
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
22 juil. 2014 à 06:21
Bonjour Fabkiller, F89

on peut peut-^tre raccourcir le code en utilisant une macro paramétrée et en diminuant le nombre de variable appelées en mémoire

le principe à compléter (déclarations ....)

Option Explicit
'-------
Sub admin()
'déclarations

Cheminadmin = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\ADMINISTRATION\"
CheminMKT = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\MARKETING\"
CheminMKTdetailing = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\MARKETING DETAILING\"
CheminMKTorga = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\MARKETING ORGANISATION\"
Cheminregul = "Y:\Comptabilite\Commun\Controle de gestion\M&S 2014\CLOSING 2014\SUIVI BUD\REGULATORY\"

For cptr = 1 To 5
repertoire = Choose(cptr, "Cheminadmin ", "CheminMKT", "..etc..")
ouvrir_fermer repertoire
End Sub
'--------------------------------------
Sub ouvrir_fermer(Dossier)
Dim Fichier As String
ChDir Dossier
Fichier = Dir("*.xlsx")
While Fichier <> ""
Workbooks.Open Fichier, UpdateLinks = 0
Workbooks(Fichier).Save
Workbooks(Fichier).Close
Fichier = Dir
Wend
--
Michel
0
fabkiller78 Messages postés 11 Date d'inscription lundi 21 juillet 2014 Statut Membre Dernière intervention 25 septembre 2014
22 juil. 2014 à 14:25
merci f894009 ma macro marche au top maintenant
michel_m j'essayerai votre solution dès que j'ai un peu et je vous dirai le résultat
0