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 Copier-Coller dans tableau autre feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Aix
    Inscrit en
    Juin 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Aix
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 32
    Points : 17
    Points
    17
    Par défaut Problème Copier-Coller dans tableau autre feuille
    Bonjour,

    Je viens vers vous car j'ai un problème que je n'arrive pas à résoudre alors que cela est très simple.

    J'ai réussi à copier une ligne à partir de ce code ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(NomTableau).Rows(Me.Enreg).Copy
    Voici ce que j'ai utilisé pour le copier-coller qui fonctionne mais qui ne fait pas ce que je veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(NomTableau).Rows(Me.Enreg).Copy Sheets("Personnel").Rows.Count.End(xlDown)(2)
    Cependant je n'arrive pas à la coller sur une autre feuille avant la dernière ligne, car tous simplement cette feuille a été créée à partir d'un tableau "Outil de tableau", et je voudrai que cette ligne s'insère automatique afin que je puisse la récupérer j'ai essayé de multiple code, j'ai réussi )à la coller cependant je la colle à la ligne 10 000/... Si quelqu'un peut m'aider ... je suis à court d'idée..

    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 855
    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 : 12 855
    Points : 28 774
    Points
    28 774
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    cette feuille a été créée à partir d'un tableau "Outil de tableau"
    Ce que tu évoques n'est pas un objet Range mais un ListObject et se gère d'une autre manière.

    Exemple de la copie de la plage I1:J1 (Range) de la feuille nommée Customer vers la prochaine ligne vide du seul tableau structuré (ListObject) présent sur la même feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub t()
      Dim oLst As ListObject
      Dim rng As Range
      With ThisWorkbook
       Set rng = .Worksheets("Customer").Range("I1:J1")
       Set oLst = .Worksheets("Customer").ListObjects(1)
      End With
      With oLst.Range
       rng.Copy .Offset(.Rows.Count).Resize(1, 1)
      End With
      Set rng = Nothing: Set oLst = Nothing
    End Sub
    Code testé mais attention sans la ligne des totaux qui doit être décochée avant la copie (soit manuellement soit par VBA)

    Voir éventuellement cette contribution La méthode AdvancedFilter et l'objet ListObject

    Pour en savoir plus sur les tableaux structurés Apprendre à utiliser les tableaux structurés Excel : création, manipulations et avantages(1)
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonjour

    Un Tableau (ListObjects), est reconnu simplement par son nom !
    Sa position dans le classeur est définie dès sa création donc son nom suffit quand on veut le faire intervenir (inutile de se casser la tête pour le situer).

    Ici, il est nommé Tb (n’importe où dans le classeur).
    Le code, dans la fenêtre de la ligne à copier, peut se réduire à
    ‘sans la ligne des sous totaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim L As Integer
        L = 1                              ‘si le tableau est vide sinon la ligne de copie est en dessous
        If Application.CountA([Tb]) > 0 Then L = [Tb].Rows.Count + 1
            [B4:E4].Copy [Tb].Item(L, 1)   ‘adapter l’adresse de la plage
        Feuil2.Activate                    'pour voir
    Avec la ligne des sous totaux,il faut ajouter 2 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [Tb].ListObject.ShowTotals = False     ‘masque la ligne des sous totaux si elle est présente
                  [B4:E4].Copy [Tb].Item(L, 1)     
        [Tb].ListObject.ShowTotals = True  ‘affiche la ligne des sous totaux si besoin
    Remarques :
    - Il faut commencer par la déterminer la ligne de copie (selon que le tableau est vide ou pas) !
    La copie se fait sous la dernière ligne du tableau donc l’intègre immédiatement à celui-ci !
    - si le nombre de colonnes de la plage à copier est supérieur à celui du tableau, celui-ci se verra redimensionné.
    - Attention certains membres d’une classe d’objet, lui sont réservés donc obligatoires quand on veut les utiliser, comme ici .ListObject .ShowTotals !
    Fichiers attachés Fichiers attachés

  4. #4
    Membre à l'essai
    Homme Profil pro
    Aix
    Inscrit en
    Juin 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Aix
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Merci pour vos retour, j'ai essayé vos codes et cela fonctionne à moitié, je la colle y'a pas de soucis, mais mon tableau ne se redimensionne pas, donc je n'arrive pas à récupérer ma valeur insérer, cependant j'ai trouvé une alternative, je voudrai redimensionner mon tableau manuellement, j'ai essayé avec l'enregistrement de macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.ListObjects("Personnel").Resize Range("$A$1:$F$49")
    Cela fonctionne parfaitement maintenant ce que je voudrai c'est que lorsque je clique sur un bouton le tableau ne se redimensionne pas sur une plage ("A1:F49") mais insérer une ligne exemple : "A1:F49" + 1 comme ça cela passe de A1 à A50...

    Par exemple un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheet("Personnel").ListObjects("Personnel").Resize Range("$A$1:$F$49" + 1)
    Si c'est possible..

    Merci beaucoup

  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
    12 855
    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 : 12 855
    Points : 28 774
    Points
    28 774
    Billets dans le blog
    53
    Par défaut
    Bonjour,,
    Merci pour vos retour, j'ai essayé vos codes et cela fonctionne à moitié, je la colle y'a pas de soucis, mais mon tableau ne se redimensionne pas, donc je n'arrive pas à récupérer ma valeur insérer, cependant j'ai trouvé une alternative, je voudrai redimensionner mon tableau manuellement, j'ai essayé avec l'enregistrement de macro :
    Je teste toujours les codes que je publie donc cela m'étonne que cela ne fonctionne pas. Cependant tout est possible mais j'aurais aimé voir le code complet que tu as écris afin de vérifier.
    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 à l'essai
    Homme Profil pro
    Aix
    Inscrit en
    Juin 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Aix
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim oLst As ListObject
      Dim rng As Range
      With ThisWorkbook
       Set rng = Range(NomTableau).Rows(Me.Enreg)
       Set oLst = .Worksheets("Personnel").ListObjects("Personnel")
      End With
      With oLst.Range
       rng.Copy .Offset(.Rows.Count).Resize(1, 1)
      End With
      Set rng = Nothing: Set oLst = Nothing

    Cela s'insère uniquement à la ligne 49 de mon tableau, et non la ligne 50, donc aucune incrémentation, donc je n'affiche pas ma valeur qui doit se trouver à la ligne 50

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

Discussions similaires

  1. [LibreOffice][Tableur] perte diagramme sur copier coller dans une autre feuille de calc !
    Par samkad dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 26/02/2018, 09h28
  2. Macro copier coller dans une autre feuille
    Par olivverte dans le forum Excel
    Réponses: 23
    Dernier message: 17/12/2013, 14h35
  3. copier dans une feuille et coller dans une autre feuille
    Par papa64 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/07/2011, 23h06
  4. copier des cellules A1:AZ1 et coller dans une autre feuille en E1:E42
    Par zergo dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/02/2010, 07h40
  5. Réponses: 8
    Dernier message: 12/08/2009, 11h32

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