J'ai enregistrer le déclenchement d'une macro dans le Planificateur des tâches, qui lance la mise à jour à partir d'une macro "Echéance" tous les 3 de chaque mois.
Je génère aussi l'enregistrement de mon fichier sur le C:\temp et une sauvegarde sur le E:\.
Mais je souhaite que l'utilisateur ne soit pas sollicité au cours de la macro, et donc que lors de l'affichage de la boîte : Confirmer l'enregistrement : Le fichier existe déjà, voulez vous le remplacer, "oui" ou "non", ce soit forcer à OUI.
J'ai trouvé 2 lignes de code qui semble correspondre à mon souhait, mais cela fonctionne pour mon 1er enregistrement sur le C:\, mais pour ma sauvegarde sur le E:\ l'enregistrement ne se fait pas !!!
Je précise que je suis assez débutant et que j'utilise bcp l'enregistreur de macro et les inspirations dans les forums, mais là je ne vois pas mon erreur.
Merci pour vôtre aide
Voici le code :
Private Sub Workbook_Open()
Sheets("Echéance").Select 'Feuille à sélectionner
If Range("E1").Value = Date Then
Call Echéance 'Macro à exécuter
End If
Sheets("Compta").Select
End Sub
Sub Enregist_C_et_E()
'
' Enregist_C_et_E Macro
Sheets("Compta").Select
Range("A3").Select
Sheets("Echéance").Select
ActiveSheet.Unprotect Password:="1447"
Range("A1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 13434879
.TintAndShade = 0
.PatternTintAndShade = 0
End With
ActiveSheet.protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="1447"
Sheets("Compta").Select
Range("A4").Select
Range("A4").End(xlDown).Offset(1, 0).Select
ActiveWorkbook.Saved = True
ChDir "C:\temp"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="Compta_Raymond.xlsm"
' Ecrasement fichier existant.xls'
Application.DisplayAlerts = True
'Remettre absolument ensuite
ChDir "E:\A_Perso_10.09.19\Banque\Compta"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="Compta_Raymond.xlsm"
' Ecrasement fichier existant.xls'
Application.DisplayAlerts = True 'Remettre absolument ensuite
Application.Quit
End Sub
Configuration: Windows / Chrome 88.0.4324.150
A voir également:
Forcer à oui la question de confirmation pour l' enregistrement
Bonjour,
Pour compléter la remarque de yg_be qui devrait résoudre le problème (indiquer le chemin complet plutôt que ChDir, il faut noter que cette commande fonctionne comme sous DOS : L’instruction ChDir modifie le répertoire ou le dossier par défaut, mais ne modifie pas le lecteur par défaut. Une autre instruction, ChDrive, modifie le lecteur par défaut.
Merci à tous les deux pour vos réponses,
Mais je suis désolé, mais vous ne m'aidez pas beaucoup, je vous rappelle que le code n'est pas de moi mais celui généré par l'enregistreur.
Je ne suis donc pas sûr de comprendre vos explications, et vous ne me dîtes pas pourquoi l'enregistrement se fait bien pour le lecteur C:\ et pas pour le lecteur E:\
Si je comprend bien je devrais regrouper le chemin en une seule ligne comme indiqué par yg_be !
Je ne comprends pas l'utilisation de ConflictResolution.
S'il vous plait, pourriez vous être plus explicite et plus clair pour un débutant
Milles excuses, j'ai fait un test avant l'envoi et il semblerait ben que cela fonctionne...
Voila le code modifié :
Bonjour,
Ca fonctionne donc maintenant parce que l'enregistrement sur "E" indique explicitement le chemin complet vers le fichier. Il n'y a pas d'alerte puisque la ligne "Application.DisplayAlerts = False" désactive la boite de dialogue le temps de l'enregistrement (on remet à true après).
Pourquoi ça ne marchait pas avant ? Parce que par défaut, on est sur le disque "C". quand on fait ChDir "E:\A_Perso_10.09.19\Banque\Compta" on ne change pas de disque ET en réalité, on reste sur "C". donc en faisant ensuite ActiveWorkbook.SaveAs Filename:="Compta_Raymond.xlsm", ça bogue !
Pour mieux comprendre, faites un test dans une console dos et tapez ce qui est en gras ci-dessous avant de valider avec Entrée:
1. chdir -> ChDir sans paramètre affiche le nom du répertoire en cours (dir affiche en plus la liste des fichiers)
2. ChDir "E:\A_Perso_10.09.19\Banque\Compta" -> Rien ne semble se passer
3. chdir -> affiche la même chose qu'en 1
4. E: -> vous amène dans le répertoire tapé en 2 (soit ChDrive "E" en VBA)
Donc dans votre programme c'est comme si vous étiez dans le batiment C et que vous vous contentier de regarder vers le batiment E en face. Pour aller mettre une lettre dans l'immeuble E; il vous faut descendre et traverser la rue ! D'ou la commande ChDrive que j'indiquais.
Il aurait donc fallut écrire dans votre programme un ChDrive en plus:
La solution de yg_be évite de charger de disque sans arrêt et d'envoyer le fichier au bon endroit sans devoir traverser la rue à chaque fois : de la téléportation en quelque sorte !
PS ConflictResolution. permettrait de remplacer les displayAlerts qu'on place à false puis true mais sans modifier votre saveAs, ça n'aurait rien changé au problème de fond pour l'enregistrement en E.
OUI. Ce sera mieux ainsi même si ça fonctionne bien pour l'instant : ça évitera qu'un ChDrive ajouté par la suite génère un bogue dans cette procédure !
Donc si j'ai bien compris, le code de conflictresolution permet aussi de ne pas afficher la fenêtre de confirmation.
Pour la sauvegarde dans C:\ et E:\ c'est un test, après je vais faire la sauvegarde sur mon disque externe bien sûr..
En fait la pratique de l'enregistreur n'est pas tjs une source sûr, mais pour des débutants comme moi, ça permet de réaliser rapidement et facilement bcp de macros.
le code de conflictresolution évite l'affichage, et permet de décider que faire en cas de conflit (fichier présent).
Application.DisplayAlerts est plus général, risque souvent de cacher de vrais problèmes.
ce que tu avais ici, puisque tu n'étais pas prévenu que le fichier n'était pas sauvé.
Désolé, je reviens vers vous, j'ai donc remplacé le code comme vous me l'avez conseillé avec ConflictResolution,
l'enregistrement se fait correctement sur les 2 lecteurs, mais la boite de dialogue de demande de confirmation s'ouvre 2 fois...
Qu'est-ce que j'ai oublié ?