Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Erreur de macro sur fermeture avec enregistrement

10 réponses
Avatar
TITUS
Bonjour à tous,

J'ai une macro :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.SaveAs _
Filename:="\\lag1\public\Devis_Dentaires\" _
& Sheets("DEVIS").[E2] & "_" & Format(Date, "yymmdd") & "_" &
Sheets("DEVIS").[A2] & ".xls"
ThisWorkbook.Saved = True
End Sub
qui me permet d'enregistrer directement le fichier avec un nom obligatoire.

Le problème se situe au moment ou on ouvre une seconde fois le fichier.
Qaund on le ferme l'erreur macro apparaît "Erreur d'exécution '1004'.
Comment puis éviter ce message avec ou sans enregistrement du même fichier.

Merci d'avance
Cordialement
TITUS

10 réponses

Avatar
FFO
Salut TITUS

Rajoute en début de code cette ligne :

Application.DisplayAlerts = False

Celà devrait faire

Dis moi !!!


Bonjour à tous,

J'ai une macro :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.SaveAs _
Filename:="lag1publicDevis_Dentaires" _
& Sheets("DEVIS").[E2] & "_" & Format(Date, "yymmdd") & "_" &
Sheets("DEVIS").[A2] & ".xls"
ThisWorkbook.Saved = True
End Sub
qui me permet d'enregistrer directement le fichier avec un nom obligatoire.

Le problème se situe au moment ou on ouvre une seconde fois le fichier.
Qaund on le ferme l'erreur macro apparaît "Erreur d'exécution '1004'.
Comment puis éviter ce message avec ou sans enregistrement du même fichier.

Merci d'avance
Cordialement
TITUS


Avatar
TITUS
Désolée mais ca plante EXCEL.
J'ai positionner le texte après
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Me suis-je trompée !



Salut TITUS

Rajoute en début de code cette ligne :

Application.DisplayAlerts = False

Celà devrait faire

Dis moi !!!


Bonjour à tous,

J'ai une macro :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.SaveAs _
Filename:="lag1publicDevis_Dentaires" _
& Sheets("DEVIS").[E2] & "_" & Format(Date, "yymmdd") & "_" &
Sheets("DEVIS").[A2] & ".xls"
ThisWorkbook.Saved = True
End Sub
qui me permet d'enregistrer directement le fichier avec un nom obligatoire.

Le problème se situe au moment ou on ouvre une seconde fois le fichier.
Qaund on le ferme l'erreur macro apparaît "Erreur d'exécution '1004'.
Comment puis éviter ce message avec ou sans enregistrement du même fichier.

Merci d'avance
Cordialement
TITUS




Avatar
jps
bonjour titus
en ajoutant ce texte après la ligne Private Sub.....

On Error Resume Next

peut-être que cela ira mieux
jps

"TITUS" a écrit dans le message de news:

Désolée mais ca plante EXCEL.
J'ai positionner le texte après
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Me suis-je trompée !



Salut TITUS

Rajoute en début de code cette ligne :

Application.DisplayAlerts = False

Celà devrait faire

Dis moi !!!


Bonjour à tous,

J'ai une macro :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.SaveAs _
Filename:="lag1publicDevis_Dentaires" _
& Sheets("DEVIS").[E2] & "_" & Format(Date, "yymmdd") & "_" &
Sheets("DEVIS").[A2] & ".xls"
ThisWorkbook.Saved = True
End Sub
qui me permet d'enregistrer directement le fichier avec un nom
obligatoire.

Le problème se situe au moment ou on ouvre une seconde fois le fichier.
Qaund on le ferme l'erreur macro apparaît "Erreur d'exécution '1004'.
Comment puis éviter ce message avec ou sans enregistrement du même
fichier.

Merci d'avance
Cordialement
TITUS






Avatar
MichDenis
Il y a une problématique avec la façon que tu as choisi pour écrire ton code.

A ) Quand tu écris Sheets("DEVIS") ... sans faire référence directement
au classeur contenant la feuille ainsi appelée, la feuille retenue est réputée
faire parti du classeur dans lequel le code est écrit. Ce classeur n'est pas
nécessairement le classeur actif. Pour ce faire, tu peux adapter la correction
que j'ai apportée à ton code.

