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 :

[Excel] Sauvegarder un classeur sans userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 12
    Points
    12
    Par défaut [Excel] Sauvegarder un classeur sans userform
    Bonjour à tous,

    J'ai un classeur avec un userform de controle d'acces et quelques macros, j'ai utilisé un "savecopyas" avec la date de la veille.
    Je souhaites que ma copie (qui me sert d'historique) ne comporte pas d'userform ni de macros.

    Y a t'il une solution ?

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Salut je vois 2 solutions à ton problème :

    1°) Solution 1

    Tu mets ton userform dans un autre classseur (avec les macros) et celui qui contiens les données peut alors être sauvegarder comme tu le veux.

    2°) Solution 2

    Lors de la création de l'historique, tu crés un nouveau classeur et tu y insère une copie des feuilles que tu veux qu'il contienne


    Est-ce que c'est ce que tu cherches

    Dis-nous si cela te conviens

    Igloobel

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    En mettant le userform et les macros sur un autre classeur, cela fonctionne impec merci !
    J'aurai une autre question, quel est le problème avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
     
    Sheets("PT CVD NOV 06h00").Select
    Range("C7:I47").Select
    Selection.Copy
    Range("C7").Select
    Sheets("PT CVD NOV WT").Select
    Range("C7").Select
    ActiveSheet.Paste
    Range("C7").Select
     
    End Sub
    car il fonctionne bien en tant que macro mais quand je l'affecte un un bouton de controle j'ai une erreur "la methode select de la classe range a échoué" ??

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    La copie des feuilles de calculs proposée par Igloobell ma paraît la moins dangereuse. Néanmoins, tu peux utiliser une macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'Supprimer la macro nommée "MaMacro" dans le "module3"  'ofset
    Sub supprimerUneMacroPrecise()
    Dim Debut As Integer, Lignes As Integer
        With ThisWorkbook.VBProject.VBComponents("Module3").CodeModule
            Debut = .ProcStartLine("MaMacro", 0)
            Lignes = .ProcCountLines("MaMacro", 0)
        '.DeleteLines Debut, Lignes
        End With
    End Sub
    Trouvé sur le forum (silkyroad ? leroissejp ? bbill ?, megaxel ?...) Je ne me souviens plus

    Si ça peut te servir

    A+

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Second pb : Essaie de supprimer la ligne '****

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sheets("PT CVD NOV 06h00").Select 
         Range("C7:I47").Select 
         Selection.Copy 
         '*****Range("C7").Select 
         Sheets("PT CVD NOV WT").Select 
         Range("C7").Select 
         ActiveSheet.Paste
         Range("C7").Select 
    End Sub
    Sinon, je ne vois pas

    A+

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par maketossss
    En mettant le userform et les macros sur un autre classeur, cela fonctionne impec merci !
    J'aurai une autre question, quel est le problème avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
     
    Sheets("PT CVD NOV 06h00").Select
    Range("C7:I47").Select
    Selection.Copy
    Range("C7").Select
    Sheets("PT CVD NOV WT").Select
    Range("C7").Select
    ActiveSheet.Paste
    Range("C7").Select
     
    End Sub
    car il fonctionne bien en tant que macro mais quand je l'affecte un un bouton de controle j'ai une erreur "la methode select de la classe range a échoué" ??
    lorsque tu écris Sheets("PT CVD NOV 06h00").Select tu fais référence à la feuille "PT..." du classeur actif.. si ton bouton n'est pas dans le même classeur ... tu doit tout d'abords activer le bon classeur ...
    workbooks("MonClasseur").activate...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonsoir,
    Modifie ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub CommandButton1_Click()
     
    Sheets("PT CVD NOV 06h00").Select
    Range("C7:I47").Select
    Selection.Copy
    Range("C7").Select
    Sheets("PT CVD NOV WT").Select
    Sheets("PT CVD NOV WT").Range("C7").Select
    ActiveSheet.Paste
    Sheets("PT CVD NOV WT").Range("C7").Select
     
    End Sub
    jpleroisse

  8. #8
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    bbil a été plus vite que moi Je suis entièrement d'accord avec ce qu'il a dit :
    lorsque tu écris Sheets("PT CVD NOV 06h00").Select tu fais référence à la feuille "PT..." du classeur actif.. si ton bouton n'est pas dans le même classeur ... tu doit tout d'abords activer le bon classeur ...
    workbooks("MonClasseur").activate...
    "MonClasseur" contenant ladite feuille :"PT CVD NOV 06h00"

    Alors ... Cela fonctionne t'il au final

    ouskel'n'or a dit :
    La copie des feuilles de calculs proposée par Igloobell ma paraît la moins dangereuse...
    Peux-tu me dire pourquoi elle te parait moins dangeureuse ?
    (Toujours avide d'apprendre merci )

    Igloobel

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    La copie des feuilles de calculs proposée par Igloobell ma paraît la moins dangereuse...
    Peux-tu me dire pourquoi elle te parait moins dangeureuse ?
    (Toujours avide d'apprendre merci )
    Hello Igloobel, je te réponds...
    Par comparaison avec la solution que tu proposais (la copie des feuilles) la suppression de macros peut être dangereuse lors de la mise au point de la macro qui fait ça... Ça n'allait pas plus loin.
    Ceci dit, maketossss demandant "une" et non "la" solution, je lui ai également proposé celle-là

    Toujours avide ?

    A+

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    En fait ce ne sont pas les macros qui me gène le plus, je souhaiterai "simplement" que dans mon historique, le classeur ne comporte pas de userform avec controle d'accès

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonjour

    cet exemple permet de supprimer l'Userform dans le classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub suppressionUSF()
    'necessite d'activer la reference Microsoft Visual Basic for Applications Extensibility 5.3
    Dim VBComp As VBComponent
    Set VBComp = ThisWorkbook.VBProject.VBComponents("UserForm1")
    ThisWorkbook.VBProject.VBComponents.Remove VBComp
    End Sub

    cordialement
    michel

  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    bonjour,

    Ou dois je mettre ce code, dans le userform ou dans la feuille qui contient le "savecopyas" ?

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Après mure réflexion, tu dois le mettre dans le Sub Workbook_open() de ton fichier avec une condition sur le nom du fichier
    Si le fichier actif a un nom différent de ton fichier NomFich dans "saveas (Nomfich)", alors tu lances la macro.
    Dans le cas inverse, tu t'abstiens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Workbook_open()
         Set LeFich = Application.ActiveWorkbook
         With LeFich
              If LeFich.Name <> NomDuFichierDorigine Then suppressionUSF
         End With
         Set LeFich = Nothing
    End Sub
    A+

  14. #14
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Ca commence à devenir compliqué, je suis completement largué !!!

    Je récapitule, mon code dans Workbook_Open() doit être le suivant ?
    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
     
    Sub Workbook_Open()
    Set LeFich = Application.ActiveWorkbook
         With LeFich
              If LeFich.Name <> consignes Then suppressionUSF
         End With
         Set LeFich = Nothing
     End Sub
     
    Private Sub suppressionUSF()
    Dim VBComp As VBComponent
    Set VBComp = ThisWorkbook.VBProject.VBComponents("UserForm1")
    ThisWorkbook.VBProject.VBComponents.Remove VBComp
    UserForm1.Show
    End Sub

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Hello,

    Non, là tu as un problème : Si Consignes est une variable contenant le nom de ton fichier pricipal, tu dis en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LeFich.Name <> "" Then suppressionUSF
    Quand le fichier a été sauvegardé sous un autre nom, ta macro ne conserve pas le nom du fichier d'origine. Ta variable non plus.

    Tu dois mettre le nom du fichier principal lui-même "NomDuFichier"

    C'est de ma faute, j'aurais dû mettre des guillemets. Sinon, ça semble correct.

    A+

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Hello,

    Tu t'en es sorti ?
    On s'inquiète...

    A+

  17. #17
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    En fait j'ai contourner le probleme en utilisant un autre classeur qui vient tester si le classeur qui m'interresse est ouvert ou pas, avec une message box si tel est le cas

    Merci tout de meme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quand je sauvegarde un classeur excel est lent
    Par Subkill dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/06/2015, 14h51
  2. [VBA - Excel]nom du classeur sans enregistrer
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/01/2008, 14h26
  3. Fermer Excel sans sauvegarder le classeur
    Par GonAl dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/08/2006, 12h32
  4. Automation excel - ouvrir un fichier sans classeur
    Par Celia1303 dans le forum Access
    Réponses: 3
    Dernier message: 23/11/2005, 20h23
  5. [VBA EXCEL]Sauvegarde classeur
    Par Tan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/02/2005, 10h28

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