Code VBA "save" et "saveAS" problème

Bonjour,

J'ai créé un bouton sur excel qui me permet d'enregistrer un fichier en PDF et en même temps de l'enregistrer sous excel.

Mais mon soucis c'est que:

1) le pdf s'enregistre au bon endroit mais le fichier excel lui ce range dans "mes documents".

2) Quand je clic sur le bouton:

Veux tu enregistrer sous excel? ==> 2 options "oui" ou "non" ==>si je clic sur "oui, et qu'a un autre moment je reprend la procédure avec le même bouton il me fait "débogage". donc je peux pas enregistrer en pdf car il a déjà enregistrer sous excel et ne veut plus écrire par dessus ... ou alors j'ai créé moi même avec les fonctions save et saveas.

mon souhait serait que le pdf se mette dans pdf et le fichier excel dans un dossier excel.

Merci

Voici le code.

Private Sub CommandButton1_Click()

'export facture au format PDF

info1 = Sheets("Facture").Range("M2")

info2 = Sheets("Facture").Range("K1")

info3 = Sheets("Facture").Range("K11")

info4 = Sheets("Facture").Range("K7")

nom = info1 & "-" & info2 & "-" & info3 & "-" & info4 & ".xlsm"

ThisWorkbook.Save

ThisWorkbook.SaveAs (nom)

ThisWorkbook.Activate

If MsgBox("Veux tu enregistrer sous excel?", vbYesNo, "Programmé by Anthony") = vbYes Then

ChDir "C:\Users\Furious2014\Desktop\Martial"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, quality:= _

xlQualityStandard, includeDocProperties:=True, IgnorePrintAreas:=False, _

from:=1, to:=1, openAfterPublish:=True

End If

End Sub

Bonjour,

Tu n'en es pas à ton premier message ! Tu devrais donc avoir appris à mettre le code cité dans un post sous balises Code ! C'est destiné à le rendre plus lisible, et notamment à en conserver l'indentation (nécessaire pour qu'un code soit rapidement lisible ! )

Ceci dit, si :

  • tu déclarais (et typais) tes variables,
  • tu définissais un chemin d'enregistrement,
  • tu ne demandais pas si l'utilisateur veut enregistrer sous Excel pour enregistrer en PDF !
  • évitais d'activer inutilement le classeur actif,
  • épurais ton code d'export pdf (fabriqué à l'enregistreur), mais sans en ôter chemin et nom de fichier !
cela devrait pouvoir bien se passer.

Cordialement.

Merci pour la réponse, je ne sais pas mettre le code avec les balises. (Désolé)

Pour tes explications mais c'est peu claire pour moi, je me lance dans la vba depuis peu.

Dans l'attente de vos réponses

Bonjour,

J'ai créé un bouton sur excel qui me permet d'enregistrer un fichier en PDF et en même temps de l'enregistrer sous excel.

Mais mon soucis c'est que:

1) le pdf s'enregistre au bon endroit mais le fichier excel lui ce range dans "mes documents".

2) Quand je clic sur le bouton:

Veux tu enregistrer sous excel? ==> 2 options "oui" ou "non" ==>si je clic sur "oui, et qu'a un autre moment je reprend la procédure avec le même bouton il me fait "débogage". donc je peux pas enregistrer en pdf car il a déjà enregistrer sous excel et ne veut plus écrire par dessus ... ou alors j'ai créé moi même avec les fonctions save et saveas.

mon souhait serait que le pdf se mette dans pdf et le fichier excel dans un dossier excel.

Merci

Voici le code.

Private Sub CommandButton1_Click()

'export facture au format PDF
info1 = Sheets("Facture").Range("M2")
info2 = Sheets("Facture").Range("K1")
info3 = Sheets("Facture").Range("K11")
info4 = Sheets("Facture").Range("K7")
nom = info1 & "-" & info2 & "-" & info3 & "-" & info4 & ".xlsm"
ThisWorkbook.Save
ThisWorkbook.SaveAs (nom)
ThisWorkbook.Activate
If MsgBox("Veux tu enregistrer sous excel?", vbYesNo, "Programmé by Anthony") = vbYes Then
ChDir "C:\Users\Furious2014\Desktop\Martial"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, quality:= _
xlQualityStandard, includeDocProperties:=True, IgnorePrintAreas:=False, _
from:=1, to:=1, openAfterPublish:=True
End If

End Sub

Pour tes explications mais c'est peu claire pour moi

Je ne vois pas ce que tu ne comprends pas ! Je répète :

-tu déclarais (et typais) tes variables, => Tes variables ne sont pas déclarées, cela se voit, regarde donc ton code ! Elles sont donc inutilement de type Variant... (code quelque peu désordonné...)

-tu définissais un chemin d'enregistrement, => Là encore tu enregistres sans définir de chemin d'enregistrement, il n'y a pas lieu de s'étonner que cela aille dans le dossier courant ! Quand on veut enregistrer à un endroit précis, on définit ce chemin pour l'indiquer lors de l'enregistrement... Excel n'est pas télépathe et ne lit pas dans tes pensées, il ne fait que ce que tu lui dis explicitement.

