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 Sub

Edit 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

  1. L'utilisateur sélectionne 1 ou plusieurs fichiers (donc classeur)
  2. Pour chaque classeur l'utilisateur sélectionne 1 ou plusieurs feuilles (les onglets d'un classeur)
  3. 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 :

  1. L'utilisateur ouvre un fichier (donc comme tu le dis si bien un classeur, mais peu importe la manière)
  2. L'utilisateur doit saisir le champ B2 (je suppose que champ veut dire cellule à l'intersection de B - en colonne - et 2 - en ligne)
  3. L'utilisateur doit saisir le champ C2 (même remarque)
  4. Cependant qu'en cas de non saisie, le classeur est considéré comme "non-valide"
    Que faut-il faire dans ce cas ?
  5. 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 ?

  1. Obliger l'utilisateur à corriger le problème ?
  2. 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

  1. à l'utilisateur sur quel fichier il veut "travailler"
  2. à l'utilisateur sur quel onglet il veut "travailler"
    1. si il'onglet n'existe pas => nous devons le créer
    2. si l'onglet existe ALERTE ! et après ?
  1. à l'utilisateur sur quel fichier il veut "travailler" ok
  2. à l'utilisateur sur quel onglet il veut "travailler" je demande quel onglet copier ( juste pour préciser 🙂)
    1. si il'onglet n'existe pas => nous devons le créer ok
    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

...

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.

Bonjour C_Gwen,

J'ai effectivement regardé tes classeurs !

Pourrions-nous récapituler "comme je comprends" ?

1) Tu as...

capture 20220609 001

2) Tu veux :

capture 20220609 002

3) Selon...

capture 20220609 003
Rechercher des sujets similaires à "appliquer macro fichiers"