Enregistrement de 2 onglet en macro

ah, bon ! ouf, je respire !!!

Bonjour cjojo,

Screen.jpg

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

non c'est juste un test de chemin

oui, MFerrand m'a dit ensuite que c'est une simulation !

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.

re

MFerrand j'ai une erreur dans ton code il me dit que le chemin pour la facture n'existe pas

autre chose et c'est un impératif je dois choisir le dossier final

je m'explique tous les mois je génère plusieurs devis donc pour ressortir un devis pour modification ou la facture qui correspond c'est plus simple que de chercher dans un seul dossier

merci pour le temps que tu prends à chercher

le chemin doit plutôt être :

chD = "C:\Users\cjojo\forum\Downloads\simcity\"

bien sûr, à la place de ton pseudo cjojo, met ton vrai nom d'utilisateur : c'est celui qui apparaît sur l'écran de Bienvenue de Windows, lorsque tu démarres le PC et que ça se connecte à la session Windows.

voilà c'que c'est, d'jouer à SimCity au lieu d'faire sa compta ! on en oublie même jusqu'à son nom d'utilisateur !

(je blague, hein ? )

dhany

le chemin doit plutôt être :

chD = "C:\Users\cjojo\forum\Downloads\simcity\"

bien sûr, à la place de ton pseudo cjojo, met ton vrai nom d'utilisateur : c'est celui qui apparaît sur l'écran de Bienvenue de Windows, lorsque tu démarres le PC et que ça se connecte à la session Windows.

voilà c'que c'est, d'jouer à SimCity au lieu d'faire sa compta ! on en oublie même jusqu'à son nom d'utilisateur !

dhany

c'est ce que j'ai fait justement Dhany et pour le devis c'est ok il va bien dans dossier devis mais pour la facture j'ai une erreur vu qu'il me rajoute dans le chemin un dossier devis mais qui n'existe pas

voit le chemin qu'il fait : C:\Users\forum\Downloads\simcity\Devis\Facture et ce chemin n'existe pas sa devrait être : C:\Users\forum\Downloads\simcity\Facture

bon c'est du virtuel.

mais ma problématique reste toujours la même, je ne choisi pas le dossier, donc je continue à chercher.

merci encore

essaye avec le code VBA ci-dessous (non testé) :

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

dhany

C'est pas le même code que MFerrand ?

ah non ! regarde bien : j'ai ajouté la variable chn$ ; et regarde bien aussi son utilisation, sans confondre chD et chn !

dhany

ajout : regarde bien ces lignes :

Dim chD$, Fich$, chn$, f

chD = "C:\Users\forum\Downloads\simcity\"

chn = chD & f & "\"

.SaveAs chn & Fich


dans l'code VBA précédent, le bug était à cause de :

chD = chD & f & "\"

(enfin, il me semble)

dhany

Hello ! Une inattention de ma part ! Oublié de faire un retour aux sources !

Si la solution de Dhany convient, elle est tout à fait OK pour moi. L'autre possibilité était de placer la fin du chemin dans la variable Fich qui est composée intégralement dans la boucle.

Cordialement.

essaye avec le code VBA ci-dessous (non testé) :

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

dhany

Bonjour dhany

merci il fonctionne ton code

bon je ne peux pas choisir le dossier mais merci pour cette solution

Hello ! Une inattention de ma part ! Oublié de faire un retour aux sources !

Si la solution de Dhany convient, elle est tout à fait OK pour moi. L'autre possibilité était de placer la fin du chemin dans la variable Fich qui est composée intégralement dans la boucle.

Cordialement.

bonjour MFerrand merci encore pour ton implication

oui le code de Dhany fonctionne

je met en résolus

Bonjour cjojo, MFerrand,

tu a écrit :

le code de Dhany fonctionne

merci d'avoir confirmé que mon adaptation du code de MFerrand est ok.


tu a écrit :

je ne peux pas choisir le dossier

pour ça, il suffit de remplacer la ligne chD = "C:\Users\forum\Downloads\simcity\" par :

chD = InputBox("Saisir le chemin complet du dossier :", "Dossier")

l'utilisateur devra tout saisir : C:\Users\forum\Downloads\simcity ; puis ajout du code VBA : chD = chD & "\"

ou si tu préfères une partie gauche fixe :

chD = InputBox("Saisir le dernier dossier :", "Dossier")

l'utilisateur devra saisir seulement : simcity ; puis : chD = "C:\Users\forum\Downloads\" & chD & "\"

ATTENTION !

il faudra aussi ajouter le code VBA pour éviter qu'ça plante si l'dossier saisi par l'utilisateur n'existe pas !


tu a écrit :

je mets en résolu

mais c'est pas fait ! pour cela, il suffit de cliquer sur le bouton près de (regarde dans le coin haut droit du post) ; ça permet aussi de clôturer le fil de la discussion ; tu sauras que tu as réussi quand tu verras un petit rond vert avec une coche, comme ceci :

sujet

(toi seul peut le faire, car c'est toi qui a créé ce sujet)

dhany

Mais sur le titre du poste je l'ai l'icône vert

alors c'est ok : c'est tout bon !

merci de l'avoir fait !

dhany

Rechercher des sujets similaires à "enregistrement onglet macro"