IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Définition du type de fichier lors de la sauvegarde par macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 106
    Par défaut Définition du type de fichier lors de la sauvegarde par macro
    Bonjour!

    J'ai un fichier qui a été créé en XL-2003 qui sera sous peu utiliser en XL-2007. J'ai testé mes macros à l'avance sur un poste test (puisque ce fichier est utilisé par plusieurs utilisateurs) et j'ai relevé un problème.
    J'ai un bouton qui contien la macro suivante qui a pour but de copier une feuille dans un nouveau classeur, enregistrer le nouveau classeur puis le fermer pour revenir au classeur d'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub CommandButton1_Click()
    Dim NoPost As String, VariableNom As String
    Dim FileD As FileDialog
    Set wrk = Application.Workbooks.Add(1)
     
    ThisWorkbook.Sheets("Rapport PostMortem").Copy Before:=wrk.Sheets(1)
    Application.DisplayAlerts = False
    wrk.Sheets("Feuil1").Delete
    Application.DisplayAlerts = True
     
    NoPost = ThisWorkbook.Sheets("Rapport PostMortem").Range("C3").Value
    VariableNom = "Rapport PostMortem no " & NoPost
     
    Set FileD = Application.FileDialog(msoFileDialogFolderPicker)
    If FileD.Show = True Then
        wrk.SaveAs Filename:=FileD.SelectedItems(1) & "\" & VariableNom
    End If
    wrk.Close
    End Sub
    Mon problème est qu'en XL-2007, il y a plusieurs type de fichier XL dont un format avec macro et un format sans macro. Comme la feuille qui est copiée dans le nouveau classeur contient des boutons (donc des macros), lorsque j'enregistre XL me donne l'erreur placée en pièce jointe.

    Y a-t-il un moyen dans mon code de définir le format de fichier "Excel sans macro" qui serait en fait l'équivalent de cliquer sur le bouton "Oui" à ma fenêtre d'erreur tout en restant transparent pour l'utilisateur?

    Un gros merci à l'avance!
    Geneviève
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Oui mais...
    Oui, utilise l'enregistreur de macro sous 2007. On obtient ceci auquel il faut ajouter la suppression des alertes (boite de dialogue) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:= _
            "C:\Documents and Settings\Admin\Bureau\essa.xlsx", FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False
    Application.DisplayAlerts = True
    Mais, il reste le problème que les boutons seront visibles et provoqueront une erreur si l'on clique dessus. Il faut les supprimer par macro. N'y a-t-il que des boutons à supprimer ?

    A voir.

    ESVBA

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut une idée
    bonjour

    l'extention xls ----->>>>>excel 2000 a 2003

    l'extention xlsx c'est pour les classeur sans macro de excel 2007

    l'extention xlsm et xltm pour les classeur avec macro de excel 2007

    cependant l'extention xls accepte les macros
    donc je ne comprend pas tres bien ton probleme

    cela di dans ton code que tu a cite tu copy simplement un feuillet et non pas le classeur complet donc le classeur obtenue n'a pas de userform ou macro
    donc la encore je ne comprend pas ton problem
    puisque le classeur n'a pas de macro a quoi ca sert de l'enregistrer au format avec macro

    voila maintenant si le classeur obtenu doit aussi posseder l'userform que tu utilise tu dois soit exporter le projet ou simplement sauver le classeur d'origine sous un autre nom et suprimer le cas echeant ce que tu veux dans le nouveau classeur

    voila
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 106
    Par défaut
    patricktoulon,

    Si tu regarde mon message d'origine, tu trouveras l'explication suivantes:
    Comme la feuille qui est copiée dans le nouveau classeur contient des boutons (donc des macros), lorsque j'enregistre XL me donne l'erreur placée en pièce jointe.
    Tu m'indique que
    l'extention xls accepte les macros
    ce que je sais. Je veux totuefois enregistrer mon fichier en format 2007 donc .xlsx

    ESVBA,
    Merci de ton aide, comme je n'ai pas encore 2007 à portée de main, il m'est difficile de faire des test avec l'enregistreur! Je testerai avec 2007 ta solution dès que possible!
    Pour les boutons, oui il y en a seulement 2, mais encore là je fige... comme les boutons sont maintenant dans un nouveau classeur, j'ai de la difficulter à aller les supprimer...


    Merci beaucoup de ton aide!
    Geneviève

  5. #5
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Une idée...
    La question est : où est le code des boutons ?
    • Dans la feuille contenant les boutons
    • Dans un module externe
    • Dans "ThisWorkbook"


    Il n'y a pas à ma conaissance de problème pour supprimer les boutons sur un autre classeur :
    1) j'ouvre le nouveau classeur
    2) je copie la feuille avec les boutons
    3) je supprime les boutons en donnant les références sur le nouveau classeur
    4) je ferme le nouveau classeur avec sa feuille.
    5) Je me retrouve avec mon modèle de feuille.

    http://excel.developpez.com/faq/inde...ouveauClasseur
    http://excel.developpez.com/faq/inde...eObjFormulaire

    ESVBA

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 150
    Par défaut
    Salut,
    en ce qui concerne ton problème d'enregistrement (SAVE AS) c'est tout à fait normal sous XL 2007.
    Tu dois absolument préciser le format.
    voici la liste de ceux que je connais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    '            Case "xls": FileFormatValue = 56
    '            Case "xlsx": FileFormatValue = 51
    '            Case "xlsm": FileFormatValue = 52
    '            Case "xlsb": FileFormatValue = 50
    et ca donne donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(sWk).SaveAs Left(File, Len(File) - 3) & "xlsx", 51
    Pour les boutons ca se déclare sur la feuille

    Donc ca donne quelque chose comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(sWk).Sheets(i).CommandButton.Visible=False
    Le souci c'est qu'il n'y a pas de méthode Delete pour les CommandButton
    Il faut donc ruser un peu. Voici comment faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim oOLE As OLEObject
    For Each oOLE In ThisWorkbook.Sheets(i).OLEObjects
        If TypeName(oOLE.Object) = "CommandButton" Then
            oOLE.Delete
        End If
    Next
    J'espère t'avoir aider un peu

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour a tous

    tu peu aussi l ors de l'enregistrement
    metre tous tes boutons a l'etat false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private sub enregistrer ()'a condition que le nom du bouton soit "enregistrer"
    application.displayalerts=false
    enregistrer.visible=false 'et repeter l'operation pour tout les boutons 
     
        Sheets("Feuil1").Select
        Sheets("Feuil1").Copy
           ActiveWorkbook.SaveAs Filename:= "C:\Users\patrick\Desktop\nouveau classeur.xlsx", FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False
        ActiveWindow.Close
    End Sub

    et la tu remet tout les boutons a l'etat visible=true
    voila en gros tu a
    rendu tout tes boutons invisible dans le classeur d'origine

    copier la feuille 1 dans un nouveau classeur qui dans cet exemple porte le nom de "nouveau classeur" au format xlsx(donc sans macro) le fait de metre "application displayalerts=false fera que aucune fenetre d'alert sera declenchée
    ensuite active windows.close ferme ce nouveau classeur
    tu te retrouve donc avec le classeur d'origine sans les boutons a ton ecran
    tu remet donc tout les boutons a l'etat visible =true
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     enregistrer.visible=true
    voila je crois que je peu pas faire plus simple comme explication

    au plaisir

    voila
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 106
    Par défaut
    Bonjour à vous tous!

    D'abord, un grand merci pour vos réponses qui sont toutes très appréciées! Je tiens à m'excuse de ne pas vous avoir répondu plus rapidement, des événements hors de mon controle m'ont obligé à laisse mon projet de coté depuis quelques temps.

    J'ai testé les 2 dernières idées pour mes boutons
    - Visible=False
    - oOLE.Delete

    Les deux fonctionnent bien. Parcontre, la macro reste présente dans le document et Excel souhaite activer les macros à l'ouverture du fichier. Y a-t-il moyen de supprimer les macros en même temps que le bouton avec oOLE.Delete?

    Pour la sauvegarde en 2007, je ferai mes tests lorsque nous auront fait la transition. En attendant, je prend bonne notes de vos suggestions.

    Merci encore de prendre le temps de me trouver des solutions!!

    Bonne journée!
    Geneviève

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 150
    Par défaut
    Rebonjour

    tu peux essayer un code du genre pour deleter tout ton vba

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub DeleteAllVBA()
        Dim x               As Integer
     
        With ActiveWorkbook.VBProject
            For x = .VBComponents.Count To 1 Step -1
                .VBComponents.Remove .VBComponents(x)
            Next x
            For x = .VBComponents.Count To 1 Step -1
                .VBComponents(x).CodeModule.DeleteLines _
                1, .VBComponents(x).CodeModule.CountOfLines
            Next x
        End With
        On Error GoTo 0
    End Sub
    A adapter a ta situation....
    Il n'est pas des plus propre mais je pense qu'avec ce bout de code tu vois ou aller chercher si tu veux affiner ton developpement.

    Pour enlever les macros à l'ouverture du fichier
    Met au début de ta macro (celle que tu as déjà dev)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents=false
    et tu le repasse à True à la fin.

    Dis moi si tu as encore des soucis.

Discussions similaires

  1. Inscription automatique du nom du fichier lors de la sauvegarde
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/07/2010, 09h31
  2. Probleme inversion jour et mois lors d'une copie par macro
    Par alex830001 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/09/2008, 15h29
  3. Formulaire bloqué lors d'une ouverture par macro.
    Par Monsieur Peck dans le forum IHM
    Réponses: 6
    Dernier message: 16/06/2006, 17h41
  4. Réponses: 10
    Dernier message: 18/11/2003, 18h01
  5. Bloquer le téléchargement de certains types de fichiers
    Par Nikos dans le forum Développement
    Réponses: 4
    Dernier message: 23/12/2002, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo