Enregistrement de 2 onglet en macro

Bonsoir,

je viens vers vous parce que je suis bloquer sur une macro sur mon classeur. J'ai parcourus le web pour cette astuce mais j'ai rien trouvé.

je ne sais pas si on peux le faire aussi.

mon problème, j'ai un classeur avec plusieurs feuilles, ce que je veux c'est enregistrer 2 feuilles bien précise.

la première feuille se nomme Devis et la deuxième Facture, ce que je voudrais faire c'est quand j' enregistre le devis via une macro ou je lui dis dans quelle dossier le faire, je voudrais faire la même chose pour la feuille facture qui n'est pas active.

voici ma macro pour la feuille devis

macro

'Macro enregistrement
Dim extension As String
Dim CheminDossier As String
Dim Chemin As String
Dim style As Integer

Application.ScreenUpdating = True
ThisWorkbook.ActiveSheet.Copy
extension = ".xlsx"
CheminDossier = Application.InputBox("Dossier Enregistrement :", "Devis")
Chemin = "Z:\Alfitel\Devis" & "\" & CheminDossier & "\"
NomFichier = ActiveSheet.Range("C19") & "_" & Range("E19") & "_" & Range("J2") & extension
With ActiveWorkbook
    .ActiveSheet.Buttons.Delete
    .SaveAs Filename:=Chemin & NomFichier
    .Close
End With

je vous joint aussi mon classeur, je suis avec office 2019

merci d'avance pour vos réponse

32exemple.xlsm (129.27 Ko)

Bonsoir,

la première feuille se nomme Devis et la deuxième Facture, ce que je voudrais faire c'est quand j' enregistre le devis via une macro ou je lui dis dans quelle dossier le faire, je voudrais faire la même chose pour la feuille facture qui n'est pas active.

Quel est le problème ? Les feuilles ont des noms !

Sub xxxx()
    'déclarations
    'instructions
    For  Each f In Array("Devis", "Facture")
        Worksheets(f).Copy
        'instructions
    Next f
End Sub

et tu fais une boucle sur la partie copie + enrregistrement pour ne pas avoir à répéter bêtement les mêmes instructions !

NB- Le code cité dans un post est à mettre sous balises Code, comme ci-dessus, afin d'éviter de fatiguer inutilement les intervenants qui prennent la peine de le lire.

NB2- Je ne l'ai d'ailleurs pas lu, j'ai pris les noms de feuille dans ton commentaire cité. J'espère qu'il fonctionne selon tes souhaits.

NB3- J'ai tout de même pris la peine d'ouvrir ton fichier pour tenter de voir comment se présentait le code dans le Module. Mais quand j'ai vu 5 modules standard j'ai tout refermé ! Je doute que ton code justifie plus d'un Module, multiplier les modules n'aboutit qu'à créer de l'encombrement et ralentir le travail sur le code, outre surcharger inutilement le classeur. On n'ajoute un module que si justifié par la nature de code qui conduit à l'isoler du code tout-venant du projet.

Cordialement.

edit : pour la boucle que j'ai codé ci-dessus, inhabituelle en ce sens que c'est une boucle sur les éléments d'un tableau, la variable f doit être de type Variant, soit non typée (toute variable non typée est de type Variant).

Bonjour cjojo et bienvenue sur le forum,

à tester,

Sub enregister_Devis_Facture()
Dim extension As String
Dim CheminDossier As String
Dim Chemin As String
Dim style As Integer
Dim n As Integer

feuille = Array("Devis", "Facture")
extension = ".xlsx"
CheminDossier = Application.InputBox("Dossier Enregistrement :", "Devis")
Chemin = "Z:\Alfitel\Devis" & "\" & CheminDossier & "\"

For n = LBound(feuille) To UBound(feuille)
    Sheets(feuille(n)).Copy
    NomFichier = feuille(n) & ActiveSheet.Range("C19") & "_" & Range("E19") & "_" & Range("J2") & extension

    With ActiveWorkbook
    .ActiveSheet.Shapes(1).Delete
    .SaveAs Filename:=Chemin & NomFichier
    .Close
    End With
Next
End Sub

