Macro pour ouvrir un onglet modèle en fonction de la valeur d'une cellule

Bonjour à tous, je suis assez nouvelle sur excel (j'utilise Excel 365), et n'ai pas de connaissance sur les macros. J'ai essayé de faire des recherches de mon côtés mais ce que j'ai trouvé ne correspond pas tout à fait à mon exemple et comme je ne connais pas les macros, je suis bloquée .

Contexte : j'ai besoin de créer une macro excel qui m'ouvre un onglet "modèle" pré-rempli en fonction de la référence sélectionnée dans la liste.

=> Je vous met en PJ un exemple type :

Dans la colonne AB, j'ai mis la liste des différentes références de produits possibles, ce qui me sert ed base données pour la liste de choix de la cellule C14. Chaque référence produits a son propre modèle pré-rempli (avec les cibles spécifiques), un exemple de modèle pré-rempli est la fuille "Exemple ABCDEFGH_XXX-5555". Les feuilles modèles ne sont pas sur cet excel mais dans d'autres excels.

Ce dont j'ai besoin c'est d'une macro avec un bouton qui me permettent d'ouvrir la feuille modèle correspondant à la référence produit sélectionnée dans C14. Il faut aussi que la feuille ajoutée grâce à la macro reste dans le fichier si je choisis une nouvelle référence pour ouvrir la feuille modèle associée.

Je ne sais pas si je suis asez claire, en tout cas, merci de votre aide

25exemple-type.xlsm (20.77 Ko)

Bonjour,

Voici une macro qui devrait répondre à ta question :

Sub Macro2()
    onglet = Range("B14")
    Sheets("Exemple " & onglet).Select
End Sub

Evidemment il faut que l'onglet correspondant existe, sinon il faut le créer

Sub Macro4()
    onglet = Range("B14")
     Sheets.Add After:=ActiveSheet
    Sheets("Feuil2").Name = onglet
End Sub

Bonjour et bienvenue,

Si les feuilles de références sont dans d'autres fichiers, deux solutions :

  • La première (que je préfère) c'est de les regrouper (copier/coller) dans ce classeur. Et de les masquer. Cela rend le code plus facile, et surtout moins sujet à des bugs si vous déplacez les autres fichiers par exemple.
  • Sinon, il va falloir préciser comment trouver ces modèles de référence. Sont-ils tous dans le même dossier ? (si oui, lequel ?) Ont-ils le même nom que la référence ? (Si non, comment les identifier ?)

Voilà, à part ça ce n'est pas très difficile, mais étant débutante je pense que vous cherchez davantage une solution fonctionnelle (auquel cas nous avons besoin de ces informations), plutôt que des conseils de programmation.

Bonjour Boulette90,

Une proposition basée sur une feuille paramètres contenant la déclaration des modèles et des classeurs les contenant (chemin d'accès et nom du classeur). Le code est contenu dans le module "MOD_AjoutModeles" et est commenté. Je t'ai joint les 2 fichiers modèles que j'ai utilisé pour tester, il faudra actualiser les chemins dans l'onglet "Paramètres".

15modeles-1.xlsx (15.94 Ko)
24modeles-2.xlsx (8.70 Ko)

Cdlt,

Cylfo

Bonjour à tous,

Déjà merci de vos réponses rapides ! J'ai tenté de mettre en application la solution proposée par Cylfo car cela me semblait être la plus pratique au vu du rangement des feuilles modèles dans différents dossiers.

J'ai donc mis dans le tableau de l'onglet "Paramètres" le chemin d'accès des dossiers sous la forme suivante : Serveur:\NomDossier1\NomDossier2\NomDossier3\NomDossier4\NomDossier5\NomFichierModèlePrérempli.xlsm => Ce qui reprend l'arborescence de rangement des dossiers modèles

Cependant, cela ne fonctionne pas et un message d'erreur s'affiche me disant que le fichier est introuvable, pourtant le fichier existe bien à l'endroit indiqué. Puis un autre message d'erreur s'affiche me disant que plusieurs raisons possibles :

- Nom du fichier ou chemin d'accès n'existe pas ; Fichier actuellement utilisé par un autre programme ; Le classeur que vous essayez d'enregistrer porte le même nom qu'un classeur actuellement ouvert.

Possiblement je pourrais mettre toutes les feuilles modèle dans l'excel de base et les masquer comme proposé, pour simplifier le code. Dans ce cas, les feuilles modèles porteraient le nom de la réf produit. Comment dois-je procéder avec cette configuration ?

Bonjour,

Oui c'est normal, VBA ne gère pas bien (pas du tout ?) la lecture des fichiers sur le réseau. C'est plutôt adapté pour travailler avec votre arborescence locale.

Mais bon, comme c'est possible de travailler en ayant les feuilles dans le fichier ce sera beaucoup plus simple. Cela demandera certainement un peu plus de travail de votre part pour "tenir à jour" les modèles mais : c'est aussi semi-automatisable, et c'est gérable manuellement si j'imagine/j'espère qu'ils ne sont pas mis à jour trop souvent.

Je vais voir ce que je peux proposer, peut-être que @Cylfo adaptera la sienne, et comme ça vous pourrez nous faire un retour.

Re,

@saboh12617,

Oui c'est normal, VBA ne gère pas bien (pas du tout ?) la lecture des fichiers sur le réseau.

Pourtant je l'utilise fréquemment sans rencontrer de problème, en utilisant de préférence les noms UNC plutôt qu'une référence à un lecteur qui peut, d'un poste à un autre, être différent. Je dirai même heureusement que cela fonctionne car en entreprise, l'utilisation des serveurs est assez répandue .

@Boulette90,

Dans le nom d'exemple de chemin que vous indiquez "Serveur:\NomDossier1\NomDossier2\NomDossier3\NomDossier4\NomDossier5\NomFichierModèlePrérempli.xlsm", si "Serveur:" identifie une lettre de lecteur comme semble l'indiquer le caractère ":", il faudrait remplacer cette lettre par le nom du serveur et de la ressource montés sur ce lecteur "\\Serveur\Ressource\". Il est possible que la connexion au lecteur ne soit pas ou plus active au moment de l'utilisation de la macro, en tout cas c'est un problème que je rencontrai souvent d'utilisation des noms UNC.

Si c'est déjà un nom de lecteur UNC que vous utilisez, j'expliquerai plus en détail le fonctionnement de la macro pour vérifier que je n'ai pas mal interprété la demande.

Cdlt,

Cylfo

Bonjour @Cylfo,

Je viens de retenter en mettant la nomenclature suivante :

\\Nomserveur\Dossier1\Dossie2\Dossier3\Dossier4\Dossier5\NomModèle.xlsm

Mais cela ne fonctionne pas non plus, le message d'erreur "impossible d'ouvrir le fichier spécifié" s'affiche.

Bien cordialement et merci de votre suivi ;)

Boulette

Bonjour @Cylfo,

Je viens de retenter en mettant la nomenclature suivante :

\\Nomserveur\Dossier1\Dossie2\Dossier3\Dossier4\Dossier5\NomModèle.xlsm

Mais cela ne fonctionne pas non plus, le message d'erreur "impossible d'ouvrir le fichier spécifié" s'affiche.

Bien cordialement et merci de votre suivi ;)

