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 :

Selection.Copy / ActiveSheet.Paste de valeurs seules [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur avant-vente
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur avant-vente
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Par défaut Selection.Copy / ActiveSheet.Paste de valeurs seules
    Bonjour à tous,

    Votre forum m'a toujours permis de trouver des solutions sans avoir besoin de poster une demande spécifique mais là je n'arrive pas à trouver une solution à mon problème.

    Je souhaite copier une colonne d'un fichier A à un fichier B, le fichier A ne m'appartenant pas.
    Dans le fichier A, avant de copier la colonne, j'utilise les filtres de la première ligne du fichier A pour ne copier que les lignes qui m'interessent dans ce fichier (et c'est ces filtres qui me posent souci).

    Juste que là je faisais comme ci-dessous et ça fonctionnait très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Windows(DeliveryFile).Activate
             Range("N:N").Select
            Selection.Copy
            Windows(NameCurrentFile).Activate
            Range("G1").Select
            ActiveSheet.Paste
    Or maintenant dans le fichier A, la colonne que je souhaite copier est une réference à un autre fichier. Donc au lieu de copier le contenu de la colonne, je souhaite juste copier les valeurs de cette colonne sans les références.

    Pour cela, à la place du ActiveSheet.Paste du code ci-dessus, j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Selection.PasteSpecial Paste:=xlPasteValues
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            ActiveSheet.Range("G1").PasteSpecial Paste:=xlPasteValues
    Le problème c'est que dans les deux cas, les filtres que j'avais mis en place dans le fichier A avant de copier ne sont plus pris en compte (alors que ca fonctionne parfaitement avec le ActiveSheet.Paste). Donc au lieu de copier la vingtaine de lignes sélectionnées qui m'intéressent, ça me copie l'integralité des lignes du fichier A et c'est pas du tout ce que je recherche.

    Auriez-vous une solution à mon problème?

    Merci d'avance.
    Delphine

  2. #2
    Expert éminent 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
    Par défaut
    Citation Envoyé par fif31 Voir le message
    Juste que là je faisais comme ci-dessous et ça fonctionnait très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Windows(DeliveryFile).Activate
             Range("N:N").Select
            Selection.Copy
            Windows(NameCurrentFile).Activate
            Range("G1").Select
            ActiveSheet.Paste
    Plusieurs remarque sur ton code.
    D'abord, les Activate/Select/Selection dont le générateur de macro sème abondamment ses codes, est rarement une bonne idée.
    Ensuite, il faut appeler un chat "un chat" et éviter de travailler sur les objets Window lorsqu'en fait on travaille sur des classeur et donc sur des Workbook.
    Quand on veut copier des cellules, il est plus simple de passer par la méthode PasteSpecial de Range plutôt que par Paste de Worksheet.
    Si un filtre est actif, ton collage prendra aussi en compte les lignes masquées. Pour ne prendre que les lignes visibles, il faut ajouter SpecialCells(xlCellTypeVisible).

    Ton code rectifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Workbooks(DeliveryFile).Columns("N").SpecialCells(xlCellTypeVisible).Copy
            Workbooks(NameCurrentFile).Range("G1").PasteSpecial(xlPasteAll)
    Mais même ça, ce n'est pas un code propre.
    Pour qu'il soit correct, il faudrait indiquer l'onglet concerné par la copie et le collage, en insérant l'objet Worksheet qui convient entre WOrkbook et Range.

    Or maintenant dans le fichier A, la colonne que je souhaite copier est une réference à un autre fichier. Donc au lieu de copier le contenu de la colonne, je souhaite juste copier les valeurs de cette colonne sans les références.
    Je ne comprends pas ce que tu expliques.

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,

    Si la colonne N est filtrée, une seule ligne suffit pour copier les valeurs et les formats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Workbooks(DeliveryFile).Worksheets(1).Range("N:N").Copy Workbooks(NameCurrentFile).Worksheets(1).Range("G1")
    Notes qu'une fenêtre ce n'est pas un classeur et qu'en VBA il faut éviter les objets actifs : Select, Activate, Activesheet; ...

  4. #4
    Candidat au Club
    Femme Profil pro
    Ingénieur avant-vente
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur avant-vente
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Par défaut Merci
    Un grand merci à vous deux, j'ai pu corriger mon code et récupérer les données dont j'avais besoin. Pour copier les valeurs seules, j'ai juste adapté le code de Patrice740 pour avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks(DeliveryFile).Worksheets(Name_EGVS_Worksheet).Range("N:N").Copy
    Workbooks(NameCurrentFile).Worksheets("TEMP").Range("G1").PasteSpecial Paste:=xlPasteValues
    Je reconnais que j'ai des grosses lacunes sur les notions Excel de base, l'auto-formation via la lecture de bouts de code sur plusieurs forums n'est pas la plus adaptée...

    Merci encore pour votre support.
    Très bonne journée,
    Delphine

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

Discussions similaires

  1. SELECT valeurs seules
    Par Norin dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/06/2008, 16h10
  2. interdire une selection dans une liste selon valeur
    Par polianita dans le forum Access
    Réponses: 3
    Dernier message: 08/09/2006, 17h19
  3. Réponses: 5
    Dernier message: 28/06/2006, 14h02
  4. faire rectangle de selection puis cut/paste
    Par linkB2 dans le forum 2D
    Réponses: 4
    Dernier message: 28/04/2006, 12h02
  5. requete select avec AS remplacement de valeur
    Par pi3141563 dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/04/2004, 22h15

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