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 :

Pbl de Paste au sein d'un Before_Save


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut Pbl de Paste au sein d'un Before_Save
    Bonjour à tous,

    Mon problème viens du fait que je dois copier le contenu d'une feuille en format .XLSB dans un fichier .XLS

    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
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
     
    'Application.ScreenUpdating = False
        Stop
        plage = "A1:P" & [A1].End(xlDown).Row  
        Range(plage).Copy
        Workbooks.Open Filename:= _
            "\\adresse réseau de ma société\RECUP_ANOS_DU_MATIN_POUR_PLANIF.xls"
     '   Sheets("Feuil1").Select
        Cells.ClearContents
     
        Range("A1").Select
        ActiveSheet.Paste
        'ActiveSheet.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
        Range("A1").Select
     
        ActiveWorkbook.Save
        ActiveWindow.Close
     
    'Application.ScreenUpdating = True
     
    End Sub
    et sur la ligne : ActiveSheet.Paste
    j'ai le message : Erreur 1004 La méthode paste de la classe Worksheet à échoué

    et là je sèche

    j'ai fait par l'assistant et il me propose cette instruction

    j'ai essayé PasteSpecial idem

    mon problème vient surement que ma cible est un fichier XLS (version 2003)

    petite précision ma plage Copier est A1: P504 dont au niveau place ça passe ! (j'ai rajouté un espace avant le P pour évité le smiley)

    deuxième précision quand je le fait avec l'assistant ça marche (avec l'assistant)

    merci pour ceux qui pourront m'aider à débugger mon soucis

    @ bientôt

  2. #2
    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
    Je pense que ton problème vient du Cells.ClearContents placé entre Copy et Paste.
    Excel est un peu chatouilleux question copie. Si tu fais Ctrl+C sur une cellule et qu'ensuite tu saisies quelque chose dans n'importe quelle cellule, tu ne peux plus faire Ctrl+V (du moins pas avant d'avoir faire un autre Ctrl+C).

    Tu pourras vérifier ce que je dis en avançant pas à pas : tu verras ta plage s'entourer de tirets après le Copy (pour marcher la zone copiée) mais après le ClearContents, ces tirets devraient disparaitre, montrant qu'on ne peut plus copier la zone.

    La solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim plage  As Range
        Set plage = Range("A1:P" & [A1].End(xlDown).Row)
        Workbooks.Open Filename:="\\adresse réseau de ma société\RECUP_ANOS_DU_MATIN_POUR_PLANIF.xls"
        Cells.ClearContents
        plage.Copy
        Range("A1").PasteSpecial

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour Menhir
    Je serais personnellement encore plus prudent.
    - 1) j'attribuerais une variable objet Cl0 au classeur source
    - 2) j'ouvrirais le classeur destination et lui attribuerai également une variable objet CL1
    - 3) je "lessiverais" alors le classeur CL1 et appliquerais la méthode range.copy du classeur CL0 vers le classeur CL1

    (pour ne pas courir le risque de copier et coller du "vide")

    Amitiés

  4. #4
    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 unparia Voir le message
    - 1) j'attribuerais une variable objet Cl0 au classeur source
    Dans la variable Range est incluse la référence au classeur et à la feuille.
    Même si on change de classeur ou de feuille actif, une variable de type Range pointera toujours sur la même cellule de la même feuille du même classeur.
    Donc, pas de risque concernant la source.

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour et Merci à Menhir, anasecu et Unparia de m'avoir répondu

    J'ai opté pour la solution de Menhir qui fonctionne très bien

    voici mon résultat qui 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
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
     
    Application.ScreenUpdating = False
        Stop
        Dim plage As Range
     
        Set plage = Range("A1:P" & [A1].End(xlDown).Row)
     
        Workbooks.Open Filename:= _
            "\\.....\RECUP_ANOS_DU_MATIN_POUR_PLANIF.xls"
        Cells.ClearContents
        Cells.Delete
        ActiveWorkbook.Names("Classement_Anos").Delete
        ActiveWorkbook.Names("Reparation").Delete
        plage.Copy
        Range("A1").PasteSpecial
        ActiveWorkbook.Save
        ActiveWindow.Close
     
    Application.ScreenUpdating = True
     
    End Sub
    Cependant c'est pas joli les deux .names à supprimer

    si je voulais faire un "for each" je prendrais quoi comme collection ?

    Merci encore à vous

  6. #6
    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 Igloobel Voir le message
    Cependant c'est pas joli les deux .names à supprimer
    si je voulais faire un "for each" je prendrais quoi comme collection ?
    Bin... Names.

    Attention de faire la différence entre la version Workbook et la version Worksheet.
    https://msdn.microsoft.com/fr-fr/lib.../ff195422.aspx
    https://msdn.microsoft.com/fr-fr/lib.../ff197993.aspx

  7. #7
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Ok

    alors si j'ai bien compris

    ActiveWorkbook.Names : c'est tous les noms du classeur actif

    ActiveWorksheet.Names : C'est tous les noms de la feuille active uniquement


    dans mon cas les fichier xls ne contient qu'une feuille donc le résultat sera identique mais merci de la précision

    je test

  8. #8
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour à tous,

    Citation Envoyé par Igloobel Voir le message
    Mon problème viens du fait que je dois copier le contenu d'une feuille en format .XLSB dans un fichier .XLS
    mon problème vient surement que ma cible est un fichier XLS (version 2003)
    Je ne suis pas sûr que xls soit en cause mais comme apparemment tu écrases ton fichier xls, je procéderai ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim wo As Worksheet
        Application.ScreenUpdating = False
     '   Stop
        Set wo = ThisWorkbook.ActiveSheet
        Workbooks.Add
        wo.Range("A1:P" & [A1].End(xlDown).Row).Copy ActiveWorkbook.ActiveSheet.Range("A1")
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs "\\adresse réseau de ma société\RECUP_ANOS_DU_MATIN_POUR_PLANIF.xls"
        ActiveWorkbook.Close
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    End Sub

Discussions similaires

  1. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  2. Créer des fonctions au sein d'un script
    Par mat.M dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/03/2004, 15h25
  3. pbl delphi requete SELECT
    Par Rico l'abricot dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/02/2004, 09h15
  4. pbl procedure liée avec delphi
    Par coucoucmoi dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 09/02/2004, 18h12
  5. [UNIX Forte 6.1 G++] pbl chargement de librairie partagée
    Par claudio.matzke dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 09/10/2003, 14h45

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