Boulette

Re,

Tu testes à partir des fichiers que j'ai envoyés ?

Si ce n'est pas le cas, peux tu :

  1. copier dans un même dossier réseau les 3 fichiers que j'ai envoyés (débloquer le contenu si nécessaire)
  2. ouvrir le fichier "copie-de-exemple-type.xlsm" et dans l'onglet "Paramètres", indiquer dans la colonne "Classeur" le chemin d'accès et le nom des fichiers modèles.
  3. sauvegarder et tester le bouton "Ajouter feuille modèle".
  4. toujours les mêmes erreurs ?

Bonjour à tous,

@Cylfo, désolée du retour tardif, j'ai eu un autre pb excel (que j'ai su résoudre seule !!).

j'ai tenté de faire la manip comme tu l'as proposé avec tes excels en utilisant la nomenclature \\Nomserveur\Dossier1\Dossier2\dossier3\Dossier4\Modeles-1.xlsx dans la colonne classeur de l'onglet "Paramètres"

Les 3 excels sont rangés dans le même dossier "Dossier4".

Les mêmes messages d'erreurs s'affichent.

Si trop complexe, est-ce que tu aurais une proposition de macro si je mets tous les onglets modèles (25 références produits donc 25 onglets) dans le même excel ? (oui oui, je suis vraiment une quiche en macro et VBA)

Vraiment merci d'avance,

Bien cordialement,

Boulette

Bonjour,

