Mise à jour : Fermer un USRF inclus dans un fichier à l'aide d'un autre fichier

Leskwal

XLDnaute Occasionnel
Bonjour le forum

Voilà ma demande.

J'ai créé une petite appli (avec l'aide de nombreux Forumeurs XLD :)) qui est maintenant largement diffusée auprès des assistantes de mon entreprise.

Victime de son succès, les assistantes me demandent aujourd'hui de rajouter quelques fonctions supplémentaires.

Comme ce fichier est largement dupliqué, je ne me vois pas mettre à jour chaque fichier utilisé.:p

Pour me faciliter le travail, j'ai créé un fichier de mise à jour qui va modifier le fichier désigné.

Et la je tombe sur un problème.

Le fichier de base est protégé sommairement (On ne peut pas le quitter en utilisant la CROIX...).
Quand on le lance, un Userform Apparaît pour indiquer des instructions....

Quand je lance le fichier de mise à jour :

J'indique le fichier à MàJ.
La moulinette fonctionne bien mais le fichier ne se ferme pas automatiquement, et le userform reste actif....:confused:

En fichiers exemple la reproduction de mon problème.

Si une ou plusieurs âmes charitables voulaient se pencher sur mon problème...

Un TRES GRAND MERCI d'avance.

Cordialement

Pascal
 

Pièces jointes

  • Classeur de base.xls
    48 KB · Affichages: 84
  • Mise à jour.xls
    34.5 KB · Affichages: 72
  • Mise à jour.xls
    34.5 KB · Affichages: 81
  • Mise à jour.xls
    34.5 KB · Affichages: 74

PMO2

XLDnaute Accro
Re : Mise à jour : Fermer un USRF inclus dans un fichier à l'aide d'un autre fichier

Bonjour,

Essayez de modifier votre macro1 comme suit

Code:
Sub macro1()
Dim Classeur
Dim WB As Workbook
Classeur = Application.GetOpenFilename("Classeurs Excel,*.xls")
On Error Resume Next
Set WB = Workbooks.Open(Filename:=Classeur)
On Error GoTo 0
WB.Activate
Application.SendKeys "%{F4}", True

' ________________________________________________________________________________________________________________
' ------------------------------------------------- TRAITEMENT ------------------------------------------
' ________________________________________________________________________________________________________________

' Comme le nom l'indique, traitements divers sur le dossier de base.
With WB.ActiveSheet.[a1]
  .Value = "toto"
  .Font.Name = "Courier"
  .Font.Size = 20
End With

' ________________________________________________________________________________________________________________
' ------------------------------------------------- SAUVEGARDE ET FERMETURE ------------------------------------------
' ________________________________________________________________________________________________________________

    

                                ' ----------------------------------------------
                                ' Voilà en gros ce que j'aimerais
                                '
                                '    'Unload LE UserForm1 DU Classeur de base
                                '-----------------------------------------------
            
            

Application.EnableEvents = False
WB.Save
WB.Close SaveChanges:=False
Application.EnableEvents = True
End Sub


Cordialement.

PMO
Patrick Morange
 

Leskwal

XLDnaute Occasionnel
Re : Mise à jour : Fermer un USRF inclus dans un fichier à l'aide d'un autre fichier

Bonjour à tous, PMO2

Si j'osais insister....

Bon, j'ose... :D


La mise à jour d'un fichier via un autre, fonctionne pour des traitements simples tels que mise en forme ...

J'aimerais pouvoir passer à une étape supérieure : :eek:
Lors du traitement (voir fichier exemple joint)!!!,

- Création d'un bouton intitulé "TEST"
- Déverrouillage du VBAProject (MOT DE PASSE : TOTO)
- ET affectation d'un code pour le bouton nouvellement créé.

ex :
Code:
Private Sub CommandButton1_Click()

  MsgBox " TEST OK ", , "Pour INFO"

End Sub


Voilà, Voilà ....


Un grand Merci pour toute aide ...

Cordialement

Pascal
 

Pièces jointes

  • Mise à jour ter.xls
    37.5 KB · Affichages: 59
  • Classeur de base.zip
    15.7 KB · Affichages: 40

