OVH Cloud OVH Cloud

Modèle Excel

4 réponses
Avatar
aife1
Bonjour à tous et à toutes !

J'ai un modèle Excel (.xlt), et je voudrais, lorsque l'on ouvre une copie
(donc par double clique), et lorsqu'on l'enregistre (donc enregistrer sous),
deux feuilles soient supprimées ainsi que les macros (modules et codes des
feuilles). Mais cela doit se faire uniquement lorsqu'on ouvre une copie,
lorsque ouvre ce modèle par le menu contextuel, on ouvre l'original (non une
copie), et je ne veux pas que ces manipulations soient faites.

Si vous avez une idée, merci de m'aider ...

Merci d'avance à vous tous.

4 réponses

Avatar
aife1
Re Bonjour !

Même si vous ne savez pas entièrement quoi faire, mais si vous avez au moins
une petite idée qui pourrait me mettre sur le chemin (ou quelqu'un d'autre),
merci de me l'indiquer !

Merci d'avance ...

"aife1" a écrit dans le message de
news:%
Bonjour à tous et à toutes !

J'ai un modèle Excel (.xlt), et je voudrais, lorsque l'on ouvre une copie
(donc par double clique), et lorsqu'on l'enregistre (donc enregistrer
sous),

deux feuilles soient supprimées ainsi que les macros (modules et codes des
feuilles). Mais cela doit se faire uniquement lorsqu'on ouvre une copie,
lorsque ouvre ce modèle par le menu contextuel, on ouvre l'original (non
une

copie), et je ne veux pas que ces manipulations soient faites.

Si vous avez une idée, merci de m'aider ...

Merci d'avance à vous tous.




Avatar
michdenis
Bonjour Aife1,


Voici une procédure à insérer dans le ThisWorkbook de ton classeur.

Lorsque l'usager voudra enregistrer pour la première fois la copie du modèle, tout le code des feuilles modules, des modules
et Formulaires du classeur sera supprimé + les 2 feuilles que tu définiras dans la procédure. Cela comprend aussi cette
procédure.

'-------------------------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim VBComp As Object
Dim VBComps As Object
Dim Arr()

'Liste des noms de feuilles à supprimer
Arr = Array("Feuil2", "Feuil3")

On Error Resume Next
Application.DisplayAlerts = False
Sheets(Arr).Delete
If Err <> 0 Then Err = 0
Application.DisplayAlerts = True

If UCase(Right(ThisWorkbook.Name, 3)) <> "XLT" Then
If MsgBox("Désirez-vous enregistrer ce classeur?", vbYesNo) = vbYes Then
Application.EnableEvents = False
Application.Dialogs(xlDialogSaveAs).Show ThisWorkbook.Name
Application.EnableEvents = True
If Me.Saved = True Then
Set VBComps = ThisWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
Me.Save
Else
Cancel = True
End If
Else
Cancel = True
End If
End If

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


Salutations!



"aife1" a écrit dans le message de news:%
Bonjour à tous et à toutes !

J'ai un modèle Excel (.xlt), et je voudrais, lorsque l'on ouvre une copie
(donc par double clique), et lorsqu'on l'enregistre (donc enregistrer sous),
deux feuilles soient supprimées ainsi que les macros (modules et codes des
feuilles). Mais cela doit se faire uniquement lorsqu'on ouvre une copie,
lorsque ouvre ce modèle par le menu contextuel, on ouvre l'original (non une
copie), et je ne veux pas que ces manipulations soient faites.

Si vous avez une idée, merci de m'aider ...

Merci d'avance à vous tous.
Avatar
aife1
Bonjour MichDenis !

Merci pour ta réponse, mais j'ai un petit problème.

En fait, lorsque je met ce code dans le fichier modèle (original), dès que
j'enregistre afin de sauvegarder le code de ThisWorkbook, ça me supprime les
deux feuilles, alors que je voudrais que ces 2 feuilles soient supprimées
seulement lorsque j'enregistre une copie de ce modèle, afin que le modèle
reste le même tout le temps.

La deuxième chose qui me parait byzarre, est que, quand j'enregistre quand
même la copie du modèle (même si il n'y a plus les 2 feuilles), il y a 2
boîtes qui s'ouvre pour savoir si je veux enregistrer : je ferme, ça me
demande si je veux enregistrer, je dis oui, je change le nom et sélectionne
l'endroit où la copie doit être, une fois cette manip faite, une 2ème boite
s'ouvre et recommence la même chose (je pense que cela est du du fichier
modèle : 1 première fois pour le fichier et 1 deuxième fois pour le code de
ThisWorbook). Par contre, après ces 2 enregistrements (donc j'ai 2 copie car
à chaque fois c'est "enregistrer sous", les codes et macros ne sont
effectivement plus là.

Si tu as une idée, elle est la bienvenue.

Merci encore pour tout,

Amicalement

"michdenis" a écrit dans le message de
news:%
Bonjour Aife1,


Voici une procédure à insérer dans le ThisWorkbook de ton classeur.

Lorsque l'usager voudra enregistrer pour la première fois la copie du
modèle, tout le code des feuilles modules, des modules

et Formulaires du classeur sera supprimé + les 2 feuilles que tu définiras
dans la procédure. Cela comprend aussi cette

procédure.

'-------------------------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)


Dim VBComp As Object
Dim VBComps As Object
Dim Arr()

'Liste des noms de feuilles à supprimer
Arr = Array("Feuil2", "Feuil3")

On Error Resume Next
Application.DisplayAlerts = False
Sheets(Arr).Delete
If Err <> 0 Then Err = 0
Application.DisplayAlerts = True

If UCase(Right(ThisWorkbook.Name, 3)) <> "XLT" Then
If MsgBox("Désirez-vous enregistrer ce classeur?", vbYesNo) = vbYes
Then

Application.EnableEvents = False
Application.Dialogs(xlDialogSaveAs).Show ThisWorkbook.Name
Application.EnableEvents = True
If Me.Saved = True Then
Set VBComps = ThisWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
Me.Save
Else
Cancel = True
End If
Else
Cancel = True
End If
End If

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


Salutations!



"aife1" a écrit dans le message de
news:%

Bonjour à tous et à toutes !

J'ai un modèle Excel (.xlt), et je voudrais, lorsque l'on ouvre une copie
(donc par double clique), et lorsqu'on l'enregistre (donc enregistrer
sous),

deux feuilles soient supprimées ainsi que les macros (modules et codes des
feuilles). Mais cela doit se faire uniquement lorsqu'on ouvre une copie,
lorsque ouvre ce modèle par le menu contextuel, on ouvre l'original (non
une

copie), et je ne veux pas que ces manipulations soient faites.

