Créer plusieurs boucles While dans un module
fabkiller78
Messages postés
11
Statut
Membre
-
fabkiller78 Messages postés 11 Statut Membre -
fabkiller78 Messages postés 11 Statut Membre -
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
Le module regroupant les 5 modules :
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
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:
- Créer plusieurs boucles While dans un module
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte gmail - Guide
- Creer un fichier .bat - Guide
3 réponses
Bonjour,
le premier Dir doit etre avant Chaque While
etc........
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........
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 ....)
Michel
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