Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

code qui spécifie pour sa copie du fichier de ne pas exécuter les macros

Ham35

XLDnaute Nouveau
Bonjour,

Grosse prise de tête depuis 2j! Voici mon pb :

J'ai un fichier A avec plusieurs feuilles et chacune de ces feuilles possèdent ces propres macros (affectées à des boutons).
J'ai un code qui me permet de copier uniquement la feuille active du fichier A dans un nouveau fichier B. Ce dernier se dénommera alors ; "Copie de "nom de la feuille copiée dans le fichier A"

Mon problème est que je ne veux pas que les macros soient actives sur ce fichier B. Comme lu auparavant, il semble difficile de supprimer les macros de cette copie.
J'ai tout de mm trouver un code qui permettait d'enregistrer sans les macros mais ou il fallait spécifié le nom du fichier copier! Pour moi, cela ne me convient pas puisqu'il change en fonction de la feuille active du fichier A.

Alors, comment faire entrer dans mon bout de code (ci-dessous) que lorsque la copie B s'ouvrira, les macros devront être "inactives"?

Dim shtName As String, fName As Variant
Dim Datedujour, datedujour2, datedujour1, jour, annee, mois1, mois2

ActiveWorkbook.Save
For Each Sheet In Sheets
ActiveSheet.Unprotect

Next
shtName = ActiveSheet.Name
Datedujour = Date
datedujour1 = Replace(Datedujour, "/", "")
jour = Left(datedujour1, 2)
annee = Right(datedujour1, 4)
mois1 = Left(datedujour1, 4)
mois2 = Right(mois1, 2)
datedujour2 = annee & mois2 & jour

ActiveSheet.Copy

Set fName = ActiveWorkbook
fName.SaveAs Filename:=Application.GetSaveAsFilename("\\csaid_vit_fs1\DATA\IMAGES\A.Le Gal\" & datedujour2 & "_Copie de " & shtName, _
"Microsoft Excel File, *.xls", , ""), _
FileFormat:=xlNormal, Password:="", WriteResPassword:="introuvable", _
ReadOnlyRecommended:=True, CreateBackup:=False


Pfffiou! c'est long ! J'espère que cela ne vous découragera pas!

Merci d'avance
 
G

Guest

Guest
Re : code qui spécifie pour sa copie du fichier de ne pas exécuter les macros

Bonjour Ham35,

Déjà pour le calcul de datejour2:

Code:
datedujour2 = Format(Date, "yyyymmdd")


J'ai tout de mm trouver un code qui permettait d'enregistrer sans les macros mais ou il fallait spécifié le nom du fichier copier!
Passe nous le code que tu as trouvé pour copier la feuille sans macro, il y a sûrement moyen de modifier automatiquement le nom du fichier à enregistrer.
A+
 
G

Guest

Guest
Re : code qui spécifie pour sa copie du fichier de ne pas exécuter les macros

Re bonjour Ham,

Voici une macro qui copie une feuille et l'enregistre avec le nom souhaiter.
regarder les lignes en commentaire.

Code:
Sub CopierFeuilleSansCode()
    Dim VBComp As Variant
    Dim VBComps As Variant
    Dim shtName As String
    Dim saveName As String
    Feuil2.Copy
 
    With ActiveWorkbook
        'ATTENTION NE PAS APPLIQUER CES LIGNES
        'SUR LE CLASSEUR APPELANT
        'TOUTES LES MACROS SERAIENT DETRUITE
        Set VBComps = .VBProject.VBComponents
        For Each VBComp In VBComps
            Select Case VBComp.Type
            Case 1 To 3
                VBComps.Remove VBComp
            Case Else
                With VBComp.CodeModule
                    .DeleteLines 1, .CountOfLines
                End With
            End Select
        Next VBComp
        '----------------------------------------------
        'Si l'utilisateur annule la boîte de dialogue
        'une erreur sera levée lors de l'enregistrement du classeur
        'il faut donc mettre le nom retourné par la boîte de dialogue
        ' dans une variable
        saveName = Application.GetSaveAsFilename( _
                            "\\csaid_v it_fs1\DATA\IMAGES\A.Le Gal\" & _
                            Format(Date, "yyyymmdd") & "_Copie de " & ActiveSheet.Name, _
                            "Microsoft Excel File, *.xls", , "")
 
        'Si la varialble est différente de False
        'C'est que l'utilisateur n'a pas annuler la boîte de dialogue
        If saveName <> False Then
            .SaveAs Filename:=saveName, _
                            FileFormat:=xlNormal, Password:="", WriteResPassword:="introuvable", _
                            ReadOnlyRecommended:=True, CreateBackup:=False
        End If
    End With
 