PMO2

XLDnaute Accro
Re : Mise à jour : Fermer un USRF inclus dans un fichier à l'aide d'un autre fichier

Bonjour,

Essayez avec le code suivant

Code:
'### Mot de passe à adapter ###
Const PASSWORD As String = "TOTO"
'##############################

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _
    ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Const VK_RETURN = &HD
Const KEYEVENTF_KEYUP = &H2

Sub MiseAjour()
Dim Classeur As Variant
Dim WB As Workbook
Dim VBProj As Object
Dim OL As OLEObject
Dim CB As Object    'MSForms.CommandButton
Dim A$
'--- Ouverture du classeur cible ---
Classeur = Application.GetOpenFilename("Classeurs Excel,*.xls")
If Classeur = False Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False
Set WB = Workbooks.Open(Filename:=Classeur)
Set VBProj = WB.VBProject
'--- Déprotège momentanément le VBE du classeur cible ---
If VBProj.Protection = 1 Then
  Set Application.VBE.ActiveVBProject = VBProj
  SendKeys PASSWORD & "~~"
  Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
End If
'--- (pseudo message) lignes de code nécessaires pour ne pas être bloqué ---
keybd_event VK_RETURN, 0, 0, 0
keybd_event VK_RETURN, 0, KEYEVENTF_KEYUP, 0
MsgBox "La mise à jour s'est correctement effectuée"

' ######## TRAITEMENT ########
'--- Construction d'un commandbutton ---
Set OL = WB.Sheets(1).OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
  , DisplayAsIcon:=False, Left:=60, Top:=100, Width:=100, Height:=40)
Set CB = OL.Object
OL.Name = "MonCommandButton"
CB.BackColor = vbBlue
CB.Caption = "TEST"
With CB.Font
  .Size = 20
  .Bold = True
  .Italic = True
End With
'--- Code du commandbutton ---
A$ = vbCrLf & "Private Sub MonCommandButton_Click()"
A$ = A$ & vbCrLf & "MsgBox " & Chr(34) & "TEST OK" & Chr(34) & ", , " & Chr(34) & "Pour INFO" & Chr(34)
A$ = A$ & vbCrLf & "End Sub" & vbCrLf
With WB.VBProject.VBComponents("Feuil1").CodeModule
  .InsertLines .CountOfLines + 2, A$
End With

' ######## SAUVEGARDE ET FERMETURE ########
Application.DisplayAlerts = False
WB.SaveAs (WB.Path & "/" & "SAUV" & WB.Name)
WB.Close SaveChanges:=False
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True
ThisWorkbook.Close SaveChanges:=False
End Sub


Cordialement.

PMO
Patrick Morange
 

Leskwal

XLDnaute Occasionnel
Re : Mise à jour : Fermer un USRF inclus dans un fichier à l'aide d'un autre fichier

Bonjour à tous, PMO2


Avant même d'essayer le code : Merci pour le temps passé à me répondre...

J'essaie ça et je vous tiens au courant

Très cordialement :)

Pascal
 

Leskwal

XLDnaute Occasionnel
Re : Mise à jour : Fermer un USRF inclus dans un fichier à l'aide d'un autre fichier

Bonjour à tous, PMO2

Je rencontre un petit problème :rolleyes:

Lors de la mise à jour, un message m'indique que le mot de passe est mauvais. Une fenêtre me permet de le rentrer manuellement, et là, ça marche. :D

Pourquoi ??? Je suis en Excel 2007.

Merci d'avance

Cordialement

Pascal
 

PMO2

XLDnaute Accro
Re : Mise à jour : Fermer un USRF inclus dans un fichier à l'aide d'un autre fichier

Bonjour,

Chez moi, sous Excel 2003, cela fonctionne et n'ayant pas Excel 2007 je ne peux rien dire.

Si vous pouviez faire tester par d'autres personnes et sous les 2 versions Excel on pourrait vérifier s'il s'agit d'un problème de version.

???

Cordialement.

PMO
Patrick Morange
 

Discussions similaires

Statistiques des forums

Discussions
312 839
Messages
2 092 685
Membres
105 509
dernier inscrit
hamidvba