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 :

Code "Enregistrer sous" avec nom personnalisé (supprimer bouton) - Sans fermer le Classeur [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Indépendant
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Code "Enregistrer sous" avec nom personnalisé (supprimer bouton) - Sans fermer le Classeur
    Bonjour à tous, je viens à vous pour vous demander votre aide
    Cela semble facile pour certain et il y a pas mal de forum qui en parle mais après avoir tout essayé, je me tourne vers vous

    Le but est d'avoir un bouton (Déja installer et prêt a foncitonner ) qui va tout d’abord "enregistrer sous" dans le même dossier que le fichier de base, avec un nom de fichier personnalisé, dans mon cas : "Olivier" & [C3] & ".xlsm". Celui ci se fera sans que l'utilisateur s'en rende compte. En même temps, je voudrais que le bouton soit supprimer sur la copie et non sur le document de base.

    Je voudrais que tout le classeur soit enregistrer, et non seulement la première page.

    Voici mon code :

    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
    Sub Enregistrer_sous()
    Dim FileD As FileDialog
    Dim chemin As String, fichier As String
     
    Set FileD = Application.FileDialog(msoFileDialogSaveAs)
     
    If FileD.Show = True Then
     
    chemin = ThisWorkbook.Path
     
    fichier = "Olivier" & [C3] & ".xlsm"
     
    ActiveWorkbook.SaveCopyAs Filename:=fichier
     
    End If
     
    End Sub
    - Ce code m'affiche la boite de dialogue sans nom de fichier , Mais une fois un nom de fichier indiqué, et enregistrer, la macro de mon bouton continue sur sur chemin à exécuter la deuxième requête, toujours dans le document de base "OlivierHeuresSup.xlsm", il passera a l'année prochaine


    Un grand merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Points : 172
    Points
    172
    Par défaut
    Bonsoir EditeClean.

    La boîte de dialogue est appelée dans ton code, donc c'est normal qu'il l'affiche.
    Pour ce qui est du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Enregistrer_sous()
    Dim chemin As String, fichier As String
    chemin = ThisWorkbook.Path & Application.PathSeparator
    fichier = "Olivier" & Sheets("RECAP").[C3] & ".xlsm"
    ActiveWorkbook.SaveCopyAs Filename:=chemin & fichier
    End Sub

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, il serait sage de vérifier la validité du nom du fichier via qqch comme :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Option Explicit
     
    Private Function NomFichierValide(sChaine As String) As Boolean
    Dim i As Long
    Const CaracInterdits As String = """*/:<>?[\]|"
        NomFichierValide = True
        If Len(sChaine) = 0 Then
            NomFichierValide = False
            Exit Function
        End If
        For i = 1 To Len(CaracInterdits)
            If InStr(sChaine, Mid$(CaracInterdits, i, 1)) > 0 Then
                NomFichierValide = False
                Exit Function
            End If
        Next i
    End Function 
     
    Sub Tst()
    Dim sFichier As String
        sFichier = "Olivier" & Sheets("RECAP").[C3] & ".xlsm"
        If NomFichierValide(sFichier) Then
            ' sauvegarde
        Else
            With Sheets("RECAP")
                .Activate
                .Range("C3").Select
            End With
            MsgBox "Nom de fichier invalide", vbOKOnly + vbInformation
        End If
    End Sub

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Indépendant
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Merci pour vos reponse
    Bonjour et merci pour votre aide, je vais essayer ça tout de suite

    Cependant j'ai oublier de préciser quelque chose, sur le nouveau classeur enregistrer, est ce possible de supprimer le bouton sur la feuil1?

    Un grand merci

  5. #5
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, à adapter à ton contexte

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Option Explicit
     
    Sub Enregistrer_sous()
    Dim sChemin As String, sFichier As String
    Dim wkb As Workbook
        Application.ScreenUpdating = False
        sChemin = ThisWorkbook.Path & "\"
        sFichier = "Olivier" & Feuil1.Range("C3") & ".xlsm"
     
        If NomFichierValide(sFichier) Then
            ActiveWorkbook.SaveCopyAs Filename:=sChemin & sFichier
     
            Set wkb = Workbooks.Open(sChemin & sFichier)
            SuppShapes wkb
            Application.DisplayAlerts = False
            wkb.SaveAs Filename:=sChemin & sFichier
            wkb.Close
            Set wkb = Nothing
            With Application
                .DisplayAlerts = True
                .ScreenUpdating = True
            End With
        Else
            With Feuil1
                .Activate
                .Range("C3").Select
            End With
            MsgBox "Nom de fichier invalide", vbOKOnly + vbInformation
        End If
    End Sub
     
    Private Function NomFichierValide(sChaine As String) As Boolean
    Dim i As Long
    Const CaracInterdits As String = """*/:<>?[\]|"
        NomFichierValide = True
        If Len(sChaine) = 0 Then
            NomFichierValide = False
            Exit Function
        End If
        For i = 1 To Len(CaracInterdits)
            If InStr(sChaine, Mid$(CaracInterdits, i, 1)) > 0 Then
                NomFichierValide = False
                Exit Function
            End If
        Next i
    End Function
     
    Private Sub SuppShapes(Wk As Workbook)
    Dim Obj As OLEObject
        For Each Obj In Wk.ActiveSheet.OLEObjects
            If TypeOf Obj.Object Is MSForms.CommandButton Then Obj.Delete
        Next Obj
    End Sub
    Après il y a : Visual Basic Editor qui peut te permettre d'enregistrer le classeur et de supprimer la totalité des procédures.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Indépendant
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Kiki ça fonctionne NICKEL Un Grand merci encore pour vos réponses, j'adore ce forum et tout ce qu'on peu y trouver

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

Discussions similaires

  1. Ajout enregistrement sous formulaire avec onglet
    Par maxime350 dans le forum IHM
    Réponses: 5
    Dernier message: 04/06/2008, 08h10
  2. Export table SAS sous Excel avec noms des libellés
    Par ash_rmy dans le forum SAS Base
    Réponses: 2
    Dernier message: 23/05/2008, 14h16
  3. ajout d'un ouverture de classeur apres un code d'enregistrer-sous ?
    Par lebeniste dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/04/2008, 16h10

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