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 :

Empecher que le classeur écrase un classeur deja existant


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut Empecher que le classeur écrase un classeur deja existant
    Bonjour

    J'aimerais connaitre la façon de faire pour empêcher que le classeur écrase un classeur déjà existant. Et si possible de passer à la création du classeur 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
    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
    54
    55
    56
    57
    58
     
     
    Sub generer_fichier()
    '
    ' Generer_pages Macro.
    '
    Application.ScreenUpdating = False '=> A placer en début de macro.
    Const Accents As String = "àâäåçéèêëîïôöùûüÈÉÊËÀÁÂÃÄÅÙÚÛÜ- ,"
    Const Normaux As String = "aaaaceeeeiioouuuEEEEAAAAAAUUUU___"
        Dim c As Range, DerLigne As Integer, i As Byte
        Dim Ancien As String, Nouveau As String, Cible As String
        Dim VBComp As VBComponent
        Dim b As Integer
        Dim wbk As Workbook
        Dim w As Integer
        Dim Module As Object
     
        Sheets("Menu").Select
        DerLigne = Range("A65536").End(xlUp).Row
        For Each c In Range("A2:A" & DerLigne)
            For w = 1 To Len(Accents)
                c.Value = Replace(c.Value, Mid(Accents, w, 1), Mid(Normaux, w, 1))
            Next w
        Next c
     
        ' Déterminer combien d'agent sur la feuille Menu
        FinalAgent = Range("A65000").End(xlUp).Row
        ' Loop pour chaque agent
        For x = 2 To FinalAgent
            ThisAgent = Range("A" & x).Value
    'Copie des feuilles
            ThisWorkbook.Sheets(Array("Janvier", "Admin_Janvier", "Fevrier", "Admin_Fevrier", "Mars", "Admin_Mars", "Avril", "Admin_Avril", "Mai", "Admin_Mai", "Juin", "Admin_Juin", "Juillet", "Admin_Juillet", "Aout", "Admin_Aout", "Septembre", "Admin_Septembre", "Octobre", "Admin_Octobre", "Novembre", "Admin_Novembre", "Decembre", "Admin_Decembre", "AGT", "SGT")).Copy        'adapte les noms des feuilles
     'Céation du nouveau fichier et enregistrement
            Set wbk = ActiveWorkbook
        Ancien = "new_agt"
        Nouveau = ThisAgent
           For Each VBComp In wbk.VBProject.VBComponents
            With VBComp.CodeModule
                If VBComp.CodeModule.Name <> "AfficheMacrosActiveworkbook" Then
                    For b = 1 To VBComp.CodeModule.CountOfLines
                        Cible = VBComp.CodeModule.Lines(b, 1)
                        Cible = Replace(Cible, Ancien, Nouveau)
                        VBComp.CodeModule.ReplaceLine b, Cible
                    Next b
                End If
            End With
        Next VBComp
    Application.DisplayAlerts = True      'En placant True à la place de False, il me demande si je veux écraser l'ancien classeur. Est ce possible tout simplement de passer au suivant sans que je reçoive se message?
     
     
    wbk.SaveAs ThisWorkbook.Path & "\" & ThisAgent & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Application.DisplayAlerts = True
    wbk.Close
    Set wbk = Nothing
         Next x
    Application.ScreenUpdating = True '=> A placer à la fin et il faut mettre "True"
    MsgBox ("Opération terminée.")
    End Sub

    Merci de votre aide encore une fois

  2. #2
    Expert confirmé
    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
    Par défaut
    Salut, en t'inspirant de PDFCreator Générer des PDFs sans doublons via l'incrémentation d'un N° de fichier via la fonction RenommerFichierPDF(sChemin As String, sNomFichier As String) As String, en l'adaptant à ton contexte xls.

    Sinon plus simplement via Manipulation des fichiers en VBA et FileExists en agissant en conséquence.

    Ou encore mieux, en incorporant la date et heure de sauvegarde dans le nom du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wbk.SaveAs ThisWorkbook.Path & "\" & ThisAgent & "_" & Format(Date, "yyyymmdd hhmmss") & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

  3. #3
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    J'ai placé ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.DisplayAlerts = True 'En placant True à la place de False, il me demande si je veux écraser l'ancien classeur. Est ce possible tout simplement de passer au suivant sans que je reçoive se message?
     
    On Error Resume Next
    Le tout fonctionne par contre j'aimerais que le message: Le fichier existe déjà voulez vous le remplacer. Ne s'affiche pas, en répondant à la question "NON".

    Je sais si cela est possible

    Merci

  4. #4
    Expert confirmé
    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
    Par défaut
    Salut, à incorporer dans ton salmigondis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim FSO As Object
    Dim sNomFichier As String
     
        sNomFichier = ThisWorkbook.Path & "\" & ThisAgent & ".xlsm"
        Set FSO = CreateObject("Scripting.FileSystemObject")
     
        If FSO.FileExists(sNomFichier) Then
            '   .....
        Else
            wbk.SaveAs sNomFichier , FileFormat:=xlOpenXMLWorkbookMacroEnabled
        End If
        Set FSO = Nothing

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,


    le plus simple pour savoir si un fichier existe, c'est encore d'utiliser la fonction Dir(NomDeFichier).
    Pas besoin de la scripting library.
    Cordialement,

  6. #6
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Bonjour,
    tu peux tester s'il exite et incrémenter ton nom de fichier avec un chiffre par exemple pour créer un nouoveau nom libre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     'Ici on vérifie que le fichier n'existe pas déjà sinon il serait écrasé
        PathNomExport = ThisWorkbook.Path & "\" & ThisAgent & ".xlsm"
        n = 1
        MemPath = PathNomExport
        MemNamePath = StrReverse(Split(StrReverse(PathNomExport), "\", 2, vbBinaryCompare)(0))
        MemDirPath = StrReverse(Split(StrReverse(PathNomExport), "\", 2, vbBinaryCompare)(1))
        While Dir(PathNomExport) <> ""
            PathNomExport = MemDirPath & "\" & "(" & n & ")" & MemNamePath
            n = n + 1
        Wend
        MsgBox PathNomExport
     
    wbk.SaveAs PathNomExport, FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  7. #7
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    Bonjour Merci de vos réponses aussi rapide.

    Les deux codes fonctionnent à merveille. J'aime bien celui de Kiki, car il ne crée pas de nouveau classeur si le nom du classeur existe déjà.

    Par contre, seul souci c'est qu'il se crée tout de même un classeur du nom de classeur(x).xlsm. Il me demande si je veux l'enregistrer.

    Serais t-il possible de faire fermer automatiquement ce classeur (classeur(x).xlsm) sans l'enregistrer?

    Merci

  8. #8
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wkb.Close SaveChanges:=False
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  9. #9
    Expert confirmé
    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
    Par défaut
    Re, qqch de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim FSO As Object
    Dim sNomFichier As String
    Dim Wkb As Workbook
     
        sNomFichier = ThisWorkbook.Path & "\" & ThisAgent & ".xlsm"
        Set FSO = CreateObject("Scripting.FileSystemObject")
     
        If FSO.FileExists(sNomFichier) Then
            Wkb.Close SaveChanges:=False
        Else
            wbk.SaveAs sNomFichier, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        End If
        Set FSO = Nothing

Discussions similaires

  1. Ne laisser à l'écran que la feuille sans le classeur
    Par nibledispo dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 05/04/2013, 13h50
  2. copie d'1 feuille d'1 classeur vers nouveau classeur excel 2003
    Par samson_02 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/02/2009, 16h14
  3. Tester si un classeur est le classeur courant
    Par samworld dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/11/2007, 12h15
  4. Réponses: 2
    Dernier message: 02/05/2007, 13h28
  5. [Math] Comment empêcher que les fractions rapetissent ?
    Par sekiryou dans le forum Mathématiques - Sciences
    Réponses: 3
    Dernier message: 19/08/2006, 05h29

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