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 :

Problème de PasteSpecial entre 2 classeurs [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 226
    Par défaut
    Il y a un bail que je ne suis pas venu demandé de l'aide ...

    Mais là
    Je galère depuis plus de 3 heures à tenter de copier une plage de cellules dans une feuille d'un autre classeur.

    Je suis certain que c'est une stupidité ... mais mon neurone n'en viens pas à bout malgré mes recherches sur et


    Bref voici mon code et merci de vs commentaires et de votre temps ....

    PS: Si j'utilise l'option xlPasteAll seul, la copie s'effectue mais avec toute la mise en page, le remplissage et les bordures, comme une image ... ça ne répond pas au besoin du client.

    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
     
    Public Sub TestImport()
    Dim xlApp As Excel.Application
    Dim xlWorkbook As Excel.Workbook
    Dim xlWorksheet As Excel.Worksheet
     
    'Open instance Excell, not visible
    Set xlApp = New Excel.Application
    xlApp.Visible = True
     
    Set xlWorkbook = xlApp.Workbooks.Open(NomClasseur)
    Set xlWorksheet = xlWorkbook.Worksheets(xlWorkbook.Sheets(1).Name)
     
    Sheets("Data").Activate
    Sheets("Data").Range(Cells(1, 1), Cells(10, 10)).Copy
    xlWorksheet.Cells(16, 1).PasteSpecial xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False
     
    'Close excel with save and Clear reference
    xlWorkbook.Close True
    Set xlWorksheet = Nothing
    Set xlWorkbook = Nothing
    xlApp.Quit
    Set xlApp = Nothing
    Application.ScreenUpdating = True
    End Sub
    Rien à faire, testé même sur des classeurs neufs ,,,,


  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    Conformément aux règles du forum, effectuer une présentation digne de ce nom !
    C'est à dire claire & exhaustive quant au besoin du client, en activant un deuxième neurone …

    Sinon la solution évidente est soit de consulter l'aide VBA soit d'activer le Générateur de macros
    puis d'effectuer la manipulation : une base de code est livrée sur un plateau !

    Autre point : Copier/Coller n'est pas coder ‼
    Par exemple la ligne n°3 du code affiché est une belle cagade : pourquoi ouvrir un autre Excel alors qu'Excel est déjà ouvert ?‼

    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    les collages spéciaux sont parfois délicats entre deux instances Excel différentes

    d'où ma question : pourquoi ouvrir un nouveau classeur dans une nouvelle instance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set xlApp = New Excel.Application
    xlApp.Visible = True
     
    Set xlWorkbook = xlApp.Workbooks.Open(NomClasseur)
    Set xlWorksheet = xlWorkbook.Worksheets(xlWorkbook.Sheets(1).Name)
    Plutôt que d'ouvrir directement le classeur dans l'instance en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub TestImport()
    Dim xlWorkbook As Workbook
    Dim xlWorksheet As Worksheet
     
    Set xlWorkbook = Workbooks.Open(NomClasseur)
    Set xlWorksheet = xlWorkbook.Worksheets(xlWorkbook.Sheets(1).Name)

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 226
    Par défaut
    Ouvrir une nouvelle instance: habitude acquise en Access ....

    Et merci à tous, effectivement moins compliqué de travailler dans un classeur unique.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Petite parenthèse, à propos des lignes 14 et 15 de la première procédure éditée.
    Pour éviter des erreurs, il vaudrait mieux préciser la filiation de la feuille [Data] et de plus, il n'y a aucune raison d'utiliser la méthode Activate.
    Par contre la ligne 15 sans cette méthode provoquera inévitablement une erreur car les objets Cells ne sont pas rattachés à la dite feuille.
    Correction à apporter à ces lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Data").Activate
    Sheets("Data").Range(Cells(1, 1), Cells(10, 10)).Copy
    par (Suppresion de la ligne avec la méthode Activate)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With ThisWorkbook.Sheets("Data")
     .Range(.Cells(1, 1), .Cells(10, 10)).Copy
     End With
    Dans l'exemple, le classeur est celui où se trouve le code VBA. Il y a lieu d'adapter.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Homme Profil pro
    Développeur/Programmeur sur Excel
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur/Programmeur sur Excel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Par défaut
    Bonjour MikeGo20,
    je ne suis pas un grand spécialiste, mais j'utilise à l'occasion PasteSpecial et je dirais que c'est peut-être à la ligne 16 qu'est ton problème car tu inscris :
    ..."PasteSpecial xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False"

    alors que moi seulement :
    " Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, transpose:=False"

    Laisse-moi savoir si cela fonctionne.

    P.Sheehy

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

Discussions similaires

  1. [VBA-E]Problème Copier-Coller entre 2 classeurs
    Par Corlo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/05/2007, 14h31
  2. Problème de jointure entre 2 ou 3 tables
    Par NicoNGRI dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/08/2005, 12h44
  3. Réponses: 2
    Dernier message: 21/10/2004, 15h08
  4. Problèmes de compatibilité entre sdk 9.0c et geforce 2/4
    Par Francky033 dans le forum DirectX
    Réponses: 2
    Dernier message: 01/10/2004, 14h22

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