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 :

Enregistrer une copie et la renommer [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 4
    Par défaut Enregistrer une copie et la renommer
    Bonjour,
    Après avoir passé la matinée à me renseigner grâce à différentes sources, je me retrouve bloqué sur une erreur bête…
    J’aimerai créer des copies de fichiers existants et les renommer à ma sauce pour pouvoir les manipuler plus facilement dans des étapes suivantes d’une macro.
    Le code suivant (mon code test) s’exécute sans erreurs sauf que les copies créées sont vides (ne contiennent plus les informations des fichiers originaux).
    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
    Sub Macro1()
    '
    ' Macro1 Macro
    '
        'Création d'un fichier
            Set NewBook = Workbooks.Add
        MsgBox ("Enregistrez le fichier qui contiendra les résultats.")
        Do
            fName = Application.GetSaveAsFilename
        Loop Until fName <> False
        NewBook.SaveAs Filename:=fName
        
        'Ouverture fichiers
        Dim i As Integer
        Dim fichName As String
        For i = 1 To 3
        fichName = "Fichier" & i
        Dim Fich As Variant
        Fich = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")
        If Fich = False Then Exit Sub
    
        Dim Chemin As String, Fichier As String
     
        Chemin = ActiveWorkbook.path
        Fichier = fichName & ".xlsx"
                        'Enregistrement de la copie
        ActiveWorkbook.SaveCopyAs Chemin & "/" & Fichier
        Next i
                    'Ouverture des fichiers (fonctionnel)
        'Dim wbExcel As Workbook
        'For i = 1 To 3
        'NomFichier = "Fichier" & i
        'Set wbExcel = Workbooks.Open(NomFichier)
        'Next i
    End Sub
    J’ai du mal à cerner où se trouve l’erreur… Surement quelque part dans le texte en rouge...
    Merci d’avance !

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Activeworkbook est newbook

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    A aucun moment dans ta macro tu ne dis à VBA quels sont les fichiers sources à renommer.
    Tu ne sauvegardes que ActiveWorkbook qui est le classeur que tu viens de créer avec un Workbooks.Add et qui est donc vide.
    Tu n'utilises pas l'information récupérée dans ta variable Fich.

    Un détail en passant : des déclarations de variables (Dim) dans une boucle, ça pique les yeux...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 4
    Par défaut
    J'y ai réfléchi entre temps et effectivement, je ne récupère pas l'information de la variable Fich.
    Je vais modifier la déclaration de variable pour qu'elle soit hors de la boucle aussi :/.

    Mon problème est que je n'arrive pas à utiliser les informations de la variable Fich pour activer ou rendre actif le Workbook correspondant à celui stocké dans Fich.
    C'est tout bête mais c'est ce qui me bloque.

    Merci pour vos réponses rapides !

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J’aimerai créer des copies de fichiers existants et les renommer à ma sauce pour pouvoir les manipuler plus facilement dans des étapes suivantes d’une macro.
    Si c'est renommer des fichiers existants, tu n'es pas obligé de les ouvrir et les "Sauver Sous" (ce qui te fait deux fichiers chaque fois).

    Il existe une instruction Name qui permet de renommer des fichiers ou des répertoires. Tu parcours un répertoire avec Dir et tu renommes dans une boucle

    Voir dans la FAQ Comment renommer un fichier ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre à l'essai
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 4
    Par défaut
    Bonjour Philippe Tulliez,

    J'ai bien besoin de créer des copies puis de renommer ces copies !

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Citation Envoyé par Qfornezzo1 Voir le message
    J'ai bien besoin de créer des copies puis de renommer ces copies !
    Pourquoi ne pas enregistrer directement les copies avec le bon nom ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyWorkbook.SaveCopyAs MyWorkbook.Path & "\MonFichier.xlsm"

  8. #8
    Membre à l'essai
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 4
    Par défaut
    Il semblerait que mon problème était bien simple et qu'il ai été mal compris.
    J'ai finalement trouvé une solution un peu tirée par les cheveux mais fonctionnelle. Je dois passer par l'ouverture et la fermeture des fichiers initiaux...

    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
    Dim i As Integer
        Dim fichName As String
        Dim Fich As Variant
        MsgBox ("Choisissez les six fichiers correspondants aux 6 derniers mois.")
        For i = 1 To 3
        fichName = "Fichier" & i
        Fich = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")
        If Fich = False Then Exit Sub
        Set Wb = Workbooks.Open(Fich)
        Dim Chemin As String, Fichier As String
     
        Chemin = ActiveWorkbook.path
        Fichier = fichName & ".xlsx"
     
        ActiveWorkbook.SaveCopyAs Chemin & "/" & Fichier
        ActiveWorkbook.Close
     
        Next i
    Merci à tous, même si la solution est loin d'être élégante.
    Bonne journée !

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il semblerait que mon problème était bien simple et qu'il ai été mal compris
    Quand tant de personnes semblent mal comprendre un "problème simple", il faut peut-être se poser des questions
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Qfornezzo1 Voir le message
    Mon problème est que je n'arrive pas à utiliser les informations de la variable Fich pour activer ou rendre actif le Workbook correspondant à celui stocké dans Fich.
    Tu peux l'utiliser pour ouvrir le fichier comme tu l'as fait dans ton message précédent.
    Mais c'est une solution lourde et longue.

    Il est plus simple de traiter directement au niveau du fichier comme l'a suggéré Philippe Tulliez ( ).

    Mais si tu veux faire une copie du fichier sous un autre nom et non pas renommer le fichier, plutôt que l'instruction Name, je te conseillerais l'instruction FileCopy.
    Lire ça : https://docs.microsoft.com/fr-fr/off...copy-statement

    Ca sera beaucoup plus rapide à l'exécution (sans parler de l'affichage) que la combinaison Open + SaveAs + Close.

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

Discussions similaires

  1. Enregistrer une copie sous le meme nom
    Par John81 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/01/2009, 13h58
  2. [FPDF] Forcer le téléchargement et enregistrer une copie
    Par HwRZxLc4 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/12/2008, 12h59
  3. Réponses: 4
    Dernier message: 03/07/2008, 16h46
  4. Enregistrer une copie d'un workbook
    Par PiliSql dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2008, 13h44
  5. Réponses: 8
    Dernier message: 30/10/2007, 10h20

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