Copier-renommer-enregistrer

Bonjour les forumiens

Je me résous à vous demander de l'aide même si cela va paraître banal pour certains d'entre vous

Dans mon fichier ci-joint

10bon.xlsm (24.89 Ko)

une personne sera chargée de remplir le tableau (saisie libre et liste déroulante).

Une fois rempli, je voudrais que via un bouton "Valider", la feuille "DR" soit copiée dans un autre classeur. Cet autre classeur doit porter le nom du client qui est situé en B3 de la feuille "DR".

Le must serait que ce nouveau classeur soit enregistré automatiquement et pourquoi pas envoyé par mail automatiquement

Bon pour l'instant je n'ai pu bricoler qu'une bribe de macro dans le module 1 mais qui me renvoie l'erreur : "erreur d'exécution '9' l'indice n'appartient pas à la sélection"

Merci d'avance pour votre aide

Bonjour,

Voir commentaires,

Sub CopierUneFeuilleDunClasseurDansLautre()
    '???????????????????????????????????????????? => Variables non déclarées : déclarer et typer ses variables, ici !
    FichierOùCopier = ActiveWorkbook.Name 'S'il s'agit du classeur qui contient la macro, on l'atteint toujours partout avec ThisWorkbook, donc inutile d'affecter son nom à une variable, ni de l'affecter à une variable classeur...
    Application.Workbooks.Add 'Si pour y placer une copie de feuille, INUTILE ! La méthode Copy de Worksheet, sans paramètre insère la copie dans un nouveau classeur, qui ne contiendra que la copie, donc sans surprise...
    FichierOùColler = ActiveWorkbook.Sheets("DR").Range("B3").Name 'Après ajout de classeur, le classeur actif est le classeur ajouté, qui ne possède sûrement pas de feuille "DR" ! [d'où erreur 9 !!!] Ensuite, es-tu sûr que ta plage-cellule B3 a un nom !! Encore une erreur potentielle en perspective....
    Workbooks(FichierOùCopier).Activate 'Pour un code qui se respecte et soit un minimum efficace, il faut bannir Activate, Select ou Selection etc. quand ce n'est pas la dernière commande (destinée à afficher le résultat à l'utilisateur) après laquelle on ne fait plus rien.
    Sheets("DR").Select 'Même commentaire, cascade de sélection = code approximatif à proscrire...
    Sheets("DR").Copy after:=Workbooks(FichierOùColler).Sheets(2) 'Déjà commenté, mais notons qu'on en est à la 3e ligne pour copier, alors qu'une aurait suffi !

End Sub

Complément :

    Worksheets("DR").Copy

ligne suffisante au démarrage pour créer la copie dans un nouveau classeur, lequel devenant classeur actif, on l'affecte une variable Workbook pour pouvoir ensuite le manipuler, le sauvegarder (pour le nommer), le fermer, etc.

Cordialement.

36bon.xlsm (28.31 Ko)

Bonjour

En fouillant un peu partout sur le web et en utilisant l'enregistreur de macro j'ai réussi à bidouiller une macro qui fonctionne partiellement :

  • elle copie le classeur vers un répertoire donné, avec le nom désiré.
  • elle ferme la copie créée
  • par contre elle n'exécute pas la dernière partie de la macro, à savoir sur le fichier d'origine ("Demande + Bon") qui reste ouvert, elle ne m'efface pas le contenu de certaines cellules comme je le demande via clearcontents. Et je n'ai aucun message d'erreur. J'ai juste le message "voulez-vous sauvegarder les modifications apportées à "Demande + Bon"?". Or moi je veux que certaines cellules sur "Demande + Bon" soit effacées, puis que le classeur "Demande + Bon" s'enregistre (avec les cellules vidées), puis qu'il se ferme.
Merci pour votre aide sur ce denier point

36bon.xlsm (28.31 Ko)

je vois que mes commentaires et explications sur ton code précédent t'ont laissé de marbre !

Je te laisse poursuivre dans la même voie...

MFerrand a écrit :

je vois que mes commentaires et explications sur ton code précédent t'ont laissé de marbre !

Je te laisse poursuivre dans la même voie...

Pas du tout, au contraire ils m'ont incité à chercher à comprendre. Et si tu as bien lu mon 2e message, mon fichier se copie et se renomme correctement à présent, c'est une autre partie de la macro qui coince.

Rechercher des sujets similaires à "copier renommer enregistrer"