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 :

Erreur lors de la copie d'une feuille vers un autre classeur qui vient d'être créé [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 31
    Points : 19
    Points
    19
    Par défaut Erreur lors de la copie d'une feuille vers un autre classeur qui vient d'être créé
    Bonjour à toutes et à tous !

    Et oui c'est encore moi, Hankow.

    J'avance doucement mais surement dans mon projet. En ce moment même, je bloque pour la copie d'une feuille d'un classeur vers un autre qui vient d'être créé juste avant.
    Quand j'exécute mon programme en mode pas à pas, il sort sans raison de la fonction alors qu'il reste pas mal de choses à traiter. Et le pire c'est qu'il ne me met aucune erreur...

    Il sort au niveau en passant la ligne 35...

    Voici-ci joint ci-dessous 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
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    '=============== Sauvegarder =================
    Private Sub BP_Sauvegarder_Click()                                                  '=> Permet de sauvegarder les données extraites et traitées
        Dim NomFichier, Chemin As String                                                'Déclarations des variables en chaînes de caractères
        NbFeuille = Worksheets.Count                                                    'Affectation du nombre de feuilles de calcul contenues dans le classeur affecté à la variable NbFeuille
        NomFeuille = Sheets(3).Name                                                     'Le nom du fichier vaut celui de la feuille de calcul située en 3ème position
     
        If TB_Sauvegarde = "" Then                                                         'SI le répertoire (Chemin) est nulle, alors :
                rep = MsgBox("Vous n'avez pas indiqué l'emplacement du/des fichier(s) créé(s) !", vbInformation, "INFORMATION")
                                                                                        '=> Message d'erreur pour l'utilisateur
        End If
     
        If NbFeuille > 3 Then                                                           'SI il y a plus de 3 feuilles contenues dans le classeur, alors :
                                                                                        '=> CAS POUR LE TRAITEMENT DE PLUSIEURS FICHIERS
    Flag1:                                                                              'Retour suite au GoTo
            Question = InputBox("Veuillez indiquer le nom du fichier.xls qui regroupera toutes les données.", "INFORMATION", "LIEU_EcluseN° ou Nom_Tables_Animation")
                                                                                        '=> Question adressée à l'utilisateur pour affecter le nom du fichier.xls à enregister
            If Question = vbCancel Then Exit Sub                                        'SI clique sur le bouton annuler, alors : sortie forcée de la fonction
            If Question = "" Or Question = "Lieu_EcluseN° ou Nom_Tables_Animation" Or Not (Question Like "*_*" & "*_Tables_Animation") Then    'SI le nom n'est pas conforme, alors :
                MsgBox "Vous n'avez pas ou mal renseigné le nom de votre Claseur Excel !"
                                                                                        '=> Message d'erreur adressé à l'utilisateur
                GoTo Flag1                                                              'Création d'un branchement conditionnel : Renvoie 4 lignes auparavant (Ligne avec "Flag1")
            Else
            NomFichier = Question                                                       'La réponse donnée par l'utilisateur est affectée à la variable NomFichier
            NomFeuille = Question
            End If
        End If
     
        If (Sheets.Count > 2) Then                                                      'Vérification de la présennce de données => CAS POUR LE TRAITEMENT D'UN SEUL FICHIER
            Dim wk As Workbook                                                          'Déclaration d'une variable en objet WorkBook, soit Classeur Excel
            Dim ws As Worksheet                                                         'Déclaration d'une variable en objet Worksheet, soit Feuille de Calcul Excel
     
            Set wk = Workbooks.Add(xlWBATWorksheet)
            Set ws = ThisWorkbook.Worksheets(NomFeuille)
            ws.Copy after:=wk.Sheets(Sheets.Count)
            Application.DisplayAlerts = False                                           'Inibitions des alertes
            Workooks.Sheets("Feuil1").Delete                                            'Supperssion de la feuille créée par défaut
     
            NomFichier = wk.Sheets(1).Name & ".xls"                                     'Affectation du nom du nouveau classeur pour le sauvegarder en .xls
            Chemin = TB_Sauvegarde & "\"                                                'Affectation de l'emplacement (Chemin), avec la TextBox, pour sauvegarder le NOUVEAU classeur contenant plusieurs feuilles de calcul
     
     
            ActiveWorkbook.ActiveSheet.SaveAs FileName:=Chemin & NomFichier             'Sauvegarde du fichier renommé dans le repertoire voulu
     
            rep = MsgBox("Le fichier << " & NomFichier & " >> a bien été enregistré !" & Chr(10) & Chr(10) & "Le répertoire essocié est << " & Chemin & " >>.", vbYes + vbInformation, "Enregistrement...")
                                                                                        '=> Message d'information pour l'utilisateur
            wk.Close                                                                    'Fermeture du NOUVEAU classeur Excel sauvegardé
     
            If NbFeuille >= 2 Then                                                      'Si le nombre de feuille de calcul présent dans le classeur est > ou = à 2, alors :
                For x = 1 To NbFeuille - 1                                              'Faire autant de fois qu'il faut, pour que NbFeuille < 2 :
                    Sheets(2).Delete                                                    'Suppression des Feuilles inutiles
                Next
            End If
            Set NewFeuille = Sheets.Add(after:=Sheets("EXTRACT"))                       'Création d'une nouvelle feuille situé après la feuille EXTRACT
            NewFeuille.Name = "DONNEES"                                                 'Nomme la nouvelle feuille
            Set NewFeuille = Nothing                                                    'Libère l'Objet NewFeuille
            ActiveWorkbook.Worksheets("EXTRACT").Select                                 'Affiche au premier plan la feuille de calcul EXTRACT
            Application.DisplayAlerts = True                                            'Inhibition des alertes Excel
     
            Question = MsgBox("Voulez-vous ouvrir l'emplacement du/des fichier(s) créé(s) ?", vbYesNo, "INFORMATION")
                                                                                        '=> Question adressée à l'utilisateur pour ouvrir ou non l'emplacement du fichier.xls créé
            If Question = vbYes Then                                                    'SI la réponse à la Question est OUI, alors :
                Shell "C:\windows\explorer.exe " & Chemin, vbMaximizedFocus             'Ouverture du répertoire associé au classeur créé dans une fenêtre Windows maximisée au premier plan
            End If
            If Question = vbNon Then                                                    'SI la réponse à la Question est NON, alors :
                Exit Sub                                                                'Ne rien faire => Sortie forcée de la fonction
            End If
        Else
            reponse = MsgBox("Vous n'avez fait aucun traitement !", vbInformation, "INFORMATION")
                                                                                        '=>Message d'erreur adressé à l'utilisateur
            Exit Sub                                                                    'Sortie forcée de la fonction
        End If
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 123
    Points : 9 951
    Points
    9 951
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    sans avoir décortiqué ton code, juste au passage ta ligne 37 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workooks.Sheets("Feuil1").Delete
    erreur d'orthographe de WorkBooks + tu ne donnes pas le nom du classeur

    si j'ai bien lu, c'est plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wk.worksheets("Feuil1").delete

    EDIT1 : Ligne 29 ==> il est conseillé de mettre la référence au classeur

    Ligne 43:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveWorkbook.ActiveSheet.SaveAs FileName:=Chemin & NomFichier
    Pourquoi .Activesheet pour enregistrer le classeur ?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Bonjour,
    pour la ligne 35 il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Copy after:=wk.Sheets(wk.Sheets.Count)

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 123
    Points : 9 951
    Points
    9 951
    Billets dans le blog
    5
    Par défaut
    ah je suis passé à côté de ça !

    bien vu gnain

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Merci de vos réponses =D

    Citation Envoyé par gnain Voir le message
    Bonjour,
    pour la ligne 35 il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Copy after:=wk.Sheets(wk.Sheets.Count)
    Je viens de faire le changement. J'ai toujours le même problème.

    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
    If (Sheets.Count > 2) Then                                                      'Vérification de la présennce de données => CAS POUR LE TRAITEMENT D'UN SEUL FICHIER
            Dim wk As Workbook                                                          'Déclaration d'une variable en objet WorkBook, soit Classeur Excel
            Dim ws As Worksheet                                                         'Déclaration d'une variable en objet Worksheet, soit Feuille de Calcul Excel
     
            Set wk = Workbooks.Add(xlWBATWorksheet)                                     'Création d'un nouveau Classeur Excel
            Set ws = ThisWorkbook.Worksheets(NomFeuille)                                'Selection la feuille qui sera copiée dans le classeur de traitement
     
            ws.Copy after:=wk.Sheets(wk.Sheets.Count)
            Application.DisplayAlerts = False                                           'Inibitions des alertes
            wk.Worksheets("Feuil1").Delete                                              'Suppression de la feuille créée par défaut
     
            Application.DisplayAlerts = False                                           'Inibitions des alertes
            wk.Worksheets(1).Delete                                                         'Suppression de la feuille créée par défaut
     
     
     
            NomFichier = Sheets(3).Name & ".xls"                                        'Affectation du nom du nouveau classeur pour le sauvegarder en .xls
            Chemin = TB_Sauvegarde & "\"                                                'Affectation de l'emplacement (Chemin), avec la TextBox, pour sauvegarder le NOUVEAU classeur contenant plusieurs feuilles de calcul
     
     
            ActiveWorkbook.ActiveSheet.SaveAs FileName:=Chemin & NomFichier             'Sauvegarde du fichier renommé dans le repertoire voulu
     
            rep = MsgBox("Le fichier << " & NomFichier & " >> a bien été enregistré !" & Chr(10) & Chr(10) & "Le répertoire essocié est << " & Chemin & " >>.", vbYes + vbInformation, "Enregistrement...")
                                                                                        '=> Message d'information pour l'utilisateur
            wk.Close                                                                    'Fermeture du NOUVEAU classeur Excel sauvegardé

  6. #6
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    quel est le nom de ta feuille que tu copie ?

    si c'est Feuil1, tu la copie dans wk et tu la supprime juste après l'avoir copier ???

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Le nom de la feuille que je veux copier est affecté à une variable NomFeuille, dans mon exemple, elle s'appelle "TAG_Entree".
    Feuil1 est la feuille par défaut lors de la création du nouveau Classeur (il me semble).

    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
    Dim wk As Workbook                                                          'Déclaration d'une variable en objet WorkBook, soit Classeur Excel
            Dim ws As Worksheet                                                         'Déclaration d'une variable en objet Worksheet, soit Feuille de Calcul Excel
     
            Set wk = Workbooks.Add(xlWBATWorksheet)                                     'Création d'un nouveau Classeur Excel
            Set ws = ThisWorkbook.Worksheets(NomFeuille)                                'Selection la feuille qui sera copiée dans le classeur de traitement
     
            ws.Copy after:=wk.Sheets(wk.Sheets.Count)
     
            NomFichier = Sheets(3).Name & ".xls"                                        'Affectation du nom du nouveau classeur pour le sauvegarder en .xls
            Chemin = TB_Sauvegarde & "\"                                                'Affectation de l'emplacement (Chemin), avec la TextBox, pour sauvegarder le NOUVEAU classeur contenant plusieurs feuilles de calcul
     
            Application.DisplayAlerts = False                                           'Inibitions des alertes
            Workooks.Sheets("Feuil1").Delete                                             'Suppression de la feuille créée par défaut
     
            ActiveWorkbook.ActiveSheet.SaveAs FileName:=Chemin & NomFichier             'Sauvegarde du fichier renommé dans le repertoire voulu
    Sort à la ligne 7

  8. #8
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 123
    Points : 9 951
    Points
    9 951
    Billets dans le blog
    5
    Par défaut
    tu nous remet un morceau de ton code initial avec persistance des erreurs qu'on a soulevé (cf ligne13 de ton dernier message)

    on va pas s'en sortir comme ça

    j'ajoute d'autres remarques : éviter les déclarations de variables en court de procédure, et tout déclarer au début de la Sub c'est mieux

    poste ton code complet et corrigé suite aux remarques qu'on a fait

    sinon je ne peux pas continuer à épurer ton code et t'aider à résoudre le PB, par manque de temps

  9. #9
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    essaie ceci
    déclare ton ws avant ton wk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set ws = ThisWorkbook.Worksheets(NomFeuille) 
    Set wk = Workbooks.Add(xlWBATWorksheet)
    et surtout il ne faut pas oublier les changements que joe.levrai a exposé

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 921
    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 : 12 921
    Points : 28 907
    Points
    28 907
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si la copie d'une feuille doit se faire sur un classeur qui vient d'être créé, cela signifie que tu veux copier une feuille dans un nouveau classeur ?
    Alors la ligne de code est bien plus simple.
    Exemple de la copie d'une feuille nommée Export du classeur où se trouve le code VBA vers un nouveau classeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Export").Copy
    Il reste à écrire la ligne de code qui sauve le classeur nouvellement créé en le nommant.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Bonjour !

    J'espère que vous avez passé de bonnes fêtes et que vous n'avez pas fait trop d'excès

    Voici mon code après les modifications, j'ai l'impression que c'est vraiment la ligne "ws.Copy after:=wk.Sheets(wk.Sheets.Count)" qui bloque :

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Dim NomFichier, Chemin As String                                                'Déclarations des variables en chaînes de caractères
        Dim wk As Workbook                                                              'Déclaration d'une variable en objet WorkBook, soit Classeur Excel
        Dim ws As Worksheet                                                             'Déclaration d'une variable en objet Worksheet, soit Feuille de Calcul Excel
     
        NbFeuille = Worksheets.Count                                                    'Affectation du nombre de feuilles de calcul contenues dans le classeur affecté à la variable NbFeuille
        NomFeuille = Sheets(3).Name                                                     'Le nom du fichier vaut celui de la feuille de calcul située en 3ème position
        Chemin = TB_Repertoire & "\"                                                    'Affectation, par l'utilisateur via la TextBox, l'emplacement du dossier où les fichiers.txt sont situés
     
        If TB_Sauvegarde = "" Then                                                      'SI le répertoire (Chemin) est nulle, alors :
                rep = MsgBox("Vous n'avez pas indiqué l'emplacement du/des fichier(s) créé(s) !", vbInformation, "INFORMATION")
                                                                                        '=> Message d'erreur pour l'utilisateur
        End If
     
        If NbFeuille > 3 Then                                                           'SI il y a plus de 3 feuilles contenues dans le classeur, alors :
                                                                                        '=> CAS POUR LE TRAITEMENT DE PLUSIEURS FICHIERS
    Flag1:                                                                              'Retour suite au GoTo
            Question = InputBox("Veuillez indiquer le nom du fichier.xls qui regroupera toutes les données.", "INFORMATION", "LIEU_EcluseN° ou Nom_Tables_Animation")
                                                                                        '=> Question adressée à l'utilisateur pour affecter le nom du fichier.xls à enregister
            If Question = vbCancel Then Exit Sub                                        'SI clique sur le bouton annuler, alors : sortie forcée de la fonction
            If Question = "" Or Question = "Lieu_EcluseN° ou Nom_Tables_Animation" Or Not (Question Like "*_*" & "*_Tables_Animation") Then    'SI le nom n'est pas conforme, alors :
                MsgBox "Vous n'avez pas ou mal renseigné le nom de votre Claseur Excel !"
                                                                                        '=> Message d'erreur adressé à l'utilisateur
                GoTo Flag1                                                              'Création d'un branchement conditionnel : Renvoie 4 lignes auparavant (Ligne avec "Flag1")
            Else
            NomFichier = Question & ".xls"                                              'La réponse donnée par l'utilisateur est affectée à la variable NomFichier
            NomFeuille = Question
            End If
        End If
     
        If (Sheets.Count > 2) Then                                                      'Vérification de la présennce de données => CAS POUR LE TRAITEMENT D'UN SEUL FICHIER
            Set ws = ThisWorkbook.Worksheets(NomFeuille)                                'Selection la feuille qui sera copiée dans le classeur de traitement
            Set wk = Workbooks.Add(xlWBATWorksheet)                                     'Création d'un nouveau Classeur Excel
     
            ws.Copy after:=wk.Sheets(wk.Sheets.Count)
     
            NomFichier = wk.Sheets(1).Name & ".xls"                                     'Affectation du nom du nouveau classeur pour le sauvegarder en .xls
            Chemin = TB_Sauvegarde & "\"                                                'Affectation de l'emplacement (Chemin), avec la TextBox, pour sauvegarder le NOUVEAU classeur contenant plusieurs feuilles de calcul
     
            Application.DisplayAlerts = False                                           'Inibitions des alertes
            wk.Worksheets("Feuil1").Delete                                              'Suppression de la feuille créée par défaut
     
            ActiveWorkbook.ActiveSheet.SaveAs FileName:=Chemin & NomFichier             'Sauvegarde du fichier renommé dans le repertoire voulu
     
            rep = MsgBox("Le fichier << " & NomFichier & " >> a bien été enregistré !" & Chr(10) & Chr(10) & "Le répertoire essocié est << " & Chemin & " >>.", vbYes + vbInformation, "Enregistrement...")
                                                                                        '=> Message d'information pour l'utilisateur
            wk.Close                                                                    'Fermeture du NOUVEAU classeur Excel sauvegardé
     
            If NbFeuille >= 2 Then                                                      'Si le nombre de feuille de calcul présent dans le classeur est > ou = à 2, alors :
                For x = 1 To NbFeuille - 1                                              'Faire autant de fois qu'il faut, pour que NbFeuille < 2 :
                    Sheets(2).Delete                                                    'Suppression des Feuilles inutiles
                Next
            End If
            Set NewFeuille = Sheets.Add(after:=Sheets("EXTRACT"))                       'Création d'une nouvelle feuille situé après la feuille EXTRACT
            NewFeuille.Name = "DONNEES"                                                 'Nomme la nouvelle feuille
            Set NewFeuille = Nothing                                                    'Libère l'Objet NewFeuille
            ActiveWorkbook.Worksheets("EXTRACT").Select                                 'Affiche au premier plan la feuille de calcul EXTRACT
            Application.DisplayAlerts = True                                            'Inhibition des alertes Excel
     
            Question = MsgBox("Voulez-vous ouvrir l'emplacement du/des fichier(s) créé(s) ?", vbYesNo, "INFORMATION")
                                                                                        '=> Question adressée à l'utilisateur pour ouvrir ou non l'emplacement du fichier.xls créé
            If Question = vbYes Then                                                    'SI la réponse à la Question est OUI, alors :
                Shell "C:\windows\explorer.exe " & Chemin, vbMaximizedFocus             'Ouverture du répertoire associé au classeur créé dans une fenêtre Windows maximisée au premier plan
            End If
            If Question = vbNon Then                                                    'SI la réponse à la Question est NON, alors :
                Exit Sub                                                                'Ne rien faire => Sortie forcée de la fonction
            End If
        Else
            reponse = MsgBox("Vous n'avez fait aucun traitement !", vbInformation, "INFORMATION")
                                                                                        '=>Message d'erreur adressé à l'utilisateur
            Exit Sub                                                                    'Sortie forcée de la fonction
        End If
    EDIT :
    J'ai réussi à résoudre le problème de la création, sauvegarde, nom feuille et nom fichier. Par contre impossible de copier les données de mon premier classeur vers celui créé

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
        Dim NomFichier, Chemin As String                                                'Déclarations des variables en chaînes de caractères
        Dim wk As Workbook                                                              'Déclaration d'une variable en objet WorkBook, soit Classeur Excel
        Dim ws As Worksheet                                                             'Déclaration d'une variable en objet Worksheet, soit Feuille de Calcul Excel
     
        If (Sheets.Count = 2) Then
            reponse = MsgBox("Vous n'avez fait aucun traitement !", vbInformation, "INFORMATION")
                                                                                        '=>Message d'erreur adressé à l'utilisateur
            Exit Sub                                                                    'Sortie forcée de la fonction
        End If
     
        NbFeuille = Worksheets.Count                                                    'Affectation du nombre de feuilles de calcul contenues dans le classeur affecté à la variable NbFeuille
        NomFeuille = Sheets(3).Name                                                     'Le nom du fichier vaut celui de la feuille de calcul située en 3ème position
        Chemin = TB_Repertoire & "\"                                                    'Affectation, par l'utilisateur via la TextBox, l'emplacement du dossier où les fichiers.txt sont situés
     
        If TB_Sauvegarde = "" Then                                                      'SI le répertoire (Chemin) est nulle, alors :
                rep = MsgBox("Vous n'avez pas indiqué l'emplacement du/des fichier(s) créé(s) !", vbInformation, "INFORMATION")
                                                                                        '=> Message d'erreur pour l'utilisateur
        End If
     
        If NbFeuille > 3 Then                                                           'SI il y a plus de 3 feuilles contenues dans le classeur, alors :
                                                                                        '=> CAS POUR LE TRAITEMENT DE PLUSIEURS FICHIERS
    Flag1:                                                                              'Retour suite au GoTo
            Question = InputBox("Veuillez indiquer le nom du fichier.xls qui regroupera toutes les données.", "INFORMATION", "LIEU_EcluseN° ou Nom_Tables_Animation")
                                                                                        '=> Question adressée à l'utilisateur pour affecter le nom du fichier.xls à enregister
            If Question = vbCancel Then Exit Sub                                        'SI clique sur le bouton annuler, alors : sortie forcée de la fonction
            If Question = "" Or Question = "Lieu_EcluseN° ou Nom_Tables_Animation" Or Not (Question Like "*_*" & "*_Tables_Animation") Then    'SI le nom n'est pas conforme, alors :
                MsgBox "Vous n'avez pas ou mal renseigné le nom de votre Claseur Excel !"
                                                                                        '=> Message d'erreur adressé à l'utilisateur
                GoTo Flag1                                                              'Création d'un branchement conditionnel : Renvoie 4 lignes auparavant (Ligne avec "Flag1")
            Else
            NomFichier = Question & ".xls"                                              'La réponse donnée par l'utilisateur est affectée à la variable NomFichier
            NomFeuille = Question
            End If
        End If
     
        If (Sheets.Count = 3) Then                                                      'Vérification de la présennce de données => CAS POUR LE TRAITEMENT D'UN SEUL FICHIER
            Set ws = ThisWorkbook.Sheets(NomFeuille)                                    'Selection la feuille qui sera copiée dans le classeur de traitement
            Set wk = Workbooks.Add(xlWBATWorksheet)                                     'Création d'un nouveau Classeur Excel avec une feuille
     
            NomFichier = ws.Name & ".xls"                                               'Affectation du nom du nouveau classeur pour le sauvegarder en .xls
            Chemin = TB_Sauvegarde & "\"                                                'Affectation de l'emplacement (Chemin), avec la TextBox, pour sauvegarder le NOUVEAU classeur contenant plusieurs feuilles de calcul
     
            wk.Sheets(1).Name = NomFeuille                                              'Renomme la feuille par défaut
     
     
            wk.SaveAs FileName:=Chemin & NomFichier                                     'Sauvegarde du fichier renommé dans le repertoire voulu
     
            rep = MsgBox("Le fichier << " & NomFichier & " >> a bien été enregistré !" & Chr(10) & Chr(10) & "Le répertoire essocié est << " & Chemin & " >>.", vbYes + vbInformation, "Enregistrement...")
                                                                                        '=> Message d'information pour l'utilisateur
     
            wk.Close                                                                    'Fermeture du NOUVEAU classeur Excel sauvegardé
     
            Question = MsgBox("Voulez-vous ouvrir l'emplacement du/des fichier(s) créé(s) ?", vbYesNo, "INFORMATION")
                                                                                        '=> Question adressée à l'utilisateur pour ouvrir ou non l'emplacement du fichier.xls créé
            If Question = vbYes Then                                                    'SI la réponse à la Question est OUI, alors :
                Shell "C:\windows\explorer.exe " & Chemin, vbMaximizedFocus             'Ouverture du répertoire associé au classeur créé dans une fenêtre Windows maximisée au premier plan
            End If
            If Question = vbNon Then                                                    'SI la réponse à la Question est NON, alors :
                Exit Sub                                                                'Ne rien faire => Sortie forcée de la fonction
            End If
        Else
            reponse = MsgBox("Vous n'avez fait aucun traitement !", vbInformation, "INFORMATION")
                                                                                        '=>Message d'erreur adressé à l'utilisateur
            Exit Sub                                                                    'Sortie forcée de la fonction
        End If
        If NbFeuille >= 2 Then                                                          'Si le nombre de feuille de calcul présent dans le classeur d'extraction est > ou = à 2, alors :
                For x = 1 To NbFeuille - 1                                              'Faire autant de fois qu'il faut, pour que NbFeuille < 2 :
                    Sheets(2).Delete                                                    'Suppression des Feuilles inutiles
                Next
            End If
            Set NewFeuille = Sheets.Add(after:=Sheets("EXTRACT"))                       'Création d'une nouvelle feuille situé après la feuille EXTRACT
            NewFeuille.Name = "DONNEES"                                                 'Nomme la nouvelle feuille
            Set NewFeuille = Nothing                                                    'Libère l'Objet NewFeuille
            ActiveWorkbook.Worksheets("EXTRACT").Select                                 'Affiche au premier plan la feuille de calcul EXTRACT
    EDIT 2 :
    J'ai résolu mon problème. C'est peut être pas très optimisé mais ça marche

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    Dim NomFichier, Chemin As String                                                'Déclarations des variables en chaînes de caractères
        Dim wk As Workbook                                                              'Déclaration d'une variable en objet WorkBook, soit Classeur Excel
        Dim ws As Worksheet                                                             'Déclaration d'une variable en objet Worksheet, soit Feuille de Calcul Excel
     
        If (Sheets.Count = 2) Then
            reponse = MsgBox("Vous n'avez fait aucun traitement !", vbInformation, "INFORMATION")
                                                                                        '=>Message d'erreur adressé à l'utilisateur
            Exit Sub                                                                    'Sortie forcée de la fonction
        End If
     
        NbFeuille = Worksheets.Count                                                    'Affectation du nombre de feuilles de calcul contenues dans le classeur affecté à la variable NbFeuille
        NomFeuille = Sheets(3).Name                                                     'Le nom du fichier vaut celui de la feuille de calcul située en 3ème position
        Chemin = TB_Repertoire & "\"                                                    'Affectation, par l'utilisateur via la TextBox, l'emplacement du dossier où les fichiers.txt sont situés
     
        If TB_Sauvegarde = "" Then                                                      'SI le répertoire (Chemin) est nulle, alors :
                rep = MsgBox("Vous n'avez pas indiqué l'emplacement du/des fichier(s) créé(s) !", vbInformation, "INFORMATION")
                                                                                        '=> Message d'erreur pour l'utilisateur
        End If
     
        If NbFeuille > 3 Then                                                           'SI il y a plus de 3 feuilles contenues dans le classeur, alors :
                                                                                        '=> CAS POUR LE TRAITEMENT DE PLUSIEURS FICHIERS
    Flag1:                                                                              'Retour suite au GoTo
            Question = InputBox("Veuillez indiquer le nom du fichier.xls qui regroupera toutes les données.", "INFORMATION", "LIEU_EcluseN° ou Nom_Tables_Animation")
                                                                                        '=> Question adressée à l'utilisateur pour affecter le nom du fichier.xls à enregister
            If Question = vbCancel Then Exit Sub                                        'SI clique sur le bouton annuler, alors : sortie forcée de la fonction
            If Question = "" Or Question = "Lieu_EcluseN° ou Nom_Tables_Animation" Or Not (Question Like "*_*" & "*_Tables_Animation") Then    'SI le nom n'est pas conforme, alors :
                MsgBox "Vous n'avez pas ou mal renseigné le nom de votre Claseur Excel !"
                                                                                        '=> Message d'erreur adressé à l'utilisateur
                GoTo Flag1                                                              'Création d'un branchement conditionnel : Renvoie 4 lignes auparavant (Ligne avec "Flag1")
            Else
            NomFichier = Question & ".xls"                                              'La réponse donnée par l'utilisateur est affectée à la variable NomFichier
            NomFeuille = Question
            End If
        End If
     
        If (Sheets.Count = 3) Then                                                      'Vérification de la présennce de données => CAS POUR LE TRAITEMENT D'UN SEUL FICHIER
            Set ws = ThisWorkbook.Sheets(NomFeuille)                                    'Selection la feuille qui sera copiée dans le classeur de traitement
            Set wk = Workbooks.Add(xlWBATWorksheet)                                     'Création d'un nouveau Classeur Excel avec une feuille
     
            NomFichier = ws.Name & ".xls"                                               'Affectation du nom du nouveau classeur pour le sauvegarder en .xls
            Chemin = TB_Sauvegarde & "\"                                                'Affectation de l'emplacement (Chemin), avec la TextBox, pour sauvegarder le NOUVEAU classeur contenant plusieurs feuilles de calcul
     
            wk.Sheets(1).Name = NomFeuille                                              'Renomme la feuille par défaut
            wk.SaveAs FileName:=Chemin & NomFichier                                     'Sauvegarde du fichier renommé dans le repertoire voulu
            ws.Cells.Copy wk.Sheets(NomFeuille).Range("A1")                             'Copie les données traitées par EXTRACT_TAG.xls dans la feuille nommée du nouveau Classeur
     
            rep = MsgBox("Le fichier << " & NomFichier & " >> a bien été enregistré !" & Chr(10) & Chr(10) & "Le répertoire essocié est << " & Chemin & " >>.", vbYes + vbInformation, "Enregistrement...")
                                                                                        '=> Message d'information pour l'utilisateur
     
            wk.Close True                                                               'Fermeture du NOUVEAU classeur Excel avec une 2nd sauvegarde
     
            Question = MsgBox("Voulez-vous ouvrir l'emplacement du/des fichier(s) créé(s) ?", vbYesNo + vbInformation, "INFORMATION")
                                                                                        '=> Question adressée à l'utilisateur pour ouvrir ou non l'emplacement du fichier.xls créé
            If Question = vbYes Then                                                    'SI la réponse à la Question est OUI, alors :
                Shell "explorer.exe " & Chemin, vbMaximizedFocus                        'Ouverture du répertoire associé au classeur créé dans une fenêtre Windows maximisée au premier plan
            End If
            If Question = vbNon Then                                                    'SI la réponse à la Question est NON, alors :
                Exit Sub                                                                'Ne rien faire => Sortie forcée de la fonction
            End If
        Else
            reponse = MsgBox("Vous n'avez fait aucun traitement !", vbInformation, "INFORMATION")
                                                                                        '=>Message d'erreur adressé à l'utilisateur
            Exit Sub                                                                    'Sortie forcée de la fonction
        End If
     
        Application.DisplayAlerts = False                                               'Inhibition des alertes Excel
        If NbFeuille >= 2 Then                                                          'Si le nombre de feuille de calcul présent dans le classeur d'extraction est > ou = à 2, alors :
                For x = 1 To NbFeuille - 1                                              'Faire autant de fois qu'il faut, pour que NbFeuille < 2 :
                    Sheets(2).Delete                                                    'Suppression des Feuilles inutiles
                Next
        End If
        Application.DisplayAlerts = True                                                'Réactivation des alertes Excel
        Set NewFeuille = Sheets.Add(After:=Sheets("EXTRACT"))                           'Création d'une nouvelle feuille situé après la feuille EXTRACT
        NewFeuille.Name = "DONNEES"                                                     'Nomme la nouvelle feuille
        Set NewFeuille = Nothing                                                        'Libère l'Objet NewFeuille
        ActiveWorkbook.Worksheets("EXTRACT").Select                                     'Affiche au premier plan la feuille de calcul EXTRACT

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

Discussions similaires

  1. Erreur lors de la copie d'un fichier vers un autre répertoire
    Par aurelienC dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 21/05/2012, 16h34
  2. Copie d'une feuille vers un autre classeur
    Par zeralium dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/10/2008, 16h08
  3. formule lors de la copie d'une feuille vers un autre workbook
    Par thecancre dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/03/2008, 09h50
  4. Réponses: 2
    Dernier message: 15/02/2008, 09h24
  5. [VBA-E]Erreur lors de la copy d'une feuille
    Par nattyman dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/08/2006, 14h30

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