J'ai un petit soucis.
J'utilise le code ci dessous sur une feuille de calcul=20
pour incr=E9menter un num=E9ro =E0 chaque ouverture.
Private Sub Workbook_Open()
If ActiveWorkbook.Path =3D "" Then
Deprotege
[numFact] =3D [numFact] + 1
Protege
ActiveWorkbook.Saved =3D True
ActiveWorkbook.SaveCopyAs (Application.TemplatesPath=20
& "Devis.xlt")
End If
End Sub
---------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
chemXlt =3D Application.TemplatesPath & "Devis.xlt"
If ActiveWorkbook.Path =3D "" Then
Set wbk =3D Workbooks.Open(chemXlt)
With wbk.ActiveSheet
Deprotege
.Range("NumFact") =3D .Range("NumFact") - 1
Protege
End With
wbk.Close True
End If
End Sub
---------------------------------------------------------
Tout fonctionne comme il faut, mon probl=E8me je l'ai avec=20
une macro me permettant de fermer le classeur sans rien=20
enregistrer et sans rien demander que j'effectue =E0 l'aide=20
d'un bouton avec ce code
---------------------------------------------------------
Private Sub QuitterSansEnregistrer_Click()
' Quitter sans Enregistrer Macro
ActiveWorkbook.Close False
End Sub
---------------------------------------------------------
il me met une ereur 91 : variable d'objet ou nvariable de=20
bloc with non d=E9fini
en cliquant sur d=E9bogage il me surligne la ligne
---------------------------------------------------------
With wbk.ActiveSheet
---------------------------------------------------------
de mon code permettant d'incrementer un num=E9ro (voir code=20
ci dessus)
Si quelqu'un peut m'aider =E0 r=E9soudre ce probl=E8me je le=20
remercie d'avance.
Cordialement,
Boa73
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Frédéric Sigonneau
Bonjour,
Modifie la procédure Workbook_BeforeClose du modèle (Devis.xlt) comme ceci :
'=============== Private Sub Workbook_BeforeClose(Cancel As Boolean) chemXlt = Application.TemplatesPath & "Devis.xlt" If ActiveWorkbook.Path = "" Then ActiveWorkbook.Saved = True Set wbk = Workbooks.Open(chemXlt) With wbk.ActiveSheet 'Deprotege .Range("NumFact") = .Range("NumFact") - 1 'Protege End With wbk.Close True End If End Sub '================ En ajoutant l'instruction 'ActiveWorkbook.Saved = True' la classeur actif sera fermé sans demande d'enregistrement s'il a été modifié. Tu peux donc, AMA, fermer ton classeur en utilisant simplement la commande standard FichierFermer sans avoir besoin d'un bouton avec du code spécifique. Par contre, si tu veux enregistrer un classeur basé sur ce modèle, il faudra penser à le faire avant de la refermer (Excel ne te le rappellera pas si tu oublies).
FS -- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://perso.wanadoo.fr/frederic.sigonneau Si votre question sur Excel est urgente, évitez ma bal !
bonjour à tous,
J'ai un petit soucis. J'utilise le code ci dessous sur une feuille de calcul pour incrémenter un numéro à chaque ouverture.
Private Sub Workbook_Open() If ActiveWorkbook.Path = "" Then Deprotege [numFact] = [numFact] + 1 Protege ActiveWorkbook.Saved = True ActiveWorkbook.SaveCopyAs (Application.TemplatesPath & "Devis.xlt") End If End Sub --------------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) chemXlt = Application.TemplatesPath & "Devis.xlt" If ActiveWorkbook.Path = "" Then Set wbk = Workbooks.Open(chemXlt) With wbk.ActiveSheet Deprotege .Range("NumFact") = .Range("NumFact") - 1 Protege End With wbk.Close True End If End Sub --------------------------------------------------------- Tout fonctionne comme il faut, mon problème je l'ai avec une macro me permettant de fermer le classeur sans rien enregistrer et sans rien demander que j'effectue à l'aide d'un bouton avec ce code
--------------------------------------------------------- Private Sub QuitterSansEnregistrer_Click() ' Quitter sans Enregistrer Macro ActiveWorkbook.Close False End Sub ---------------------------------------------------------
il me met une ereur 91 : variable d'objet ou nvariable de bloc with non défini en cliquant sur débogage il me surligne la ligne --------------------------------------------------------- With wbk.ActiveSheet --------------------------------------------------------- de mon code permettant d'incrementer un numéro (voir code ci dessus)
Si quelqu'un peut m'aider à résoudre ce problème je le remercie d'avance. Cordialement, Boa73
Bonjour,
Modifie la procédure Workbook_BeforeClose du modèle (Devis.xlt) comme ceci :
'=============== Private Sub Workbook_BeforeClose(Cancel As Boolean)
chemXlt = Application.TemplatesPath & "Devis.xlt"
If ActiveWorkbook.Path = "" Then
ActiveWorkbook.Saved = True
Set wbk = Workbooks.Open(chemXlt)
With wbk.ActiveSheet
'Deprotege
.Range("NumFact") = .Range("NumFact") - 1
'Protege
End With
wbk.Close True
End If
End Sub
'================
En ajoutant l'instruction 'ActiveWorkbook.Saved = True' la classeur actif sera
fermé sans demande d'enregistrement s'il a été modifié. Tu peux donc, AMA,
fermer ton classeur en utilisant simplement la commande standard FichierFermer
sans avoir besoin d'un bouton avec du code spécifique.
Par contre, si tu veux enregistrer un classeur basé sur ce modèle, il faudra
penser à le faire avant de la refermer (Excel ne te le rappellera pas si tu
oublies).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
bonjour à tous,
J'ai un petit soucis.
J'utilise le code ci dessous sur une feuille de calcul
pour incrémenter un numéro à chaque ouverture.
Private Sub Workbook_Open()
If ActiveWorkbook.Path = "" Then
Deprotege
[numFact] = [numFact] + 1
Protege
ActiveWorkbook.Saved = True
ActiveWorkbook.SaveCopyAs (Application.TemplatesPath
& "Devis.xlt")
End If
End Sub
---------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
chemXlt = Application.TemplatesPath & "Devis.xlt"
If ActiveWorkbook.Path = "" Then
Set wbk = Workbooks.Open(chemXlt)
With wbk.ActiveSheet
Deprotege
.Range("NumFact") = .Range("NumFact") - 1
Protege
End With
wbk.Close True
End If
End Sub
---------------------------------------------------------
Tout fonctionne comme il faut, mon problème je l'ai avec
une macro me permettant de fermer le classeur sans rien
enregistrer et sans rien demander que j'effectue à l'aide
d'un bouton avec ce code
---------------------------------------------------------
Private Sub QuitterSansEnregistrer_Click()
' Quitter sans Enregistrer Macro
ActiveWorkbook.Close False
End Sub
---------------------------------------------------------
il me met une ereur 91 : variable d'objet ou nvariable de
bloc with non défini
en cliquant sur débogage il me surligne la ligne
---------------------------------------------------------
With wbk.ActiveSheet
---------------------------------------------------------
de mon code permettant d'incrementer un numéro (voir code
ci dessus)
Si quelqu'un peut m'aider à résoudre ce problème je le
remercie d'avance.
Cordialement,
Boa73
Modifie la procédure Workbook_BeforeClose du modèle (Devis.xlt) comme ceci :
'=============== Private Sub Workbook_BeforeClose(Cancel As Boolean) chemXlt = Application.TemplatesPath & "Devis.xlt" If ActiveWorkbook.Path = "" Then ActiveWorkbook.Saved = True Set wbk = Workbooks.Open(chemXlt) With wbk.ActiveSheet 'Deprotege .Range("NumFact") = .Range("NumFact") - 1 'Protege End With wbk.Close True End If End Sub '================ En ajoutant l'instruction 'ActiveWorkbook.Saved = True' la classeur actif sera fermé sans demande d'enregistrement s'il a été modifié. Tu peux donc, AMA, fermer ton classeur en utilisant simplement la commande standard FichierFermer sans avoir besoin d'un bouton avec du code spécifique. Par contre, si tu veux enregistrer un classeur basé sur ce modèle, il faudra penser à le faire avant de la refermer (Excel ne te le rappellera pas si tu oublies).
FS -- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://perso.wanadoo.fr/frederic.sigonneau Si votre question sur Excel est urgente, évitez ma bal !
bonjour à tous,
J'ai un petit soucis. J'utilise le code ci dessous sur une feuille de calcul pour incrémenter un numéro à chaque ouverture.
Private Sub Workbook_Open() If ActiveWorkbook.Path = "" Then Deprotege [numFact] = [numFact] + 1 Protege ActiveWorkbook.Saved = True ActiveWorkbook.SaveCopyAs (Application.TemplatesPath & "Devis.xlt") End If End Sub --------------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) chemXlt = Application.TemplatesPath & "Devis.xlt" If ActiveWorkbook.Path = "" Then Set wbk = Workbooks.Open(chemXlt) With wbk.ActiveSheet Deprotege .Range("NumFact") = .Range("NumFact") - 1 Protege End With wbk.Close True End If End Sub --------------------------------------------------------- Tout fonctionne comme il faut, mon problème je l'ai avec une macro me permettant de fermer le classeur sans rien enregistrer et sans rien demander que j'effectue à l'aide d'un bouton avec ce code
--------------------------------------------------------- Private Sub QuitterSansEnregistrer_Click() ' Quitter sans Enregistrer Macro ActiveWorkbook.Close False End Sub ---------------------------------------------------------
il me met une ereur 91 : variable d'objet ou nvariable de bloc with non défini en cliquant sur débogage il me surligne la ligne --------------------------------------------------------- With wbk.ActiveSheet --------------------------------------------------------- de mon code permettant d'incrementer un numéro (voir code ci dessus)
Si quelqu'un peut m'aider à résoudre ce problème je le remercie d'avance. Cordialement, Boa73