Créer plusieurs boucles While dans un module
fabkiller78
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
fabkiller78 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
fabkiller78 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
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
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte gmail - Guide
- Créer un compte instagram sur google - 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