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 d'un classeur à un autre à la derniere ligne vide


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 156
    Par défaut Copier d'un classeur à un autre à la derniere ligne vide
    Bonjour,

    J'aimerai, copier la ligne en cours de selection et la copier en dessous de la derniere ligne non vide d'un autre classeur.
    Ca plante ligne 36 => " La méthode paste spécial de la classe Range à échoué".
    Quelqu'un a-t-il une idée?

    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
    '++++++++++++++++++++++++++++++++++++++++++++++++ Mise à jour BD +++++++++++++++++++++++++++++++++++++++++++++
    Private Sub CommandButtonMiseAJourBD_Click()
     
     
    Unload UserFormAjoutArticle
     
     
     
     
        Dim Cls_ArticleTempo As Workbook 'Commande
        Dim Cls_BaseArticle As Workbook 'Base article
        Dim Plage As Range
        Dim Cel As Range
        Dim NumArticle As String   'NumCommande
        Dim DerniereLigneCible As Long
        Dim i As Long
     
        Set Cls_ArticleTempo = ThisWorkbook
     
          'Copier la ligne en cours de selection
     
            Rows(ActiveCell.Row & ":" & ActiveCell.Row).Copy
     
        'Ouvrire la base articles
        Set Cls_BaseArticle = Workbooks.Open("Y:\BASE DOCUMENT\BASE TECHNIQUE\BASE ARTICLES.xlsm")
     
        Cls_BaseArticle.Sheets("Liste des articles").Unprotect
     
     
            With Cls_BaseArticle
     '            DerniereLigneCible = .Cells(.Rows.Count, 2).End(xlUp).Row Or .Cells(.Rows.Count, 3).End(xlUp).Row 'derniere ligne = colonne 2 ou colonne 3 non vide
                 DerniereLigneCible = Range("A" & Rows.Count).End(xlUp).Row + 1
     'coller la ligne en cours de selection
     
     
        Range("A" & DerniereLigneCible).PasteSpecial Paste:=xlPasteValues
     
     
            End With
     
     
     
        'Protéger la feuille
        Cls_BaseArticle.Sheets("Liste des articles").Protect , True, True, True, , True, , , , , , , , True, True
     
        'Enregistrer
        Cls_BaseArticle.Save
        Cls_BaseArticle.Close False
     
     
     
     
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,

    quand tu utilises un With, il faut que les objets qui s'y rattachent soient precedes d'un point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Cls_BaseArticle
        DerniereLigneCible = .Range("A" & .Rows.Count).End(xlUp).Row + 1
        .Range("A" & DerniereLigneCible).PasteSpecial Paste:=xlPasteValues
    End With

    Mais la on a d'autre problemes, c;est le passage direct du workbook au range.

    Pour simplifier j'aurais utilise les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set Cls_BaseArticle = Workbooks.Open("Y:\BASE DOCUMENT\BASE TECHNIQUE\BASE ARTICLES.xlsm")
    Cls_BaseArticle.Sheets("Liste des articles").Unprotect
    ThisWorkbook.ActiveSheet.Rows(ThisWorkbook.ActiveSheet.ActiveCell.Row & ":" & ThisWorkbook.ActiveSheet.ActiveCell.Row).Copy destination:= _
    Cls_BaseArticle.Worksheets(1).Rows(Cls_BaseArticle.Worksheets(1).Range("A65536").End(xlUp).Row + 1 & ":" & Cls_BaseArticle.Worksheets(1).Range("A65536").End(xlUp).Row + 1)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

Discussions similaires

  1. [WD16] problème sous excel 2010 pour copier d'un classeur à l'autre
    Par law56100 dans le forum WinDev
    Réponses: 5
    Dernier message: 15/03/2013, 09h12
  2. Corriger code pour copier d'un classeur à un autre
    Par kyros21 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/01/2012, 14h55
  3. [XL-2007] Copier d'un classeur à un autre sous condition
    Par DerJul dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/07/2011, 12h08
  4. Réponses: 4
    Dernier message: 27/11/2008, 10h36
  5. VBA – EXCEL :copier colonnes d’un classeur à un autre
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/12/2006, 14h18

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