Aidez moi svp, je cale...

la_vera1

XLDnaute Nouveau
Bonjour,

Travaillant avc excel 200, j'ai cree ds VBA (this workbook) les instructions suivantes:

' ici je cherche a gere la fonction sauvegarder sous ( pr obliger les user a renommer le fichier)

Private Const dsWarningSheet As String = "sheet2" 'Enter name of the Entry/Warning Page

Private Sub Workbook_Beforesave(ByVal SaveAsUI As Boolean, Cancel As Boolean)


If SaveAsUI = False Then
Cancel = True

MsgBox "The 'Save' function for this workbook has been disabled. " & Chr(10) & " You will only save this document if you rename the workbook" & Chr(10) & "" & Chr(10) & " Click Ok, If you want to rename this forder", vbOKOnly + vbInformation, "Save Disabled"
Application.Dialogs(xlDialogSaveAs).Show CStr(ThisWorkbook.ActiveSheet.Range("A1").Value)

End If

End Sub


Ensuite, je cherche a cacher ma feuille de donnees sources, quand l'utilisateur a travailler avec mon fichier.
Dans thisworkbook ( VBA), j'ai donne l'instruction ( copier, collee en dessous) qui me permet:
- d'aficher mon classeur entier ( a part, la page ou j'ai mes donnees sources) et de cache ma page warning Si l'utilisateur n'accepte pas les macros, un msg d'erreur (contenu ds une autre feuille apparait)
- de masquer les feuilles de mon classeur, sauf la page warning dans le cas ou l'utilisateur ouvre le classeur sans accepter les macros.

Mon soucis est que la tt ce systeme marche une fois sur deux!!!

Quand j'ouvre mon classeur et approuve les macros pr la 1ere fois, pas de soucis tt est bon.

Des lors que je sauvegarde mon travail, le ferme et le re-ouvre ( tjrs en acceptant les macros), la macro plante.
dans la cas ou je n'accepte pas les macros, ma page warning ne s'affiche plus.

Es ce un pb de ma fonction sauvegarder?
Ou autre???

Je vous ai colle mes instructions apres.... Je sais que j'y suis presque...Si qqn pouvais m'aider, ca serait fantastiq!!
Merci d'avance....

VN.


Private Sub Workbook_BeforeClose(Cancel As Boolean)

For Each ds In ActiveWorkbook.Sheets
If LCase(dsWarningSheet) = LCase(ds.Name) Then
ds.Visible = True
Else
ds.Visible = xlVeryHidden
End If

Next



End Sub

Private Sub Workbook_SheetSelectionChange(ByVal ds As Object, ByVal Target As Excel.Range)
If LCase(ds.Name) = LCase(dsWarningSheet) Then
For Each ds In ActiveWorkbook.Sheets
ds.Visible = True
Next
ActiveSheet.Visible = xlVeryHidden

Sheets("Sheet1").Visible = False
End If


End Sub

Private Sub workbook_open()
Sheets(dsWarningSheet).Select
For Each ds In ActiveWorkbook.Sheets
ds.Visible = True

Next
ActiveSheet.Visible = xlVeryHidden


End Sub
 

Jam

XLDnaute Accro
Re : Aidez moi svp, je cale...

Salut la_vera1,

A vue de nez, je penche pour une feuille qui est masquée au moment de l'enregistrement, puis qui bloque au moment du démarrage du fichier.

1) Tu utilises dans ton code le nom "apparent" de la feuille (sheet 2). Je te conseille d'utiliser le nom interne de la feuille, qui lui ne changera pas même si on renomme la feuille.
Pour cela il faut utiliser la propriété (Name) des propriétés et donner un nom précis à ta feuille. Tu peux ensuite l'utiliser de cette façon: maFeuille.Activate au lieu de Worksheets("maFeuille").activate

2) Debug ton programme en utilisant le mot clé Stop au démarrage et vérifie où plante ton programme

Tu devrais trouver le problème rapidement :)

Bon courage
 

Jam

XLDnaute Accro
Re : Aidez moi svp, je cale...

Re,

J'ai fait un bête copier-coller de tes fonctions.
Avec Option Explicit activé en tête de module, bah, ça plante d'entrée (variable ds non dimensionnée).
Ensuite ça plante au premier enregistrement...et à l'ouverture !

Peux-tu envoyer ton fichier ? Ce sera plus simple pour trouver le problème.
 

la_vera1

XLDnaute Nouveau
Re : Aidez moi svp, je cale...

Merci bcp poour ta reponse...

Je pense que j'embrouille en peu ma macro...

je lui demande de cacher ma feuille de donnees sources
d'afficher la feuille erreur qd l'utilisateur n'accepte pas les macros
je pense bien c tt cela coince.

