Appliquer une macro à plusieurs fichiers
Bonjour
J’ai créé la macro ci-dessous (merci les tutos).
Elle fonctionne bien, mais l’utilisateur ne peux choisir qu’un seul fichier sur lequel appliquer cette macro.
Je souhaiterais si possible permettre à l’utilisateur de sélectionner 1 ou 2 ou même 10 fichiers ( qui sont présents dans le même classeur) puis que la macro s’exécute pour chaque fichier sélectionné.
Merci d’avance pour votre aide et si possible en m’expliquant les différents codes car je ne suis pas du tout du domaine de l’informatique mais comptable ( et oui personne n’est parfait
Macro créée :
Sub TestCréationonglet()
Dim Fichier As Workbook
ChoixFichier = Application.GetOpenFilename
Set Fichier = Workbooks.Open(ChoixFichier, , False) 'J'ouvre le fichier
'Création onglet
NOM_Ongletàcopier = InputBox("Quel onglet voulez vous copier ?") 'choix de l'onglet à copier
' Je vérifie que la cellule nom onglet et date arrêté soient remplies
If Workbooks("Macro_creation_onglet.xlsm").Sheets("Macro").Range("B2") = "" And Workbooks("Macro_creation_onglet.xlsm").Sheets("Macro").Range("C2") = "" Then
MsgBox ("Aucunes données pour créer l'onglet")
Exit Sub
Else
' Je verifie que le feuille que je souhaite créer n'existe pas déjà avec la fonction feuille existe
If Feuille_Existe(Workbooks("Macro_creation_onglet.xlsm").Sheets("Macro").Range("B2")) Then
MsgBox "L'onglet " & Workbooks("Macro_creation_onglet.xlsm").Sheets("Macro").Range("B2") & " existe déjà"
Exit Sub
Else
Date_Arrete = Workbooks("Macro_creation_onglet.xlsm").Sheets("Macro").Range("C2") 'valeur de la date d'arrêté
Fichier.Sheets(NOM_Ongletàcopier).Copy Before:=Fichier.Sheets(1) 'instruction pour copier l'onglet
Fichier.ActiveSheet.Name = Workbooks("Macro_creation_onglet.xlsm").Sheets("Macro").Range("B2") 'nommage de l'onglet créé
Fichier.ActiveSheet.Range("C3").Value = Date_Arrete ' modification de la date d'arrété
MsgBox ("L'onglet " & Workbooks("Macro_creation_onglet.xlsm").Sheets("Macro").Range("B2") & " a bien été créé")
End If
End If
If MsgBox("Voulez fermer le fichier ?", vbYesNo, "Demande de confirmation") = vbYes Then
Fichier.Close True
End If
End SubEdit modo : merci de mettre le code entre balises grâce au bouton </>
Merci
Bonjour C_Gwen
Dans un classeur il n'y pas de fichier ! Je suppose que tu veux parler d'onglet (de feuille) ?
Peux-tu préciser un peu ? Avec un petit fichier exemple (anonymisé forcément)...
Oups… décidément le langage informatique n’est pas mon fort 😉
je voulais dire choisir plusieurs fichiers dans un même dossier ( et non classeur )
Le but serais que l’utilisateur choisisse autant de fichiers qu’il veut ( ex fichier 1, fichier 2) qui sont dans le même dossier ( ex mon dossier) et que la macro écrite ci-dessus ( création d’1 onglet automatiquement ) s’effectue sur tous les fichiers choisis.
Est ce que je suis plus claire ?
Désolée de mon manque de connaissance 🙁
Bonjour C_Gwen
Pas de souci pour
Oups… décidément le langage informatique n’est pas mon fort 😉
Je commence à comprendre un peu mieux la demande...
Si je résume
- L'utilisateur sélectionne 1 ou plusieurs fichiers (donc classeur)
- Pour chaque classeur l'utilisateur sélectionne 1 ou plusieurs feuilles (les onglets d'un classeur)
- Après il faut "vérifier" certaines données sur les feuilles sélectionnées avant de les copier ?
Est-ce que ma vision de la chose est correcte ?
Alors c'est presque ça
mon code n'est peut être pas "trés propre" du coup..
1) L'utilisateur ouvre le fichier ( ou le classeur j'ai compris maintenant lol) " Macro Création Onglet" (je te joins ce fichier)
sur ce dernier il est sensé remplir les champs B2 (Nom onglet) et C2 (date arrêté) => obligatoire car sinon pas de création d'onglet (d'où vérification que ces champs soient remplis)
2) Ensuite lorsque l'utilisateur clique sur le bouton "créer l'onglet" :
- une boite dialogue s'ouvre afin que l'utilisateur choisisse 1 ou plusieurs fichiers ( qui sont tous présents dans le même dossier)
- et ensuite la macro se déroule cad qu'elle créée de façon automatique un onglet sur tous les fichiers sélectionnés
3) l'idéal serait de pouvoir créer autant de fichier que de cellule remplie ( B2 à B5) du fichier "Macro Création Onglet" mais j'ai abandonné cette idée
Merci pour ta patience Green SoftS
Bonjour C_Gwen
Ta logique de réalisation me parait un peu absconse !
Encore une fois passons et résumons :
- L'utilisateur ouvre un fichier (donc comme tu le dis si bien un classeur, mais peu importe la manière)
- L'utilisateur doit saisir le champ B2 (je suppose que champ veut dire cellule à l'intersection de B - en colonne - et 2 - en ligne)
- L'utilisateur doit saisir le champ C2 (même remarque)
- Cependant qu'en cas de non saisie, le classeur est considéré comme "non-valide"
Que faut-il faire dans ce cas ? - L'utilisateur clique sur le bouton "créer l'onglet"
Et il se passe quoi ?
J'ai tout bon ? jusqu'à ce stade au moins ?
Pour la logique effectivement, j'ai pris des petits bouts de codes a droite et a gauche que j'ai essayé de compiler .. sans doute pas la chose a faire mais ne connaissant pas du tout le VBA
Concernant ton récap Oui tout bon
Effectivement champs = cellule ( j'intègre le bon vocabulaire, désolée)
Bouton Créer l'onglet = Bouton pour faire appel a la macro
Cellule B2 = Nom du nouvel onglet (ou feuille) qui sera créer ( copie d'un onglet déjà existant)
Cellule C2 = Nouvelle valeur de la cellule C2 du nouvel onglet créer
=> en cas de non saisie des cellules B2 et C2:
- si l'utilisateur ne clique pas sur le bouton "créer l'onglet" alors il ne se passe rien (normal)
- si l'utilisateur clique sur le bouton "créer l'onglet" alors message d'erreur qui dit " Aucunes données pour créer l'onglet"
=> cellules B2 et C2 renseignées : exemple B2 = "032022" et C2 = "31/03/2022"
- L'utilisateur clique alors sur le bouton "créer l'onglet" qui fait appel a ma macro (dont le but est de créer une copie d'un onglet):
- je demande a l'utilisateur de choisir le fichier sur lequel il souhaite que la macro s'applique exemple Fichier 1
- je demande a l'utilisateur quel onglet il veut copier exemple "122021"
- je vérifie que l'onglet que je veux créer existe ou non : (dans mon exemple je veux copier la feuille 122021 et la renommée 032022 et modifié la date arrêté en mettant 31/03/2022)
- Si il existe alors message qui dit que "l'onglet 032022 existe déjà" et la macro soit s'arrêter
- Si il n'existe pas alors copie de l'onglet 122021 puis on le renomme 032022 et la valeur de la cellule C3 (date arrêté) est modifiée a 31/03/2022
- Ensuite message qui préviens "l'utilisateur que l'onglet 032022 a bien été crée"
- Puis nouveau message qui demande confirmation pour fermer le fichier
et ensuite j'avais l'intention de copier ce code plusieurs fois pour faire la même chose mais pour les cellules B3/C3; B4/C4 et B5/C5 pour au final créer 4 copies de la feuille choisie de façon rapide et sur plusieurs fichiers en même temps.
Bonjour C_Gwen
J'ai l'impression que ton vocabulaire progresse...
Arrêtons nous sur :
=> en cas de non saisie des cellules B2 et C2:
si l'utilisateur ne clique pas sur le bouton "créer l'onglet" alors il ne se passe rien (normal)
si l'utilisateur clique sur le bouton "créer l'onglet" alors message d'erreur qui dit " Aucunes données pour créer l'onglet"
Lorsque l'utilisateur clique sur ce bouton (alors que les données ne sont pas suffisantes)... Que doit-on faire ?
- Obliger l'utilisateur à corriger le problème ?
- Passer au fichier suivant ?
J’avais imaginé que si les données n’étaient pas suffisantes la macro allait « bugée » donc dans ma macro j’ai mis un message d’info ( msgbox aucunes données pour créer l’onglet) et ensuite j’arrête la macro. (Exit sub)
Car si cela ne fonctionne pas pour le premier fichier cela ne fonctionnera pas pour les autres non plus, étant donné que les valeurs de ces cellules ( dans notre exemple la B2 et C2) sont nécessaires. ( nom nouvelle feuille et valeur cellule date arrête)
Mais ma logique n’est peux être pas bonne 🤪😃
...
Je ne mets pas en doute la logique (la tienne qui est ce que tu souhaites/demandes)... Je disais juste "que faisons-nous" ?
Tu as répondu à la question :
Car si cela ne fonctionne pas pour le premier fichier cela ne fonctionnera pas pour les autres non plus, étant donné que les valeurs de ces cellules ( dans notre exemple la B2 et C2) sont nécessaires.
Le traitement s'arrête si (manifestement) l'utilisateur ne veut pas mettre à jour les données obligatoires (B2/C2)
Fort de ce point poursuivons alors...
Nous devons demander
- à l'utilisateur sur quel fichier il veut "travailler"
- à l'utilisateur sur quel onglet il veut "travailler"
- si il'onglet n'existe pas => nous devons le créer
- si l'onglet existe ALERTE ! et après ?
- à l'utilisateur sur quel fichier il veut "travailler" ok
- à l'utilisateur sur quel onglet il veut "travailler" je demande quel onglet copier ( juste pour préciser 🙂)
- si il'onglet n'existe pas => nous devons le créer ok
- si l'onglet existe ALERTE ! et après ? si il existe si possible message à l’utilisateur comme quoi l’onglet existe déjà et on passe à l’autre fichier
...
ce qui veut dire pour le point 2.2
si l'onglet existe ALERTE ! et après ? si il existe si possible message à l’utilisateur comme quoi l’onglet existe déjà et on passe à l’autre fichier
que nous devons "proposer/exécuter l'ouverture du fichier suivant" ?
Etc. Etc. ...
Je trouve finalement, ton code (ta logique) bien compliquée !
Pourquoi ne pas simplement :
- laisser l'utilisateur mettre à jour ses classeurs/onglets
- laisser l'utilisateur valider les (ses) mêmes éléments (quand il considère que tout est ok)
- proposer à l'utilisateur d'exporter ces (ses) données dès qu'il le souhaite (au regard du temps opportun forcément)
- ou mieux de lire soi-même l'ensemble des données de l'ensemble des classeurs (au regard du temps opportun forcément)
?
non pas de proposition particulière juste passer au fichier suivant.
En fait mon besoin en « français » est le suivant :
Dans mon équipe , j ai une dizaine de collaborateurs. Chacun a une multitude de fichiers à mettre à jour chaque trimestre.
Cette mise à jour ( actuellement) manuelle est de dupliquer l’onglet du trimestre dernier, le renommer et modifier une cellule et ça sur l’ensemble des fichiers ( environ 1200 fichiers en tout )
Vu le nombre de fichier c’est tres long et fastidieux à faire donc je cherche un moyen rapide le faire , d’où ma macro mais il vrai que n’ayant aucune notion de VBA j’ai peux être fait très compliqué et surtout pas du tout comme il faudrait.
Je ne vais pas te déranger plus longtemps si tu estimes que c’est pas ce qu’il faut faire…
Merci pour le temps que tu as passé à essayer de m’aider …. 👍
....
Vu le nombre de fichier c’est très long et fastidieux à faire donc je cherche un moyen rapide le faire , d’où ma macro mais il vrai que n’ayant aucune notion de VBA j’ai peux être fait très compliqué et surtout pas du tout comme il faudrait.
Je suis bien d'accord, d'autant plus que
tu n'est pas informaticien(ne) mais comptable !
Alors que je suis l'inverse !
Je ne vais pas te déranger plus longtemps si tu estimes que c’est pas ce qu’il faut faire…
Ce n'est pas du tout le propos, ni le dérangement ou le temps passé...
Ta vision de la chose est juste erronée (au sens pas informaticien du terme)... Je veux juste te faire comprendre que pour environ 1200 fichiers en tout il faut laisser le temps, le choix à l'utilisateur de faire et valider ses données. Ensuite nous "compilons" toutes ces données (en les vérifiant - éventuellement alertant les utilisateurs "fautifs) !
En somme, l'utilisateur ne fait pas (jamais - et toi non plus d'ailleurs) d'erreur, nous devons juste (toi et moi) nous adapter pour corriger ses maladresses !
PS/ Cpdt
Ce serait plus simple pour t'apporter toutes les améliorations sur ton souhait !
Encore merci ..
En pièce jointe un exemple de fichier "arrêté cpte xxxx", tu remarqueras qu'il existe plusieurs onglets a chaque fois nommé "MMAAAA" en fonction du trimestre.
Et j'ai donc environ 1200 fichiers.
A chaque début d'année, je viens dupliquer l'onglet du dernier trimestre, puis je le renomme et je modifie la cellule C3 et tout cela manuellement et pour les 1200 fichiers ( donc très très long tu t'en doutes)
Donc pour revenir a mon besoin (vraiment l'idéal de l'idéal), ca serait de pouvoir effectuer "cette manipulation" une fois pour tous les fichiers choisis ( par exemple je souhaite n'en faire que 50 sur 1200) et pour les trimestres choisis ( mais je ne sais pas si c'est possible)
Exemple :
- sur fichier 1 : je veux créer les onglets 032022, 062022 à partir d'une copie de l'onglet 122021et sur chaque nouvel onglet je modifie la valeur de la cellule C3 "date arrêté"
- sur fichier 2 : je veux créer les onglets 032022, 062022, 092022, 122022 à partir d'une copie de l'onglet 122021 et sur chaque nouvel onglet je modifie la valeur de la cellule C3"date arrêté"
c'est pour cela que j'avais créer le petit tableau de l'onglet macro du fichier "Macro création onglet" afin de récupérer le nom des onglets a créer (B2 à B5) et les nouvelles valeurs de la "date d'arrêté" (C2 à C5)
J'espère être plus précise,
j’ai réfléchi ( la nuit porte conseille )
si j’ai une macro qui me permet d’effectuer la manipulation sur les 1200 fichiers et pour les 4trimestres de l’année en une seule fois , je suis preneuse et cela me conviendra 😁
Merci
Bonjour C_Gwen
Je vais regarder tes fichiers, surtout que je comprends mieux maintenant ce que tu cherches réellement à faire et plus encore l'ampleur de la tâche que tu réalises actuellement "à la main" !
j’ai réfléchi ( la nuit porte conseille )
si j’ai une macro qui me permet d’effectuer la manipulation sur les 1200 fichiers et pour les 4trimestres de l’année en une seule fois , je suis preneuse et cela me conviendra 😁
C'est souvent le cas en effet (pour ce qui est de la nuit) et je confirme il faut absolument "automatiser" un peu tout cela ! C'était en somme le but de mes questions précédentes. Tenter de comprendre "quoi-faire", "quand-faire", "comment-faire"... Maintenant je vais pouvoir commencer à cogiter sur ton "exemple" d'hier !
Bonjour Green SoftS et surtout merci par avance.
Bonjour Green SoftS
As tu réussi et eu le temps pour trouver une solution à mon problème ?
Sinon ce n’est pas grave.


