OVH Cloud OVH Cloud

Erreur dans Code

1 réponse
Avatar
Boa73
bonjour =E0 tous,

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

1 réponse

Avatar
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