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...

- Le partage de fichier, si tout le monde travail sur le même réseau. J'aime pas beaucoup mais ça marche.
- La sauvegarde des données dans une base de données + les infos de la personne qui fait des modifs

En fait il y a plein de solutions différentes en fonction de ton projet.
Bon, je vais pas tarder à t'envoyer une soluce.
 

Jam

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

A y est !

Tu trouveras un fichier avec le code qui va bien. J'ai commenté le plus possible le code.
Les feuilles sont aussi commentées afin de bien comprendre la logique.

J'espère que cela te conviendra.

Bon courage

PS./ y'a qu'un micro bug...si des personnes ont fait des modifs et qu'elles ferment le fichier il sera fermé sans demander de si elles veux sauvegarder les modifications.
 

Pièces jointes

  • test 3.zip
    21.8 KB · Affichages: 32
  • test 3.zip
    21.8 KB · Affichages: 30
  • test 3.zip
    21.8 KB · Affichages: 30

la_vera1

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

Merci Jam, tt marche nickel!!

Derniere question tt de mm...

j'ai repris le travail que j'avais fait pr l'incorporer ds le nveau fichier.

la sheet3 contient en fait un tableau.

ce tableau a certaines colonnes qui doivent être mises à jour par l'utilisateur.
J'ai protegé la feuille 3 par mot de passe (pr que personnes ne modifie les formules de calcul de certaines cases).

A l'aide de ma macro
- j'enlevais la protection de la sheet3
- j'affichais une userform ( à renseigner par l'utilisateur)
- le resultat était ensuite colle ds le tabl.

Comme mon module a changé, qd je lance ma macro de mise à j des donnees j'ai un msg d'erreur: qui surligne ma ligne password. Je dois declarer une variable...

Sub extraction_unprotect()

Sheets("Extraction").Select
Password = "commercial"
ActiveSheet.Unprotect Password
End Sub

J'ai colleé: Dim Response As Variant

Mais je pense que c'est pas bon.

Du tte ma macro stoppe.

Une idee (stp???)

J'espere que je suis precise....

Merci pour tout!!

VN.
 

la_vera1

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

Slt Jam,
je t'envoie le fichier en zip...
J'y pris les modules que tu as mofifier et ajouter ce que j'avais construit...

le module 1 marche nickel ( ajout / suppression des menus)
lles 3 autres qu'en partie car il fo que je declare certaines avraibles..

Mon soucis: je commence par ou???

Je ne connaissais pas l'existence des variables il ya 2 semaines...

Je te demande encore ton aide stp...

J'ai mis le max de commentaire.

J'ai pris le fichier que tu mas envoye et ajouter les modules.
J'ai voulu zipper mon doct, mais c trop lourd....
il y a de userform que j'ai cree mais que je b'ai pas pu joindre au fichier, car j'ai voulu l'alleger...

Dsl... c'est pas facile de bosser comme ca sans toutes les infos.
Mais je pense que si le code est bon, je pourrais m'en sortir.

Merci encore.
 

Pièces jointes

  • TEST3bis.zip
    34.8 KB · Affichages: 27

Jam

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

Salut la_vera,

Je vais pas avoir beaucoup de temps aujourd'hui...faut que je donne un peu de mon temps à l'entreprise qui me paie.
Le fait que tu ne connaisses pas les variables ne va pas simplifier la tache. Plutôt que de te corriger ton code, je préfère dans un premier temps que tu essaies de le faire par toi-même, j'essaierai de te guider...cela aura l'avantage d'être plus formateur.

Donc, pour tester les variables le plus simple c'est de mettre Option Explicit en en-tête de tous tes modules puis d'aller dans le menu Débogage>Compiler VBAProject. S'il y a des erreurs de déclaration il va les détecter et te les signaler. Il te faudra donc trouver à ce moment là la variable la plus à même de répondre (du texte, alors String - un nombre entier alors Int, etc...). Tu trouveras dans l'aide VBA d'Excel tous les types de variable en faisant une recherche sur "Résumé des types de données".

J'essaierai de regarder ton code dans la journée, mais ça va être un peu dur aujourd'hu.

Bon courage.
 

Discussions similaires

Statistiques des forums

Discussions
315 097
Messages
2 116 186
Membres
112 679
dernier inscrit
Yupanki