B ) Quand tu utilises ceci : With ActiveWorkbook
Tu dois t'assurer que le classeur actif est réellement celui qui contient
la feuille nommée car c'est dans 2 cellules de celle-ci que se retrouvent
les éléments du nom de l'enregistrement du classeur
Ce n'est pas évident lorsque plusieurs classeurs sont ouverts.

Si possible, pourquoi ne pas utiliser le nom du classeur
With Workbooks("SonNom.xls") et le reste de la macro.


'-----------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

'Ces symboles ne peuvet apparaître dans le nom
'du fichier ... tu dois t'assurer qu'ils ne sont
'pas présent dans les cellules E2 et A2

'caractères défendus : > , < , | , / , , * , ?

'Au besoin, tu ajoutes un bout de code pour t'assurer que les
'caractères énoncés sont absents du nom du fichier.

With ActiveWorkbook
.SaveAs Filename:="lag1publicDevis_Dentaires" _
& .Sheets("DEVIS").[E2] & "_" & Format(Date, "yymmdd") _
& "_" & .Sheets("DEVIS").[A2] & ".xls"
End With

ThisWorkbook.Saved = True

End Sub
'-----------------------------------






"TITUS" a écrit dans le message de news:

Bonjour à tous,

J'ai une macro :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.SaveAs _
Filename:="lag1publicDevis_Dentaires" _
& Sheets("DEVIS").[E2] & "_" & Format(Date, "yymmdd") & "_" &
Sheets("DEVIS").[A2] & ".xls"
ThisWorkbook.Saved = True
End Sub
qui me permet d'enregistrer directement le fichier avec un nom obligatoire.

Le problème se situe au moment ou on ouvre une seconde fois le fichier.
Qaund on le ferme l'erreur macro apparaît "Erreur d'exécution '1004'.
Comment puis éviter ce message avec ou sans enregistrement du même fichier.

Merci d'avance
Cordialement
TITUS
Avatar
TITUS
c'est bon JPS

Merci beaucoup*
TITUS


bonjour titus
en ajoutant ce texte après la ligne Private Sub.....

On Error Resume Next

peut-être que cela ira mieux
jps

"TITUS" a écrit dans le message de news:

Désolée mais ca plante EXCEL.
J'ai positionner le texte après
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Me suis-je trompée !



Salut TITUS

Rajoute en début de code cette ligne :

Application.DisplayAlerts = False

Celà devrait faire

Dis moi !!!


Bonjour à tous,

J'ai une macro :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.SaveAs _
Filename:="lag1publicDevis_Dentaires" _
& Sheets("DEVIS").[E2] & "_" & Format(Date, "yymmdd") & "_" &
Sheets("DEVIS").[A2] & ".xls"
ThisWorkbook.Saved = True
End Sub
qui me permet d'enregistrer directement le fichier avec un nom
obligatoire.

Le problème se situe au moment ou on ouvre une seconde fois le fichier.
Qaund on le ferme l'erreur macro apparaît "Erreur d'exécution '1004'.
Comment puis éviter ce message avec ou sans enregistrement du même
fichier.

Merci d'avance
Cordialement
TITUS










Avatar
MichDenis
| On Error Resume Next

Si je peux me permettre JPS, cette ligne de code doit être
utilisé seulement et seulement si on a identifié le type d'erreur
susceptible de se produire par le code que l'on a écrit et
que l'on s'est assuré que l'erreur produite n'aurait pas d'incidence
sur l'exécution du reste du code de la procédure !!!

Dans le cas de cette ficelle, tu ne pourras jamais faire enregistrer
à excel un fichier dont le nom contient au moins un caractère
défendu > < | / * ? même si tu utilises ta commande.