par contre je n'arrive pas a envoyer le fichier... trop lourd!
dc je t'ai copier/colle mes modules 1 et 2 et contenu du fichier "this workbook"
jai trois Feuilles importantes:
- Presentation
- sheet1 ( la ou je vais cacher tous mes donnees sources, que je masque quand l'utilsateur accepte les macros.
- sheet2 (celle qui doit apparaitre qd utilisateur n'accepte pas les macros)


les reste des feuilles sont des feuilles de calcul qui devron ete egt masquees si l'utilisateur n'accepte pas les macros.


Merci pour ton aide.

VN.



ds this workbook copie/colle:



Private Const dsWarningSheet As String = "sheet2" 'Enter name of the Entry/Warning Page

Private Sub Workbook_Beforesave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Sheets("Presentation").Select
Range("i1") = Now 'will save the last date when the workbook was updated


If SaveAsUI = False Then
Cancel = True
MsgBox "The 'Save' function for this workbook has been disabled. " & Chr(10) & " You will only save this document if you rename the workbook" & Chr(10) & "" & Chr(10) & " Click Ok, If you want to rename this forder", vbOKOnly + vbInformation, "Save Disabled"
Application.Dialogs(xlDialogSaveAs).Show CStr(ThisWorkbook.ActiveSheet.Range("A1").Value)

End If


'a = MsgBox("Do you really want to save the workbook?", vbYesNo)
' If a = vbNo Then Cancel = True
' Application.Dialogs(xlDialogSaveAs).Show CStr(ThisWorkbook.ActiveSheet.Range("A1").Value)

'End Sub
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)


Sheets("Presentation").Select
Range("i1") = Now 'will save the last date when the workbook was updated

For Each ds In ActiveWorkbook.Sheets
If LCase(dsWarningSheet) = LCase(ds.Name) Then
ds.Visible = True
Else
ds.Visible = xlVeryHidden
End If

Next



End Sub



Private Sub workbook_open()
Sheets(dsWarningSheet).Select
For Each ds In ActiveWorkbook.Sheets
ds.Visible = True

Next
ActiveSheet.Visible = xlVeryHidden


End Sub


Private Sub Workbook_SheetSelectionChange(ByVal ds As Object, ByVal Target As Excel.Range)
If LCase(ds.Name) = LCase(dsWarningSheet) Then
For Each ds In ActiveWorkbook.Sheets
ds.Visible = True
Next
ActiveSheet.Visible = xlVeryHidden

Sheets("Sheet1").Visible = False
End If


End Sub




ds module 1

' Déclaration de la Barre de Calcul EXCEL comme Variable Publique

Public Barre_Excel As CommandBar
Public visualisation_parametres As Integer

Public visualisation_bulletin As Integer


' Auto_ouvrir Macro en version Excel XP

Sub Auto_open()

' Permet d'ajouter des MENUS PERSONNALISES dans la Barre Calcul
'garde le menu excel(fichier, édition...)

Set Barre_Excel = CommandBars.ActiveMenuBar

Set Barre1 = Barre_Excel.Controls.Add(msoControlPopup, Before:=10)
Barre1.Caption = "&Menu 1) "

Set Barre2 = Barre_Excel.Controls.Add(msoControlPopup, Before:=11)
Barre2.Caption = "&Menu 2 "




' Permet d'ajouter des SOUS-MENUS dans les Menus Personnalisés
' Sous-Menus Menu Personnalisé n°1

Set Barre11 = Barre1.Controls.Add(Type:=msoControlButton, Before:=1)
With Barre11
.Caption = "option 2"
' .OnAction = "opt_2"
End With

Set Barre12 = Barre1.Controls.Add(Type:=msoControlButton, Before:=2)
With Barre12
.Caption = "option 3"
' .OnAction = "opt_3"
.BeginGroup = True
End With




Set Barre21 = Barre2.Controls.Add(Type:=msoControlButton, Before:=1)
With Barre21
.Caption = "option 4"
' .OnAction = "opt_4"
.BeginGroup = True
End With




Sheets("Presentation").Select
Range("A1").Select



End Sub

Sub Fin_Travail()

'se mettre sur cette feuille
Sheets("Presentation").Select
Range("A1").Select

Response = MsgBox("Would you like to save your workbook ?", vbYesNoCancel)
If Response = vbYes Then
MsgBox "Please use the 'Save as' option. Thank you ", vbInformation

If vbCancel Then
Sheets("Presentation").Select
End If
Else


Auto_close

End If

End Sub

Sub Auto_close()

MsgBox "If you've created a new folder, do not forget to send the old folder in the Z-OLD. Thanks you.", vbExclamation, "Vera's Tips"

Set Barre_Excel = CommandBars.ActiveMenuBar
Barre_Excel.Controls(10).Delete
Barre_Excel.Controls(10).Delete

ActiveWindow.Close savechanges:=False


End Sub




ds module 2 copie/colle:
Sub Save111()


'a = MsgBox("Do you really want to save the workbook?", vbYesNo)
' If a = vbNo Then Cancel = True

Sheets("Presentation").Select
Application.Dialogs(xlDialogSaveAs).Show CStr(ThisWorkbook.ActiveSheet.Range("A1").Value)
Range("i1") = Now


End Sub






Merci!!!!
 

Jam

XLDnaute Accro
Re : Aidez moi svp, je cale...

Re,

Pour la déclaration de variable, pour cela, dans le VBE, va dans les Outils>Options>Editeur et coche Déclaration des variables obligatoires.
A chaque fois que tu ajoutes un module une ligne Option Explicit sera en entête de module et obligera la déclaration des variables.
Je regarde en ce moment ton code et j'ai une question: Y a-t-il des feuilles masquées avant l'ouverture du fichier ?
 

la_vera1

XLDnaute Nouveau
Re : Aidez moi svp, je cale...

Oui.

il y a des feuilles masquees

ds this workbook beforeclose.
la macro doit masquer ttes les feuilles mais laisser apparaitre la feuille erreur.

Du coup, qd j'ouvre le fichier, "Private Sub workbook_open" se lance et permet de demasquees ttes les feuilles (sauf mon fichier ou j'ai ttes mes donnees) + de masquer la feuille erreur.

