Copie d'une feuille dans un autre fichier

Résolu
zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   -  
Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai un fichier que j'ai nommé de la manière suivante:

ActiveWorkbook.SaveAs Chemin3 + Semaine3 + Espace1 + NomFichier3 + Espace1 + Centre3

Je souhaite inclure une feuille dans ce fichier, voilà ce que j'ai écrit et qui ne fonctionne pas:

Windows("Bénéficiaires hiver 15-16").Activate
Sheets("Interface").Activate
ActiveSheet.Copy after:=Workbooks(Chemin3 + Semaine3 + Espace1 + NomFichier3 + Espace1 + Centre3).Sheets(1)

Je suis persuadé que quelqu'un aura une petite idée.
Merci d'avance
Cordialement

53 réponses

  • 1
  • 2
  • 3
Résumé de la discussion

Le sujet porte sur l’inclusion d’une feuille dans un classeur Excel dont le nom est obtenu par concaténation de plusieurs variables (Chemin3, Semaine3, NomFichier3, Centre3). Le code initial tente d’activer une feuille et de la copier dans le classeur cible via une destination écrite après:=Workbooks(...).Sheets(1), mais la référence au classeur de destination n’est pas fiable et le nom peut ne pas être correctement déterminé. Plusieurs solutions proposées consistent à créer d’abord un nouveau classeur à partir d’une feuille, le nommer selon un format calculé, puis copier les feuilles nécessaires et y insérer la feuille Interface. Des retours soulignent l’importance du formatage du code et de l’utilisation correcte des objets (notamment ajouter le point après ActiveWorkbook pour SaveAs) ainsi que les pièges liés aux espaces dans les noms de fichier. Des essais indiquent que la suppression de certaines lignes (par exemple ScreenUpdating) peut masquer une erreur, et que la correspondance exacte des noms (notamment Sxx et le libellé du centre) est cruciale pour le bon fonctionnement.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    C'est du code boiteux... !
    Pouvez-vous indiquer :
    le nom exact du classeur y compris son extension........
    le chemin exact de ce classeur ....
    Dans quel classeur se trouve la procédure......

    0
  2. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,
    En effet le code est sûrement boiteux à l'image de mon inexpérience !
    Je reprends une partie plus longue de la procédure
    La feuille "Bilan du centre" appartient à un fichier "Bénéficiaires hiver 15-16" d'extension "xlsm" et qui porte la procédure.

    Sheets("Bilan du centre").Activate
    ActiveSheet.Unprotect Password:="sotser"
    ActiveSheet.Copy
    Dim Semaine3 As String
    Dim Chemin3 As String
    Dim NomFichier3 As String
    Dim Centre3 As String
    Chemin3 = "C:\Bilans du centre hiver 15-16\"
    NomFichier3 = "Bilan du centre de"
    Semaine3 = Range("T5").Value
    Semaine3 = Right("S" + Semaine3, 3)
    Centre3 = Range("B3").Value
    ActiveWorkbook.SaveAs Chemin3 + Semaine3 + Espace1 +
    NomFichier3 + Espace1 + Centre3
    Range("A1").Select
    Sheets("Bilan du centre").Activate
    ActiveSheet.Select
    Range("A1:X51").Select
    Range("A1:X51").Activate
    ActiveSheet.Protect Password:="sotser", DrawingObjects:=True, Contents:=True, _
    Scenarios:=Ttrue
    Range("T23").Select
    ActiveWorkbook.Save

    Dans ce fichier créé et enregistré je veux ajouter une feuille "Interface" qui appartient, elle aussi au fichier "Bénéficiaires hiver 15-16".

    Windows("Bénéficiaires hiver 15-16").Activate
    Sheets("Interface").Activate
    ActiveSheet.Copy after:=Workbooks(Chemin3 + Semaine3 + Espace1 + NomFichier3 + Espace1 + Centre3).Sheets(1)

    Je ne suis pas allé jusque là mais je pense qu'il faudra couper les liaisons avec le fichier "Bénéficiaires hiver 15-16".
    En effet dans le fichier "Bénéficiaires hiver 15-16" la feuille "Interface" est renseignée par le feuille "Bilan du centre".
    Je n'ai pas besoin de l'extension "xlsm" pour le fichier qui est créé sous le nom de "Chemin3 + Semaine3 + .."

    J'espère avoir répondu aux différentes interrogations

    Cordialement
    0
  3. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Je me rends comte que j'ai une erreur dans l'extrait de procédure:

    Il faut supprimer les lignes:

    ActiveSheet.Select
    Range("A1:X51").Select
    Range("A1:X51").Activate

    Merci
    0
  4. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci pour le code partiel (le complet serait préférable .... Mais bon ...).
    Cependant ceci manque :
    le chemin exact de ce classeur ....

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Je pense que le classeur concerné est le classeur "Bénéficiaires hiver 15-16", son chemin complet est:

    C:\AD63 hiver 15-16\Bénéficiaires hiver 15-16.xlsm
    0
  7. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci, donc chemin différent pour le nouveau classeur [C:\Bilans du centre hiver 15-16\], proposition va suivre en fin de journée.

    Salutations.
    Le Pingou
    0
  8. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Pouvez-vous me fournir les valeurs qui se trouvent dans les cellules [T5] et [B3] de la feuille [Bilan du centre]...
    Merci

    0
  9. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    En attendant vous pouvez essayer cette procédure qui créer un nouveau classeur avec les 2 feuilles dont [Bilan du centre] garde la protection (MDP...).
    La procédure :
    Sub essai_zikey_ccm()
    Dim clso As Workbook
    Dim Chemin As String, NomFichier As String
    Set clso = ActiveWorkbook
    Chemin = "C:\Bilans du centre hiver 15-16\"
    Application.ScreenUpdating = False
    With Sheets("Bilan du centre")
        NomFichier = Right("S" & .Range("T5").Value, 3) & " Bilan du centre de " & .Range("B3").Value & ".xlsx"
        .Copy
        ActiveWorkbook.SaveAs Chemin & NomFichier
    End With
    clso.Sheets("Interface").Copy After:=Workbooks(NomFichier).Sheets(1)
    Application.ScreenUpdating = True
    Set clso = Nothing
    End Sub
    

    0
  10. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,
    Tout d'abord merci pour votre aide précieuse.
    T5 = N° de semaine donc avec "S" donne "S26"
    B3= Nom du centre
    En conclusion le chemin du fichier sauvegardé est:
    C:\Bilans hiver 15-16\S26 Bilan du centre de Rochefort Montagne.
    Par contre aujourd'hui je vais être sur la route et j'essaierai votre proposition demain matin.
    Encore merci
    Cordialement
    0
  11. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci pour les informations, c'est parfait.
    En marge, dans les divers noms de répertoire, feuille et classeur, pour éviter des erreurs dans les programmes, il serait préférable d'éviter les espaces vides et de les remplacer par signe souligné ( _ ).
    Exemple : [S26_Bilan_du_centre_de_Rochefort_Montagne] au lieu de : [S26 Bilan du centre de Rochefort Montagne]

    0
  12. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Encore merci, comme annoncé je modifierai la procédure demain
    Concernant les noms de fichier j'inclue "un espace", voir mon message du 25/02 à 8h 16
    Je vous tiens informé demain
    Cordialement
    0
  13. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,
    Je n'ai repris le clavier qu'aujourd'hui et malheureusement j'ai un message d'erreur.
    "Erreur de compilation"
    "Utilisation incorrecte de la propriété"

    au niveau de la ligne
    Application.ScreenUpdating = False

    Merci pour votre aide
    Cordialement
    0
  14. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Etrange, merci de préciser ce que vous avez modifier par rapport à ma proposition...!
    0
  15. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,
    J'ai inséré la partie de procédure(20) que vous m'avez proposée à la suite de la partie suivante (19):

    '19) Création du fichier "Sxx Bilan du centre Nom du centre".
    'Protection de la feuille "Bilan du centre".
    'Enregistrement du fichier "Sxx Bilan du centre Nom du centre"
    'dans le dossier "Bilans du centre hiver 15-16".

    Sheets("Bilan du centre").Activate
    ActiveSheet.Unprotect Password:="sotser"
    ActiveSheet.Copy
    Dim Semaine3 As String
    Dim Chemin3 As String
    Dim NomFichier3 As String
    Dim Centre3 As String
    Dim Extension As String
    Extension = ".xlsm"
    Chemin3 = "C:\Bilans du centre hiver 15-16\"
    NomFichier3 = "Bilan du centre de"
    Semaine3 = Range("T5").Value
    Semaine3 = Right("S" + Semaine3, 3)
    Centre3 = Range("B3").Value
    ActiveWorkbook.SaveAs Chemin3 + Semaine3 + Espace1 +
    NomFichier3 + Espace1 + Centre3 + Extension
    Range("A1").Select
    Sheets("Bilan du centre").Activate
    ActiveSheet.Select
    Range("A1:X51").Select
    Range("A1:X51").Activate
    Selection.Locked = True
    Selection.FormulaHidden = False
    ActiveSheet.Protect Password:="sotser", DrawingObjects:=True, _
    Contents:=True, Scenarios:=True
    ActiveWorkbook.Save

    '20) Copie de la feuille "Interface" du fichier "Bénéficiaires hiver 15-16" dans le fichier "Sxx Bilan du centre de...".

    Dim clso As Workbook
    Dim Chemin4 As String, NomFichier4 As String
    Set clso = ActiveWorkbook
    Chemin4 = "C:\Bilans du centre hiver 15-16\"
    Application ScreenUpdating = False
    With Sheets("Bilan du centre")
    NomFichier4 = Right("S" & .Range("T5").Value, 3) & "Bilan du
    centre de" & .Range("B3") .Value & ".xlsm"
    .Copy
    ActiveWorkbook.SaveAs Chemin4 & NomFichier4
    End With
    clso.Sheets("Interface").Copy after:=Workbooks(NomFichier4). _
    Sheets(1)
    Application ScreenUpdating = True
    Set clso = Nothing
    Sheets("Bilan du centre").Activate
    Range("T23").Select

    En vous souhaitant bonne lecture

    Encore merci pour votre aide et votre patience

    Cordialement
    0
  16. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Je pense que vous manipulez les lignes de codes sans bien vous rendre compte du fonctionnement.... !
    Avant de poursuivre je vous prie d'essayer la procédure proposée (poste 8) et me dire si cela marche correctement.
    En marge : lorsque vous insérez une procédure dans un message il est préférable de la formatée.., pour ce faire vous sélectionnez la procédure (ou les lignes de code) et ensuite clic sur l'icône (triangle pointe en bas) et clic sur [basic]
    Exemple :
    Sub essai_zikey_ccm()
    Dim clso As Workbook
    Dim Chemin As String, NomFichier As String
    Set clso = ActiveWorkbook
    ........
    ........
    Set clso = Nothing
    End Sub
    

    0
  17. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,
    Comme je l'avais annoncé au début, je n'ai eu aucune formation sur VBA, j'ai appris seul en utilisant le développeur, les forums et un livre pour débutant.
    D'ailleurs je suis à la recherche d'un autre livre me permettant de me "formater" au VBA.
    Beaucoup de termes me sont inconnus.
    Je comprends votre exaspération et je comprendrais très bien que vous souhaitiez de quitter cette discussion.
    Je pense avoir compris votre dernière demande et je vais l'essayer de suite.
    Cordialement
    0
  18. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci pour l'information.
    J'attends donc la réponse pour être en mesure de poursuivre.
    Dans la foulé, profitez-en pour une petite explication de l'ensemble de votre application (dans les grandes lignes).

    0
  19. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Petit complément ; pour éviter toute confusion avec vos procédures, vous insérez un nouveau module et y copier ma procédure et ensuite vous la lancez... !

    0
  20. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    C'est ce que j'ai fait mais j'ai toujours le même message au niveau de la ligne "Application", la première.
    "Erreur de compilation"
    "Utilisation incorrecte de la propriété".
    Je vais prendre le temps de faire le ménage dans la macro pour tout recaler dans ma tête !
    Je reprendrai ce dossier chez moi en fin d'après-midi.
    En attendant, quelques explications au sujet de cette procédure:
    Je fais partie de l'équipe informatique, pas de pro mais que des amateurs, de l'association départementale 63 des restos du coeur. Les 20 centres du département seront équipés du fichier "Bénéficiaires hiver 15-16" qui porte les différentes procédures.
    Ce fichier est le fichier de base, il sert à relever les familles qui ont été présentes à la distribution hebdomadaire des centres, ceci permettant d'évaluer la quantité de nourriture distribuée afin de provoquer le ravitaillement par les entrepôts départemental et national.
    Donc ce fichier comporte plusieurs feuilles dont 3 sont concernées par la macro
    "Saisir les Présences", cette feuille en plus de saisies manuelles reçoit des informations de 2 autres feuilles et transmet des valeurs à la feuille "Bilan du centre". Cette feuille est enregistrée dans un fichier nommé "Sxx saisie des Présences" est enregistré dans un dossier "Présences hiver 15-16"
    "Bilan du centre" est rempli par les autres feuilles et alimente la feuille "Interface".
    La feuille "Bilan du centre" est enregistrée dans un fichier nommé "Sxx Bilan du centre de (nom du centre) stocké dans un dossier "Bilans du centre hiver 15-16".
    Dans ce fichier créé on inclut la feuille "Interface", attention il ne faut copier que les valeurs.
    Ce fichier est alors expédié par notre messagerie interne à 3 adresses pre définies.
    Ensuite les 2 feuilles "Bilan du centre" et "Interface" sont imprimées.
    La feuille "Interface" a été créée parce qu'il n'y a pas de passerelle entre Excel et le logiciel national.

    Encore merci pour votre patience et votre aide

    Cordialement
    0
  21. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonsoir,
    J'ai réussi à faire fonctionner la procédure que vous m'avez donnée en dehors de la mienne.
    Je vais continuer en l'intégrant.
    Encore merci
    J'attends une réponse éventuelle de votre part et ensuite je clôturerai cette discussion
    Cordialement
    0
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
       
      Bonjour,
      Je lirai l'autre message (19) demain.
      Content pour vous que cela fonctionne.
      Je suis curieux de connaitre la raison du problème .....("Utilisation incorrecte de la propriété")... !
      Salutations.
      Le Pingou
      0
  • 1
  • 2
  • 3