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 :

Copier Feuille Classeur B vers Classeur A - Nom de la feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Par défaut Copier Feuille Classeur B vers Classeur A - Nom de la feuille
    Bonjour à tous,

    J'ai un petit souci lors de la COPIE de deux Feuilles du classeur B vers le classeur A
    Ce très cher Excel me renomme la feuille en feuille1. Pas le nom de l'onglet mais le vrai nom
    Nom : SnipImage.JPG
Affichages : 194
Taille : 5,2 Ko
    Voici le code ... Qu'est ce qui cloche ?
    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
    Option Explicit
     
    Public Sub transdebut()
     
    Dim xlApp       As Excel.Application
    Dim wkA As Workbook, wkB As Workbook
     
    On Error GoTo Erreur
    Excel.Application.DisplayAlerts = False
     
    Set wkA = ThisWorkbook
     
    With wkA
        shthistorik.Delete
        shtDaten.Delete
    End With
     
    wkA.Save
     
    Workbooks.Open ("M:\Palettenfahnen\Erzeugte_pzt\DB_Pzt.xlsm")
     
    Set wkB = ActiveWorkbook
    wkB.Sheets("daten").Copy Before:=wkA.Sheets("Empfang")
    wkB.Sheets("Historik").Copy Before:=wkA.Sheets("Empfang")
    MsgBox "Daten sind aktualisiert", vbDefaultButton1
     
    wkB.Close False
     
    Excel.Application.DisplayAlerts = True
     
    With wkA
        Sheets("Historik").Visible = xlSheetHidden
        Sheets("daten").Visible = xlSheetHidden
    End With
     
    UsfEintrag.Show
     
    Exit Sub
     
    Erreur: Exit Sub
    End Sub

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Boldair, bonjour le forum,

    voir du coté de Codename... peut-être comme ça :

    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
    Public Sub transdebut()
    Dim xlApp       As Excel.Application
    Dim wkA As Workbook, wkB As Workbook
     
    On Error GoTo Erreur
    Excel.Application.DisplayAlerts = False
    Set wkA = ThisWorkbook
    With wkA
        shthistorik.Delete
        shtDaten.Delete
    End With
    wkA.Save
    Workbooks.Open ("M:\Palettenfahnen\Erzeugte_pzt\DB_Pzt.xlsm")
    Set wkB = ActiveWorkbook
    wkB.Sheets("daten").Copy Before:=wkA.Sheets("Empfang")
    ActiveWorkbook.CodeName = "ShtDaten1"
    wkB.Sheets("Historik").Copy Before:=wkA.Sheets("Empfang")
    ActiveWorkbook.CodeName = "ShtEmpfang"
    MsgBox "Daten sind aktualisiert", vbDefaultButton1
    wkB.Close False
    Excel.Application.DisplayAlerts = True
    With wkA
        Sheets("Historik").Visible = xlSheetHidden
        Sheets("daten").Visible = xlSheetHidden
    End With
    UsfEintrag.Show
    Exit Sub
    Erreur: Exit Sub
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Par défaut
    Merci pour ton implication Thautheme...

    Malheureusement ca ne marche pas. Il me dit "erreur d'écriture", comme les feuilles étaient protégées ...

    Bizarre

  4. #4
    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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A propos du code publié à l'ouverture de la discussion et en lecture rapide (je n'ai pas examiné ton code)
    Lignes 13 et 16 ne servent à rien car tu utilises un CodeName et de toutes manières il n'y a aucun lien avec le bloc With
    Lignes 31 à 34, tu dois faire précéder les objets Sheets par un point sinon pas de lien avec la variable objet wkA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With wkA
        .Sheets("Historik").Visible = xlSheetHidden
        .Sheets("daten").Visible = xlSheetHidden
    End With
    Il y a peut-être d'autres lignes qui posent problèmes mais je n'ai pas tout lu
    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

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Par défaut
    Ca avance à petit pas....

    J'ai modifié le code d'après ton aide en mettant des "."
    En même temps, j'ai mis les feuilles à supprimer en visible, puis DELETE
    J'ai aussi mit le code dans "WORKBOOK OPEN" et non un "module"

    Ca marche avec la feuille "daten" mais pas la feuille "historik"
    Il me la nomme dans le codename "historik1" ...

    Une autre piste. A la fin de la procédure, j'appel un USF qui est en liaison avec la feuille "historik"
    Tu en pense quoi ? C'est lié ?

    le 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
    Private Sub Workbook_Open()
     
    Dim wkA As Workbook, wkB As Workbook
     
    On Error GoTo Erreur
    Excel.Application.DisplayAlerts = False
     
    Set wkA = ActiveWorkbook
    With wkA
        .Sheets("historik").Visible = xlSheetVisible
        .Sheets("historik").Delete
        .Sheets("daten").Visible = xlSheetVisible
        .Sheets("daten").Delete
    End With
     
    Workbooks.Open ("M:\Palettenfahnen\Erzeugte_pzt\DB_Pzt.xlsm")
     
    Set wkB = ActiveWorkbook
    wkB.Sheets("daten").Copy Before:=wkA.Sheets("Empfang")
    wkB.Sheets("historik").Copy Before:=wkA.Sheets("Empfang")
    MsgBox "Daten sind aktualisiert", vbDefaultButton1
     
    wkB.Close False
     
    Excel.Application.DisplayAlerts = True
     
    With wkA
        .Sheets("historik").Visible = xlSheetHidden
        .Sheets("daten").Visible = xlSheetHidden
    End With
     
    UsfEintrag.Show
     
    Exit Sub
     
    Erreur:
    MsgBox "Daten sind nicht aktualisiert", vbDefaultButton1
    Exit Sub
     
    End Sub

  6. #6
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Par défaut
    Bingo, j'ai trouvé le problème.
    Mais je ne connais pas le remède

    A la fin de la procédure, j'appel un USERFORM

    Dès que j'enlève cette ligne, tout fonctionne correctement.
    Mais comment faire pour appeler un USF à la fin de la procédure ? (Ouverture du WORKBOOK)

  7. #7
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Commence par vérifier la procédure d'initialisation de l'UserForm [
    Private Sub UserForm_Initialize()]. C'est souvent là que se trouve le problème. Si il y a un bug à l'initialisation, l'UserForm ne s'ouvre pas et on peut penser que c'est la ligne UsfEintrag.Show qui pose problème...

  8. #8
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Par défaut
    Bonjour Thautheme,

    Merci pour ton commentaire, j'ai beau chercher, mais je vois pas le problème dans l'USF Intialize

    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
    Private Sub UserForm_Initialize()
     
    Select Case Verpackung.Value
     
            Case Is = ("Gewickelt")
                Lage.Visible = False
                VBlage.Visible = True
     
            Case Is = ("auf Stange")
                Lage.Visible = False
                VBlage.Visible = True
     
            Case Is = ("Plano (Roto5)")
                Lage.Visible = False
                VBlage.Visible = False
     
            Case Else
                Lage.Visible = True
                VBlage.Visible = True
     
    End Select
     
    End Sub
    Par contre, le problème est peut etre lié à ce bout de code en début ou dans USF Active
    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
     
    Option Explicit
    ' Déclaration des variables et constantes de portées module
    Enum StatusAuf ' Constantes énumérées Status
     Consultation = 0: Modify = 1: NewRec = 2
    End Enum
    Const StatusLabel As String = "Sehen;Ändern;Anlegen"
    Const appTitle As String = "Auftrag bearbeitung"
    Dim UserFormStatus As Byte ' Statut du type de travail (Consultation, Modify, NewRec)
    Dim CurrentRecord As Long  ' Enregistrement en cours
    Dim rng As Range           ' Plage de données traitée par le formulaire
    Dim lstStatusText() As String
    Dim user As String
    Dim datum As Date
     
     
    Private Sub UserForm_Activate()
     'InitVariable ' Initialisation des variables
     InitData     ' Initialisation liste des données + RowSource - Auftrag
     InitComboBox ' Initialisation ComboBox
     With Me      ' Initialisation de certains contrôles
     .cmdConfirm.Visible = False
     .cmdCancel.Visible = False
     .cboMember.Enabled = True
     .frmMember.Enabled = False
     End With
     
    End Sub

  9. #9
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Il te faut mettre des points d'arrêt sur la première ligne de chaque procédure (Initialisation et Activation), lancer l'UserForm et faire tourner le code pas à pas (touche [F8]). Tu verras peut-être la ligne qui pose problème... Dans le code je ne vois rien qui me choque mais sans le fichier, difficile de faire plus...

  10. #10
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Par défaut
    Aha, ca se précise de plus en plus.

    J'ai essayé toutes les manières possibles et inimaginables....

    J'ai une autre piste !
    -Quand j'ouvre mon fichier Excel, Workbook Open, il execute une procédure dans module. A la fin il y a ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UsfEintrag.Show
    Exit Sub
    En gros, l'USF s'ouvre fait ca procédure INITIALIZE USF et retourne dans le module.
    Quitte le module et l'USF est ouvert.

    Quand le ferme l'USF avec un bouton que j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub cmdExit_Click()
     Unload Me ' Fermeture du UserForm
    End Sub
    Tout fonctionne à merveille

    Par contre si je ferme l'USF avec la croix en haut à droite, l'erreur se produit .... Quand je ferme excel et relance le tout ...

    Mystère et boule de gomme ! Quelqu'un a une piste

  11. #11
    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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tout fonctionne à merveille
    Par contre si je ferme l'USF avec la croix en haut à droite, l'erreur se produit .... Quand je ferme excel et relance le tout ...
    Mystère et boule de gomme ! Quelqu'un a une piste
    Le code se trouvant en tête de module du UserForm que tu as publié dans le fil #8, provient de ma contribution USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire.
    Citer l'auteur d'un code que tu utilises n'est pas superflu et t'aurait sans doute permis d'obtenir une réponse plus rapide à ta dernière question.
    Si tu as conservé toutes les procédures événementielles contenues dans mon code, il y en a une nommée UserForm_Terminate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Terminate()
     Set rng = Nothing
     MsgBox "Bye, bye"
    End Sub
    dont le code s'exécute aussi bien si tu cliques sur la croix de fermeture du UserForm que lorsque l'on clique sur le contrôle CommandButton nommé cmdExit_Click

    Comme l'a très justement soulevé "Thautheme", une erreur sur la ligne NomUserForm.Show se trouvant dans une procédure d'appel, ne signifie pas que l'erreur se produit dans cette dernière mais plutôt dans une des procédures du UserForm lui même. La seule façon de le savoir est d'utiliser les outils de débogage (F8, F9, etc.).
    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

  12. #12
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Par défaut
    Bonjour Philippe,

    Exact, je me suis permis de prendre ta contribution et de l'adapter à mes besoins.

    J'ai bien compris l'erreur, qui est dans le RANGE - rng qui est encore actif, c'est pour cela que la feuille est renommée...

    Merci en tout cas, le problème est règlé

    Bonne journée

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

Discussions similaires

  1. [XL-2010] Copier feuille de classeur A vers classeur B
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2012, 19h03
  2. Réponses: 7
    Dernier message: 22/06/2011, 18h37
  3. Copier et coller d"un classeur Excel vers un autre
    Par Anthos59 dans le forum VB.NET
    Réponses: 7
    Dernier message: 28/01/2011, 07h36
  4. [XL-2007] copier cellule classeur 1 vers classeur 2 (presque arrivé)
    Par re dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/08/2009, 08h16
  5. Réponses: 4
    Dernier message: 26/07/2007, 21h56

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