Si jamais l'utilisateur n'accepte pas les macros, et ben il ne verra que la page erreur a l'ecran, le reste sera masque.

Le truc que je comprends pas, c que qd le sauvegarde, certaines feuilles se msquent.... (???).

C'est pas ce que je veux....
 

la_vera1

XLDnaute Nouveau
Re : Aidez moi svp, je cale...

Autre chose Jam,

A chaque fois que je sauvegarde mon donc... les macro les instructions du this workbook ne marche plus a l'ouverture suivante...

Des que cela arrive, je vais ds VBA ou est surligne en jaune fluo ce qui ne fonctionne pas ... d'ailleurs c la private sub workbook open qui deconne en 1er... en fait ca me surligne ma feuille d'erreur qui ne doit s'afficher que si les macros st desactivees...

Quand je rencontre cette erreur, je clique sur "reset"
tente de fermer a nveau mon travail --> nveau bug --> debugger --> reset de nouveau un bug et une 3eme fois reset.

Maintenant mon doct est sauvegarder.

Je le re-ouvre et il marche a nouveau.

Y a t'il un moyen de reinitialiser mon travail.. c peut etre une piste
 

Jam

XLDnaute Accro
Re : Aidez moi svp, je cale...

Re,

J'ai pas encore pu creuser complètement mais j'ai vu que mes menus ont été bouffés par la procédure qui supprime les menus !!! :( Va falloir revoir ça complètement avant de mettre ça à disposition de tes collaborateurs, sinon ils risquent de pas être content du tout !
Pour le masquage des feuilles, a priori tu ne fais pas ce que tu indiques vouloir faire !
Tu utilises les procédures Auto_Open et Auto_Colose qui n'ont plus lieu d'être depuis Excel 2000.

Bref, y'a du boulot !

Je travaille dessus et te renvois quelque chose d'un peu aboutit dans l'après-midi.
 

Jam

XLDnaute Accro
Re : Aidez moi svp, je cale...

Question: Veux-tu que le nouveau fichier enregistré se comporte de la même façon, c'est à dire que les feuilles soient masquées si les macros ne sont pas activées ?
Si cela n'est pas nécessaire alors la macro Workbook_BeforeClose() est quasiment inutile !!!

A+
 

la_vera1

XLDnaute Nouveau
Re : Aidez moi svp, je cale...

si si il le faut.

Pour utiliser le fichier, les utilisateurs devront utiliser les macros.

dc aucun acces sans acceptation des macros.

tu penses que c'est faisable...

Lol.. pr excel 2000, j'ai eu peur.

Merci pour tout Jam.
 

Jam

XLDnaute Accro
Re : Aidez moi svp, je cale...

Nouvelle question:
Dans ton premier post tu indiques que tu veux que les utilisateurs enregistre les modifs dans un nouveau fichier. Vont-ils être obligé de le faire à chaque fois ? le risque c'est d'avoir 20.000 fichiers au final !!! Es-tu sur de vouloir faire cela ?
 

la_vera1

XLDnaute Nouveau
Re : Aidez moi svp, je cale...

En fait, c'est un fichier qui va devoir etre mis a jour par 15 utilisateurs differents.
J'ai donc penser a bloquer la fonction "save" pour obliger tt le monde a sauvegarder sous en mettant leur intiales... Comme cela on saura qui a update le fichier en dernier.

Eh oui, on aura +sieurs fichiers (avc different nom..) mais je vois pas d'autre solution.

Ah moins que tu aies une autre idee...
 

Discussions similaires

Statistiques des forums

Discussions
312 345
Messages
2 087 482
Membres
103 557
dernier inscrit
gerard.messerlin68@orange