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 :

Copie multiligne et insertion [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur amateur VBA Excel
    Inscrit en
    Janvier 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur amateur VBA Excel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 69
    Par défaut Copie multiligne et insertion
    Bonjour,

    Désolé de vous embêter avec un problème si simple mais je ne comprend pas ou est mon erreur,

    Je cherche à :
    - copier des lignes triés,
    - les insérer à un autre endroit.

    Ça marche avec la copie mais pas avec l'insert ....

    Voici mon code :
    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
    Option Explicit
    Public FEE As Worksheet
    '---------------------------------------------------------------------
    Sub main()
     
    Set FEE = ThisWorkbook.Worksheets(1)
     
    Call Copiteur(FEE, "D0003", 6)
     
    End Sub
    '---------------------------------------------------------------------
    Sub Copiteur(WKS As Worksheet, CodeACopier As Variant, ColloneATrier As Integer, Optional LigneDeDebut As Integer = 3)
     
    'Je Rentre en mémoire la dernière ligne du tableau
    Dim DerniereLigne As Integer
    DerniereLigne = WKS.Cells(Rows.Count, 1).End(xlUp).Row
     
    'Je filtre sur la feuille voulu, le code voulu dans la collone voulue
    WKS.Cells.AutoFilter Field:=ColloneATrier, Criteria1:=CodeACopier
     
    'Je copie les ligne encore visibles (mais pas les deux premieres ou il y a des textes d'entete
    WKS.Rows(LigneDeDebut & ":" & WKS.Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy
     
    'Je colle les ligne copiées en fin de tableau
    WKS.Rows(DerniereLigne + 1 & ":" & DerniereLigne + 1).PasteSpecial xlPasteAll ' <--- Ca ça marche
     
    'J'insert les lignes copiées juste avant la dernière
    WKS.Rows(DerniereLigne & ":" & DerniereLigne).Insert xlShiftDown  ' <--- Ca ça marche pas
     
    'je désactive le filtre
    WKS.Cells.AutoFilter
     
    End Sub

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Bonjour,

    parce que la copie contient des cellules non contigus. Même à la main cela ne fonctionne pas. La preuve en est que l'option : insérer les cellules copiées
    n’apparaît pas dans le menu contextuel dans ce cas de cellules non contigus.

    il te faut passer par un collage dans une zone temporaire pour reprendre ensuite cette zone temporaire qui elle aura des cellules contigus.

    Ou 2ieme solution que je préfère, tu prépares le collage en insérant préalablement la quantité de ligne vide qui correspond au nombre de ligne copiées.

    A+

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur amateur VBA Excel
    Inscrit en
    Janvier 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur amateur VBA Excel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 69
    Par défaut
    Merci beaucoup Phil Free,

    Je vais en effet insérer préalablement le bon nombre de ligne.

    En revanche comment compter les lignes copiées ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    en ajoutant une variable :

    puis en ajoutant les lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Maplage = WKS.Rows(LigneDeDebut & ":" & WKS.Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    du coup tu peux obtenir le nombre de ligne comme ceci pour l'exemple car je vais te laisser implémenter le truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Maplage.Rows.count

  5. #5
    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
    La méthode Range.copy copie parfaitement en continu, à partir de la cellule spécifiée par son paramètre destination une plage de cellules discontinues

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour
    La méthode Range.copy copie parfaitement en continu, à partir de la cellule spécifiée par son paramètre destination une plage de cellules discontinues
    Bonjour unparia,

    oui et comme le dirait Marc-L La méthode Range.SpecialCells est superflue car la methode range.copy ne prend en compte que les cellules visible et de plus comme tu le dis si bien
    copie parfaitement en continu
    Mon avis est que les gent qui viennent ici ne font pas tous l'effort d'essayer et d'apprendre avant de poster. Du coup je pense que l'on ne peu pas toujours casser les efforts de ceux qui comme Limace_hurlante et qui on travaillé leur sujet, en leurs reprochant une méthode moins bonne serte mais qui répond au besoin quand même. Mais ok je comprend déjà ta position qui est que le médiocre est l'ennemi de l'excellence. Pourtant il y bien un chemin semer d’embûches entre les deux. Et oui je suis encore sur ce chemin et ai encore beaucoup à apprendre mais je me soigne.

    Amicalement

    Philippe

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

Discussions similaires

  1. Formater un textbox multiligne pour insert
    Par arttom dans le forum C#
    Réponses: 6
    Dernier message: 26/03/2014, 21h45
  2. Réponses: 2
    Dernier message: 06/02/2007, 15h05
  3. Réponses: 1
    Dernier message: 23/01/2007, 15h57
  4. pb copie table par INSERT
    Par forzaxelah dans le forum Bases de données
    Réponses: 23
    Dernier message: 20/07/2006, 09h45
  5. pb d'insertion de données depuis un fichier externe-COPY
    Par boulou32 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 29/01/2005, 18h50

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