Si vous avez une idée, merci de m'aider ...

Merci d'avance à vous tous.





Avatar
michdenis
Ré...

Enregistre d'abord ton modèle,
Copie cette procédure dans le ThisWorkbook
Sauvegarde ton modèle.
Active ou désactive la dernère ligne de code selon que tu veuilles qu'il soit possible de sauvegarder des modifications lors
d'ouverture subséquente.

'Cancel = True


'----------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim VBComp As Object
Dim VBComps As Object
Dim Arr()

If SaveAsUI = False Then
'Liste des noms de feuilles à supprimer
Arr = Array("Feuil2", "Feuil3")


If UCase(Right(ThisWorkbook.Name, 3)) <> "XLT" Then
On Error Resume Next
Application.DisplayAlerts = False
Sheets(Arr).Delete
If Err <> 0 Then Err = 0
Application.DisplayAlerts = True
If MsgBox("Désirez-vous enregistrer ce classeur?", vbYesNo) = vbYes Then
Application.EnableEvents = False
Application.Dialogs(xlDialogSaveAs).Show ThisWorkbook.Name
Application.EnableEvents = True
If Me.Saved = True Then
Set VBComps = ThisWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
Me.Save
Else
Cancel = True
End If
Else
Cancel = True

End If
Else
'Si tu ne veux pas enregistrer lorsque ce fichier
's'ouvre comme modèle active la ligne de code suivante
'Cancel = True

End If
End If

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


Salutations!






"aife1" a écrit dans le message de news:
Bonjour MichDenis !

Merci pour ta réponse, mais j'ai un petit problème.

En fait, lorsque je met ce code dans le fichier modèle (original), dès que
j'enregistre afin de sauvegarder le code de ThisWorkbook, ça me supprime les
deux feuilles, alors que je voudrais que ces 2 feuilles soient supprimées
seulement lorsque j'enregistre une copie de ce modèle, afin que le modèle
reste le même tout le temps.

La deuxième chose qui me parait byzarre, est que, quand j'enregistre quand
même la copie du modèle (même si il n'y a plus les 2 feuilles), il y a 2
boîtes qui s'ouvre pour savoir si je veux enregistrer : je ferme, ça me
demande si je veux enregistrer, je dis oui, je change le nom et sélectionne
l'endroit où la copie doit être, une fois cette manip faite, une 2ème boite
s'ouvre et recommence la même chose (je pense que cela est du du fichier
modèle : 1 première fois pour le fichier et 1 deuxième fois pour le code de
ThisWorbook). Par contre, après ces 2 enregistrements (donc j'ai 2 copie car
à chaque fois c'est "enregistrer sous", les codes et macros ne sont
effectivement plus là.

Si tu as une idée, elle est la bienvenue.

Merci encore pour tout,

Amicalement

"michdenis" a écrit dans le message de
news:%
Bonjour Aife1,


Voici une procédure à insérer dans le ThisWorkbook de ton classeur.

Lorsque l'usager voudra enregistrer pour la première fois la copie du
modèle, tout le code des feuilles modules, des modules

et Formulaires du classeur sera supprimé + les 2 feuilles que tu définiras
dans la procédure. Cela comprend aussi cette

procédure.

'-------------------------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)


Dim VBComp As Object
Dim VBComps As Object
Dim Arr()

'Liste des noms de feuilles à supprimer
Arr = Array("Feuil2", "Feuil3")

On Error Resume Next
Application.DisplayAlerts = False
Sheets(Arr).Delete
If Err <> 0 Then Err = 0
Application.DisplayAlerts = True

If UCase(Right(ThisWorkbook.Name, 3)) <> "XLT" Then
If MsgBox("Désirez-vous enregistrer ce classeur?", vbYesNo) = vbYes
Then

Application.EnableEvents = False
Application.Dialogs(xlDialogSaveAs).Show ThisWorkbook.Name
Application.EnableEvents = True
If Me.Saved = True Then
Set VBComps = ThisWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
Me.Save
Else
Cancel = True
End If
Else
Cancel = True
End If
End If

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


Salutations!



"aife1" a écrit dans le message de
news:%

Bonjour à tous et à toutes !

J'ai un modèle Excel (.xlt), et je voudrais, lorsque l'on ouvre une copie
(donc par double clique), et lorsqu'on l'enregistre (donc enregistrer
sous),

deux feuilles soient supprimées ainsi que les macros (modules et codes des
feuilles). Mais cela doit se faire uniquement lorsqu'on ouvre une copie,
lorsque ouvre ce modèle par le menu contextuel, on ouvre l'original (non
une

copie), et je ne veux pas que ces manipulations soient faites.

Si vous avez une idée, merci de m'aider ...

Merci d'avance à vous tous.