bonjour,

merci à vous deux pour vos réponse.

MFerrand pour les modules sur le fichier c'est un classeur test pour l'instant, mais je prends note de ton commentaire.

concernant mon poste je le serais pour la prochaine fois

je test et je vous dis sa

bonjour à tous

sans VBA

https://forum.excel-pratique.com/viewtopic.php?f=3&t=114388

facile

bonne journée à tous

bonjour,

j'ai fais un test sur les deux code dit plus haut et sa prend bien en compte les feuilles dite (Devis et Facture), mais sa ne va pas sur les 2 dossiers voulu. l'enregistrement facture écrase fichier Devis, alors que je lui donne un chemin différent

je pense que je me suis mal exprimer

je redis ce que je voudrais faire

la feuille dit Devis doit être enregistrer dans un dossier Devis : exemple C:\dossier1\Downloads\ et la je lui dis de se mettre dans Devis

et pour la feuille Facture de s'enregistrer dans Facture mais un dossier différent : exemple C:\dossier1\Downloads1\ et la je lui dis de se mettre dans Facture

pour infos et je pense que j'aurais du le dire dans mon premier poste, je fais du VBA en apprenant sur le web comme un autodidacte et jamais appris via des cours

merci encore pour vos réponse

bonjour à tous

sans VBA

https://forum.excel-pratique.com/viewtopic.php?f=3&t=114388

facile

bonne journée à tous

merci de ta réponse, je regarde sa et reviens vers toi

pour infos et je pense que j'aurais du le dire dans mon premier poste, je fais du VBA en apprenant sur le web comme un autodidacte et jamais appris via des cours

re

apprends Excel d'abord

les Tableaux, les TCD et leurs subtilités, Power Query, Power BI desktop gratuit

dans 1 an tu te lanceras dans VBA (mais tu n'en auras plus besoin)

si tu veux programmer, apprends Python ou C++

amitiés

@jmd

ton addition n'est pas correcte ! c'est : « C + VBA »

dhany

bonjour à tous

sans VBA

https://forum.excel-pratique.com/viewtopic.php?f=3&t=114388

facile

bonne journée à tous

re,

j'ai regarder ton fichier, il est super mais il ne me convient pas à se que je voudrais faire avec le mien quand il sera fini

merci encore

pour infos et je pense que j'aurais du le dire dans mon premier poste, je fais du VBA en apprenant sur le web comme un autodidacte et jamais appris via des cours

re

apprends Excel d'abord

les Tableaux, les TCD et leurs subtilités, Power Query, Power BI desktop gratuit

dans 1 an tu te lanceras dans VBA (mais tu n'en auras plus besoin)

si tu veux programmer, apprends Python ou C++

amitiés

merci pour ton conseil, mais c'est pas à une personne d'un certain age qu'on va lui dire de retourner à l'école, voila pourquoi j'apprends et demande des conseils sur internet.

mais je retiens ton conseil bien évidement

Bonjour, Salut à tous !

Pour ma part, je n'ai proposé qu'une boucle, laissant à ta charge l'ensemble des instructions de prédéfinition des paramètres et de réalisation de l'enregistrement proprement dit.

Remets le code que tu signales non fonctionnel (sous balises Code ) et indique les chemins des dossiers d'enregistrement exact pour chacune des deux feuilles, de même que les noms à donner aux deux fichiers ou la façon dont ils doivent être composés. Il ne faut rien de plus pour coder l'opération.

Cordialement.

Bonjour, Salut à tous !

Pour ma part, je n'ai proposé qu'une boucle, laissant à ta charge l'ensemble des instructions de prédéfinition des paramètres et de réalisation de l'enregistrement proprement dit.

Remets le code que tu signales non fonctionnel (sous balises Code ) et indique les chemins des dossiers d'enregistrement exact pour chacune des deux feuilles, de même que les noms à donner aux deux fichiers ou la façon dont ils doivent être composés. Il ne faut rien de plus pour coder l'opération.

Cordialement.

voici met modif de mon code que je test

Sub EnregDevis_Facture() 'Macro enregistrement devis & facture
Dim extension As String
Dim CheminDossier As String
Dim Chemin As String
Dim CheminDossier1 As String
Dim Chemin1 As String
Dim style As Integer
Dim n As Integer

feuille = Array("Devis", "Facture")
extension = ".xlsx"
CheminDossier = Application.InputBox("Dossier Enregistrement :", "Devis")
Chemin = "C:\Users\forum\Downloads\simcity\test" & "\" & CheminDossier & "\"
CheminDossier1 = Application.InputBox("Dossier Enregistrement :", "Facture")
Chemin1 = "C:\Users\forum\Downloads\simcity\test1" & "\" & CheminDossier & "\"

For n = LBound(feuille) To UBound(feuille)
    Sheets(feuille(n)).Copy
    NomFichier = feuille(n) & "_" & ActiveSheet.Range("C19") & "_" & Range("E19") & "_" & Range("J2") & extension

    With ActiveWorkbook
    .SaveAs Filename:=Chemin & NomFichier
    .Close
    End With
Next
End Sub

bon je ne sais pas si c'est correct de faire sa mais je fais plusieurs test différent

1) avec celui là il fait bien l'enregistrement mais dans le même dossier du 1er chemin et non pas dans les chemin que je lui donne pour chaque feuille

2) pour le nom du fichier c'est ok