End Sub

Bonne continuation
 

Ham35

XLDnaute Nouveau
Re : code qui spécifie pour sa copie du fichier de ne pas exécuter les macros

hé! quelle rapidité! Merci !

Je regarde de plus près ce que tu m'as écrit en notant que je n'avais pas copié tout le code puisqu'à la fin, j'ai noté :

If fName.Name = "FALSE.xls" Then
DeleteBook:
With ActiveWorkbook
.ChangeFileAccess xlReadOnly
Kill .FullName
.Close False
End With
Else
With Application
.DisplayAlerts = False
.Dialogs(xlDialogSendMail).Show
End With
CloseBook:
With ActiveWorkbook
ActiveSheet.Protect
'expression.ChangeFileAccess(Mode, WritePassword, Notify)
.ChangeFileAccess xlReadOnly, "introuvable", False
.Close False

End With
Terminator:
Application.DisplayAlerts = True
End If


je te joins tout de mm le code trouvé pour copier la feuille sans macro :

Sub SaveAsWithoutMacros()
Dim NomSource$, CheminDest$, NomDest$
Dim VBC As Object

NomSource = "EssaiSaveAs.xls" 'à adapter
CheminDest = "C:WindowsTemp" 'à adapter
NomDest = "Essai.xls" 'à adapter

Workbooks(NomSource).SaveAs CheminDest & NomDest

With ActiveWorkbook.VBProject
'cette partie du code est de Laurent Longre
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC 'LL
 
G

Guest

Guest
Re : code qui spécifie pour sa copie du fichier de ne pas exécuter les macros

Re Ham

Le classeur appelant est le classeur qui appel la macro.
En l'occurence celui dont une feuille est à copier.
C'est pour éviter ce genre d'erreur que j'ai mis à l'interieur de la macro le Feuil2.Copy. De cette manière on est sûr que le classeur Actif est le nouveau classeur créé par l'instruction, c'est sur celui-ci que vont être alors détruites les macros.

Si une erreur se déclenche lors de l'éxecution des lignes de destruction de macro alors cocher dans les références du projet du classeur appelant la référence a Microsoft visual basic for extensibility x.x où x.x est un numéro de version quelconque.

A bientôt
 

Ham35

XLDnaute Nouveau
Re : code qui spécifie pour sa copie du fichier de ne pas exécuter les macros

Cela ne fonctionne pas!

Message d'erreur :
Erreur d'exécution '1004' :
L'accès par programme au projet Visual Basic n'est pas fiable

et ligne code suivante ou le bogage a eu lieu :
Code:
 Set VBComps = .VBProject.VBComponents
 
G

Guest

Guest
Re : code qui spécifie pour sa copie du fichier de ne pas exécuter les macros

Re bonjour Ham,

Dans le post #6 je dis ceci:


Ce qui résoudra le problème.

A bientôt
 

Pierrot93

XLDnaute Barbatruc
Re : code qui spécifie pour sa copie du fichier de ne pas exécuter les macros

Bonjour Ham, Hasco

A priori, si je ne me trompe pas (sous excel2003) , pour ce type d'erreur :

L'accès par programme au projet Visual Basic n'est pas fiable

il faut cocher la case "faire confiance au projet visual basic" => barre de menu Excel => outils => Macro => sécurité => onglet "éditeurs approuvés".

bonne soirée
@+
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…