Je ne comprends pas ... j'ai fait le test et cela fonctionne. J'aimerai que tu fasses une dernière vérification, copies l'équivalent d'un des chemins indiqués sans inclure le nom du fichier (\\Nomserveur\Dossier1\Dossier2\dossier3\Dossier4) puis colles ce chemin dans la barre d'adresse de l'explorateur de fichiers et valide (touche Enter).

Es-tu sur le dossier attendu ?

  • Si oui, tu vois bien les 3 fichiers ?
  • Si non, tu as un message d'erreur t'indiquant que "Windows ne parvient pas à trouver ..." ?

Sinon, pour répondre à ta question, si les 25 onglets sont dans un classeur différent de celui dans lequel il faut les copier, le problème sera identique et si ils sont dans le même ... c'est plus simple mais les maintenir ne sera pas des plus facile (fort risque de devoir maintenir plusieurs fichiers avec le risque d'introduire des différences entre les mêmes modèles et la notion de modèle perd vraiment de son sens).

Cdlt,

Cylfo

Bonjour @Cylfo,

Je t'avoues que j'ai un peu laissé tomber l'idée de faire des liens entre les dossiers de rangement des modèles vierges et ai remis tous les modèles dans un seul classeur excel. J'ai bien pris soin que les onglets portent le même nom que les références produits de la cellule B14.

J'ai donc tenté d'enregistrer une macro pour la modifier et la rendre "adaptable" et cela sans succès. Voici ma macro :

image

Je ne comprend pas ce qui ne marche pas

Bonjour,

Tu veux :

  • faire une copie d'un onglet modèle contenu dans un classeur source regroupant tous tes modèles vers un classeur cible ? il existe donc 2 classeurs, l'un avec les modèles et l'autre, le classeur de travail, qui copiera des modèles en fonction des besoins. Je pense que c'était plus ou moins ta demande initiale
  • à partir d'un seule classeur de travail contenant tous les modèles, juste rendre visible les onglets nécessaires ? A priori ta demande ci-dessous.
    • voir fichier joint. Les onglets "modèle" sont masqués, la macro affiche l'onglet sélectionné s'il n'est pas déjà affiché.

Dans ta macro, il ne faut pas faire référence à "B14:C14" mais uniquement à "B14" qui est la première cellule fusionnée ou utiliser le nom donné aux 2 cellules fusionnées (V_MODELE dans le fichier exemple Sheets(Range("V_MODELE")).Visible = True).

Sinon sans vouloir trop insister , si tu peux faire le test que je proposais et m'indiquer le résultat ...

Cdlt,

Cylfo

Bonjour Cylfo et merci de ta réactivité,

Juste avant de voir ton message, j'avais touché à la macro et avait modifié comme suit :

image

Maintenant cela fonctionne !

Concernant le test de la recherche dossier, cela indique un message d'erreur comme quoi le fichier est introuvable effectivement

Merci beaucoup,

Boulette

Re,

Donc nous sommes proches du but , la version que je t'ai communiquée initialement fonctionne mais c'est le chemin qui est incomplet comme je le supposais.

Pour obtenir le chemin correct, à savoir le nom du serveur ET la ressource associée :

  • Dans l'explorateur de fichiers : à côté de la lettre du lecteur où se trouve tes fichiers il est peut-être indiqué X: (\\Serveur\NomDeLaressource) (ou une indication approchante, là je ne suis pas sur réseau). Si c'est le cas il faut juste que tu complètes tes chemins (en reprenant ton exemple) comme ci-dessous :
    • \\Nomserveur\NomDeLaressource\Dossier1\Dossier2\dossier3\Dossier4\Modeles-1.xlsx
  • Si cela n'apparait pas :
    • Touche Microsoft (le drapeau) + R qui va t'ouvrir la fenêtre "Exécuter"
    • Indiques cmd si ce n'est pas déjà renseigné et valide [OK]
    • dans la fenêtre (de commandes DOS) qui s'ouvre, tu saisis NET USE et tu valides (touche entrée)
    • dans la liste repères le lecteur concerné et notes le serveur et la ressource associée
    • tapes exit et valides pour quitter la fenêtre de commande DOS
    • dans le fichier Excel mets à jour les chemins comme indiqué au point précédent et testes
    • ne pas dupliquer les modèles dans plusieurs classeurs est nettement plus propre et les modèles sont plus faciles à maintenir car il n'y a qu'un seul modèle à actualiser.

Cdlt,

Cylfo

Rechercher des sujets similaires à "macro ouvrir onglet modele fonction valeur"