je vois bien qu'il manque CheminDossier1 et Chemin1 quelque part

Tes chemins sont prédéfinis, au moins pour l'essentiel... Alors pourrais-tu écrire in-extenso le chemin d'enregistrement de chacun des fichiers que l'on puisse revenir à des choses simples, éliminer tes InputBox, ton ActiveSheet qui persiste !!!, bref écrire un code clair et compréhensible au lieu de cette bouillie...

Cordialement.

Tes chemins sont prédéfinis, au moins pour l'essentiel... Alors pourrais-tu écrire in-extenso le chemin d'enregistrement de chacun des fichiers que l'on puisse revenir à des choses simples, éliminer tes InputBox, ton ActiveSheet qui persiste !!!, bref écrire un code clair et compréhensible au lieu de cette bouillie...

Cordialement.

re MFerrand

que veux tu dire par in-extenso le chemin d'enregistrement ?

pour le InputBox : je ne peux pas le supprimer, je m'explique dans chaque dossier devis ou facture j'ai des dossier pour chaque mois de l'année

exemple d'un chemin : C:\Users\forum\Downloads\ puis j'ai 12 dossier (janvier à décembre) et dans le inputBox je lui met dans quelle dossier mois je veux enregistrer

et pour le ActiveSheet : je ne comprend pas non plus

désoler pour mon incompréhension et merci pour tes réponse

C'est pourtant simple !

La feuille à enregistrer c'est soit "Devis" soit "Facture", cela l'identifie pleinement, et sûrement ! Tu oublies donc la feuille active (ActiveSheet), qui change et dont on n'a ainsi pas à se préoccuper des changements.

Bref ! Il suffit de savoir ce qu'on veut enregistrer, on le dit et on le fait ! Quoi de plus simple ?

Le chemin !

Supposons donc ton début de chemin : C:\Users\forum\Downloads\. Cette partie du chemin est donc fixe.

Ensuite vient un dossier indiquant le mois ! Ce mois est-il différent de celui de la date du devis ou de la facture ?

Ce ne serait guère logique ! La date figure en I3. On l'introduira donc simplement par MonthName(.....Range("I3")).

Et après ? Il me semblait que tu différenciais les dossiers Devis et Facture, ce qui n'apparaît plus ???

Ce dossier là dépend de la feuille enregistrée, il peut donc être déduit...

Dans ta configuration, s'il y a obtacle à procéder à la composition automatique des parties variables du chemin, c'est une conception défectueuse, et c'est à ce niveau qu'il faut alors rectifier...

Et dans les cas où l'on ne pourrait composer le chemin ainsi, on utilise GetSaveAsFilename ou une DialogBox... un des dispositifs permettant d'indiquer le dossier choisi en navigant sur le disque. On ne se met pas à la merci de la moindre faute de frappe dans une InputBox !

Cordialement.

C'est pourtant simple !

