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

Excel Discussion :

Pb de copier - coller [XL-365]


Sujet :

Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 110
    Points : 66
    Points
    66
    Par défaut Pb de copier - coller
    Bonjour

    Ma macro exécute une routine dont une partie consiste à copier / coller des données

    1. A partir d'un tableau classique (t1), la macro filtre sur un critère (un secteur géographique N)
    2. Copie les données de (t1)
    3. Colle les données dans un tableau structurée (t2)
    4. Suite de la macro...


    La routine s'exécute au temps de fois qu'il y a de secteur géographique.

    Si mon tableau (t1) contient 1000 lignes,après le filtre du secteur géographique, il n'en reste que 300 lignes
    La macro copie les 300 lignes et les colle dans le tableau (t2).

    Mais je m'aperçois que c'est très long, le fameux copier/coller (plusieurs minutes, voir dizaines de minutes, juste pour ces 2 transactions, surtout le coller)

    Avez-vous des idées pour simplifier ou améliorer le temps de travail?

    Merci d'avance pour vos conseils !
    A bientôt

  2. #2
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Bonjour,
    Pourrais-tu nous montrer le code que tu utilises actuellement ? Ce sera d'autant plus facile pour t'aider.
    NB : il existe un Forum dédié Macro et VBA Excel.

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 660
    Points : 5 783
    Points
    5 783
    Par défaut
    Citation Envoyé par francois78 Voir le message
    Mais je m'aperçois que c'est très long, le fameux copier/coller (plusieurs minutes, voir dizaines de minutes, juste pour ces 2 transactions, surtout le coller)
    As-tu des formules dans ton tableau, si oui il tu peux bloquer le recalcul automatique (application.calculation= ? "xlmanual" a remettre a "automatic" à la fin, vérifie les valeurs des constantes, je n'en suis pas bien sur)
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 110
    Points : 66
    Points
    66
    Par défaut
    Hello

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("$A$1:$AR$" & DernLigne).AutoFilter Field:=4, Criteria1:=REGION
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
    Range("A2:AR" & DernLigne).Select
    Selection.Copy
    Workbooks(REGION & "" & ".xlsx").Activate
    Sheets("Table").Select
    Range("A2").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False


    En fait, mon vrai problème est le suivant :
    Lorsque je sélectionne ma zone filtrée, copie et colle les données, je constate que les valeurs filtrées sont bien collées, mais aussi des lignes vides (qui correspond à la différence entre le nbre de ligne filtré et le nbre de ligne du tableau )

    Exemple :
    • Le tableau fait 1000 lignes.
    • J'obtiens 300 lignes après le filtre
    • Je colle 300 lignes de données
    • et 700 lignes vides insérées


    Et comme c'est collé dans un tableau structuré, cela ajoute des lignes automatiquement et fausse les calculs in fine.

    C'est cette ligne qui pose problème, enfin je crois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
    Cela compte l'ensemble des lignes du tableau, y compris si c'est filtré.

    J'ai testé différentes méthodes de comptage disponibles ici mais ca change pas grand chose

    J'ai essayé une autre méthode mais le coller est très long.

    J'imagine plusieurs solutions :
    1. Savoir copier uniquement les valeurs sélectionnées
    2. Supprimer les lignes vides dans le tableau structuré après le collé
    3. Ou...



    J'espère que cela est plus claire....

  5. #5
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Commence par supprimer les Select et Activate, ça ira plus vite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("$A$1:$AR$" & DernLigne).AutoFilter Field:=4, Criteria1:=REGION
    Range("A2:AR" & DernLigne).Copy
    Workbooks(REGION & "" & ".xlsx").Sheets("Table").Range("A2").PasteSpecial Paste:=xlPasteValues, _
       Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Cela dit, le Range de ton Copy ne tiendra pas compte du filtre activé juste avant puisque tu ne précises pas que tu ne références que les lignes visible.
    Pour ça, il faudrait que tu ajoutes un SpecialCells(xlCellTypeVisible) entre le Range et le Copy.
    Lire ça : https://msdn.microsoft.com/fr-fr/lib...7(v=office.15)
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 660
    Points : 5 783
    Points
    5 783
    Par défaut
    Je te conseille la lecture de ce tuto sur les filtres avancés: https://philippetulliez.developpez.c...dvancedfilter/
    Avec les filtres avancés tu peux copier le résultat du filtre sur une autre feuille
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 110
    Points : 66
    Points
    66
    Par défaut
    Chers Amis

    Désolé pour ce message tardif, mais je n'avais pu remettre les mains dans le cambouis avant aujourd'hui.

    J'avoue que le SpecialCells(xlCellTypeVisible) proposé par Menhir est TOP. Ca fonctionne bien.
    J'ai aussi apprécié le cours de Philippe Tulliez mis en avant par Halaster08. Je ne connaissais pas et je trouve cela très intéressant et cela donne beaucoup d'idées.


    Merci à tous pour vos conseils et à bientôt !

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

Discussions similaires

  1. [VB.NET] copier coller d'une valeur
    Par mic56 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/06/2004, 11h43
  2. [Swing]copier coller... dans le menu.
    Par parksto dans le forum Composants
    Réponses: 3
    Dernier message: 10/05/2004, 22h56
  3. Copier coller Fichier windows
    Par KPitN dans le forum Windows
    Réponses: 8
    Dernier message: 20/04/2004, 17h32
  4. Copier Coller une ligne d'une table avec modif ?
    Par nolan76 dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/03/2004, 16h34
  5. [Débutant] Conserver la couleur lors d'un copier coller
    Par ADIDASman dans le forum JBuilder
    Réponses: 2
    Dernier message: 21/05/2003, 18h13

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