-tu ne demandais pas si l'utilisateur veut enregistrer sous Excel pour enregistrer en PDF ! => Une fois de plus relis-toi ! Si tu trouve malin de demander à l'utilisateur s'il veut enregistrer sous Excel (après l'avoir déjà fait) pour, s'il répond Oui faire un export PDF, parfait ! Rigolons donc !

-évitais d'activer inutilement le classeur actif, => Tu écris : ThisWorkbook.Activate sans t'en rendre compte ! Mais relis donc ! Il n'y a qu'un classeur sur lequel tu es, que tu viens d'enregistrer deux fois, et il te faut en plus l'activer ! Outre que dans tous les cas ce serait inutile, là je ne sais comment le qualifier.

-épurais ton code d'export pdf (fabriqué à l'enregistreur), mais sans en ôter chemin et nom de fichier ! => Si pour le reste il suffit de regarder ton fichier, là j'admets qu'il faut réfléchir un peu plus (juste un petit peu)... D'un côté tu nous fourgues la commande d'export en pdf telle que sortie de l'enregistreur, non épurée des arguments inutiles à définir (au moins 5)...

Mais tu en as tout de même ôté un, celui qui correspond au chemin et nom de fichier, ce au profit du changement de répertoire courant avec ChDir (qui pourra te réserver quelque surprise un jour ou l'autre car cette instruction change le répertoire mais dans le même lecteur...) et du nom de fichier Excel qui sera repris... je pense qu'il aurait été mieux de fixer tout ça dans la commande d'export... Tu fais ce que tu veux, mais tout ça est un peu désordre.

Ton code est maintenant sous balises, c'est toujours mieux, mais pas indenté ! Ce qui ne le rend pas plus lisible... Tu devrais pourtant car tu pourrais plus facilement le lire...

Merci pour toutes ces explications. Je vais en tenir compte.

Demain je me penche dessus, je suis la pour apprendre et je sais bien que je suis brouillon.

Merci de l'intérêt que tu portes à ma demande et je vais essayer d'épurer ... et de voir pour "indenter"

À demain

Anthony

Le code a était fait en grande partie avec l'enregistreur de macro et le reste j'ai pris dans des vidéo youtube ...

indenter je veux bien mais ne sais pas trop comment faire.

si quelqu'un veut bien qu'on reprenne tout le code pas à pas ça m'aiderait un peu.

"ThisWorkbook.Activate" je devrais donc le supprimer ... ?

Anthony

Bon ! Alors il faudrait fournir les informations manquantes...

1) le chemin du dossier où doit être enregistré le fichier Excel, sous son nouveau nom

2) confirmer, car ce n'est pas très sûr le chemin d'enregistrement du pdf

3) préciser si le message à l'utilisateur lui demande s'il souhaite enregistrer en pdf, ou bien s'il souhaite enregistrer sous Excel

4) indiquer aussi si tu as modifié le fichier avant d'appuyer sur le bouton qui lance cette procédure.

Avec ça on pourra écrire au plus simple.

Cordialement.

Merci Mferrand,

1) le chemin du dossier où doit être enregistré le fichier Excel, sous son nouveau nom:

- C:\Users\Furious2014\Desktop\Martial\devis

2) confirmer, car ce n'est pas très sûr le chemin d'enregistrement du pdf

- C:\Users\Furious2014\Desktop\Martial

3) préciser si le message à l'utilisateur lui demande s'il souhaite enregistrer en pdf, ou bien s'il souhaite enregistrer sous Excel

  • j'aimerai que le message demande à l'utilisateur si il veut bien enregistrer sur excel.
  • enregistrer ensuite en pdf sans demander de confirmation.

4) indiquer aussi si tu as modifié le fichier avant d'appuyer sur le bouton qui lance cette procédure.

oui j'ai modifié ce fichier avant d'appuyer sur le bouton.

merci pour l'aide.

Essaie avec ça :

Private Sub CommandButton1_Click()
    Dim chDos$, nFich$
    With Worksheets("Facture")
        nFich = .Range("M2") & "-" & .Range("K1") & "-" & .Range("K11") _
         & "-" & .Range("K7") & ".xlsm"
    End With
    chDos = "C:\Users\Furious2014\Desktop\Martial\devis\"
    ThisWorkbook.Save
    If MsgBox("Veux-tu enregistrer sous Excel ?", vbYesNo, "Enregistrement") = _
     vbYes Then ThisWorkbook.SaveAs chDos & nFich
    chDos = Replace(chDos, "devis\", "")
    nFich = Replace(nFich, "xlsm", "pdf")
    Worksheets("Facture").ExportAsFixedFormat xlTypePDF, chDos & nFich
End Sub

Re bonsoir,

ça marche au top ... je te remercie.

je vais l'utiliser sur d'autres fichier.

comment mettre mon post comme résolu?

Anthony

Il faut cliquer sur le bouton avec une coche...

parfait à bientôt

Rechercher des sujets similaires à "code vba save saveas probleme"