La feuille à enregistrer c'est soit "Devis" soit "Facture", cela l'identifie pleinement, et sûrement ! Tu oublies donc la feuille active (ActiveSheet), qui change et dont on n'a ainsi pas à se préoccuper des changements.

Bref ! Il suffit de savoir ce qu'on veut enregistrer, on le dit et on le fait ! Quoi de plus simple ?

Le chemin !

Supposons donc ton début de chemin : C:\Users\forum\Downloads\. Cette partie du chemin est donc fixe.

Ensuite vient un dossier indiquant le mois ! Ce mois est-il différent de celui de la date du devis ou de la facture ?

Ce ne serait guère logique ! La date figure en I3. On l'introduira donc simplement par MonthName(.....Range("I3")).

Et après ? Il me semblait que tu différenciais les dossiers Devis et Facture, ce qui n'apparaît plus ???

Ce dossier là dépend de la feuille enregistrée, il peut donc être déduit...

Dans ta configuration, s'il y a obtacle à procéder à la composition automatique des parties variables du chemin, c'est une conception défectueuse, et c'est à ce niveau qu'il faut alors rectifier...

Et dans les cas où l'on ne pourrait composer le chemin ainsi, on utilise GetSaveAsFilename ou une DialogBox... un des dispositifs permettant d'indiquer le dossier choisi en navigant sur le disque. On ne se met pas à la merci de la moindre faute de frappe dans une InputBox !

Cordialement.

désoler mais je reviens de lire mon message et je me suis tromper dans des explication et je pense que je m'explique mal de ce que je voudrais faire avec ma macro

donc je reprend tous mes explication en espèrent qu'elle sont plus claire.

mon chemin pour les feuilles est le suivant

pour le devis : C:\Users\forum\Downloads\simcity\Devis puis je choisi le dossier pour le mois

pour la facture C:\Users\forum\Downloads\simcity\Facture puis je choisi le dossier pour le mois

donc je voudrais faire c'est quand je fait enregistrement sur le bouton il enregistre chaque feuille dans l'emplacement choisi au même temps, vu que que mon devis remplie ma feuille facture avec le même N°, comme sa la facture correspond au devis et une fois le devis accepter j'ai juste à imprimer la facture

pour le nom de fichier : Devis et Facture c'est : le nom de la feuille_cellule C19 _cellule E19_cellule I2 et extension

les cellule corresponde à :

cellule C19 = nom, E19 = vague et I2 = la date

bon je pense que la sur mes explication je ne suis pas tromper

MFerrand je te remercie encore pour le temps que tu prends à m'expliquer

Bonjour cjojo,

screen

tu mets tes devis et factures dans le dossier du jeu simcity ??? !!!

même si c'est dans C:\Users\forum\Downloads\ it's shocking !

dhany

Je te suis : plus question de Mois, et sous réserve de I2 qui ne correspond pas, la date étant en J3, je conserve donc J2 qui était indiqué antérieurement et correspond au numéro de devis et facture. Donc :

Sub EnregDevis_Facture()
    Dim chD$, Fich$, f
    chD = "C:\Users\forum\Downloads\simcity\"
    For Each f In Array("Devis", "Facture")
        With Worksheets(f)
            chD = chD & f & "\"
            Fich = f & "_" & .Range("C19") & .Range("E19") & "_" & .Range("J2") & ".xlsx"
            .Copy
        End With
        With ActiveWorkbook
            .SaveAs chD & Fich
            .Close
        End With
    Next f
End Sub

Avant boucle on définit la partie commune du chemin.

On initialise la boucle (je préfère la boucle ci-dessus car raccourcit le code, et évite une variable supplémentaire), et dans la boucle, donc pour chacun des éléments "Devis" ou "Facture" :

  • on complète le chemin (on ajoute le dernier dossier, soit Devis soit Facture),
  • on définit le nom du fichier (selon la feuille),
  • on copie la feuille concernée dans un nouveau classeur,
  • on enregistre et ferme ledit classeur.

Cordialement.

Hello Dhany ! C'est une simulation...

Rechercher des sujets similaires à "enregistrement onglet macro"