Voir autre réponse sur le fil pour plus d'informations.
Avatar
jps
bien sûr que tu peux te permettre, denis....
moi, j'ai compris que l'enregistrement (SaveAs) du classeur se faisait bien
la première fois
("qui me permet d'enregistrer directement le fichier avec un nom
obligatoire" dixit Titus) mias que le problème se situait à la fermeture du
classeur ouvert une seconde fois ( "Le problème se situe au moment ou on
ouvre une seconde fois le fichier. Qaund on le ferme l'erreur macro apparaît
"Erreur d'exécution '1" redixit Titus)
je me suis dit alors qu'excel ne comprenait pas qu'on puisse SaveAs un
classeur déjà SavéAs!!!
et il semble que Titus soit content de mon chibrelot
que demande le peuple?
jps

"MichDenis" a écrit dans le message de news:

| On Error Resume Next

Si je peux me permettre JPS, cette ligne de code doit être
utilisé seulement et seulement si on a identifié le type d'erreur
susceptible de se produire par le code que l'on a écrit et
que l'on s'est assuré que l'erreur produite n'aurait pas d'incidence
sur l'exécution du reste du code de la procédure !!!

Dans le cas de cette ficelle, tu ne pourras jamais faire enregistrer
à excel un fichier dont le nom contient au moins un caractère
défendu > < | / * ? même si tu utilises ta commande.

Voir autre réponse sur le fil pour plus d'informations.




Avatar
MichDenis
Que Titus soit content tant mieux. ! , la façon d'écrire
son code est alambiquée pour demeurer poli.
Tu copies cette macro dans le THISWORKBOOK DU CLASSEUR
DE LA FENÊTRE VBA et tu Exécutes cette macro :

Sub Test()
Msgbox sheets(1).name
End sub

A ) Si tu as un classeur ouvert, elle te retourne le nom de l'onglet
de la première feuille du classeur où le code est écrit

B ) insère un autre classeur avec un nom différent de l'onglet
de la première feuille du classeur qui était ouvert. Assure-toi
que c'est le nouveau classeur qui est actif et exécutes à nouveau
la macro, il continue d'afficher le nom de la feuille du classeur où
la macro a été écrite.

Pourquoi ? Parce que tu es, comme la procédure à titus, dans le module
de classe ThisWorkbook (Ce module c'est l'objet représentant le classeur lui-même)
dans un tel cas, les objets dont les références sont incomplètes sont réputées
appartenir au classeur dans lequel le code est écrit contrairement au
module standard.

;-)))
C'est le même ostie de truc que les Range() qui sont écrits dans des modules
feuillles. Pour signifier une plage de cellules qui appartient à un autre feuille
il faut ajouter à la plage le nom de la feuille à laquelle appartient la plage de cellules.

IL n'en demeure pas moins vrai que la ligne de code "On error resume next"
se doit d'être utilisé seulement et seulement si on SAIT le type d'erreur que
la procédure est sensé rencontrer.
Avatar
jps
danke sehr, mein Obersturmführer
Herr jps von Peaucholais

"MichDenis" a écrit dans le message de news:

Que Titus soit content tant mieux. ! , la façon d'écrire
son code est alambiquée pour demeurer poli.
Tu copies cette macro dans le THISWORKBOOK DU CLASSEUR
DE LA FENÊTRE VBA et tu Exécutes cette macro :

Sub Test()
Msgbox sheets(1).name
End sub

A ) Si tu as un classeur ouvert, elle te retourne le nom de l'onglet
de la première feuille du classeur où le code est écrit

B ) insère un autre classeur avec un nom différent de l'onglet
de la première feuille du classeur qui était ouvert. Assure-toi
que c'est le nouveau classeur qui est actif et exécutes à nouveau
la macro, il continue d'afficher le nom de la feuille du classeur où
la macro a été écrite.

Pourquoi ? Parce que tu es, comme la procédure à titus, dans le module
de classe ThisWorkbook (Ce module c'est l'objet représentant le classeur
lui-même)
dans un tel cas, les objets dont les références sont incomplètes sont
réputées
appartenir au classeur dans lequel le code est écrit contrairement au
module standard.

;-)))
C'est le même ostie de truc que les Range() qui sont écrits dans des
modules
feuillles. Pour signifier une plage de cellules qui appartient à un autre
feuille
il faut ajouter à la plage le nom de la feuille à laquelle appartient la
plage de cellules.

IL n'en demeure pas moins vrai que la ligne de code "On error resume next"
se doit d'être utilisé seulement et seulement si on SAIT le type d'erreur
que
la procédure est sensé rencontrer.




Avatar
MichDenis
| danke sehr, mein Obersturmführer

Ok, je m'en vais me perdre dans la nature !
Ça risque que d'être long, le territoire est grand.
;-)