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/Coller cellules distinctes d'une feuille à l'autre [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut Copier/Coller cellules distinctes d'une feuille à l'autre
    Bonjour,

    Toujours dans mon développement,

    je n'arrive pas à faire en sorte de copier coller plusieurs cellules (cf code) d'une feuille sur l'autre
    en sachant que je souhaiterais éviter des aller/retour entre les feuilles
    les cellules collées n'ont pas de positionnement spécifique

    message renvoyé par excel = "cette action ne fonctionne pas sur plusieurs sélections"

    je comprend mais comment faire ? en sachant que ma feuille active doit restée la même si on doit faire des A/R,
    je ne peux nommer la feuille puisque ce code devrait être utilisé sur plusieurs feuilles à la demande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ActiveSheet.Select
     
        Range("a13:d13,f13:h13,f15:h15,f18:h18,f20:h20,f23:h23,f25:h25,f28:h28,f30:h30,f33:h33,f35:h35,f38:h38,f40:h40,e45:h45,e49:h66,e70:h70").Select
     
        Selection.Copy
        Sheets("FACT").Select
    '        Columns("A:I").Select
    '        Selection.ClearContents
        Range("A18").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
    Merci à tous

  2. #2
    Membre confirmé
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 365
    Points : 631
    Points
    631
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Sheets("FACT").range("A18:d18") =SelectActiveSheet. Range("a13:d13")
    puis les 15 zones suivantes .

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Bonjour A diard et merci

    pouvez vous m'apporter une précision, comment dois-je le positionner?

    je ne comprend pas bien l'instruction.

    Merci

  4. #4
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Que veut dire SelectActiveSheet? Je pense que le code serait plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("FACT").range("A18:d18") =ActiveSheet.Range("a13:d13")
    Lorsqu'on écrit Sheets("nom de la feuill"), on dit qu'on cherche qqc dans cette feuille (sans la rednre active). Puis Range("A18:D18") indique qu'on s'intéresse à la plage de cellules A18:D18. ActiveSheet désigne la feuille active.
    A gauche du "=", on met la cellule qu'on veut changer et à droite, on met la nouvelle valeur.
    Par contre, code à tester, parce que la taille des plages de données n'est pas la même, je ne sais pas trop comment ça va réagir?!

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour.

    Citation Envoyé par canicothy Voir le message
    je n'arrive pas à faire en sorte de copier coller plusieurs cellules (cf code) d'une feuille sur l'autre
    en sachant que je souhaiterais éviter des aller/retour entre les feuilles
    C'est si simple en appliquant le B-A-BA de l'aide VBA - suffit pourtant de la consulter ! - via la méthode Range.Copy et ce
    en une unique ligne de code en une seule instruction !

    RangeSource.Copy RangeDestination

    RangeDestination pouvant représenter uniquement la première cellule de la plage de destination et,
    encore une fois, comme le démontre l'exemple dans l'aide VBA …

    Avec cette unique instruction il n'y a donc aucun aller / retour car évidemment les affreux Activate et Select n'ont pas lieu d'être !

    ___________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Un grand merci à tous et surtout à Riaolle et Marc.L

    Je suis autodidacte, j'apprend beaucoup sur le forum et il est vrai que j'utilise très peu l'aide (habituellement rébarbatif et difficile à comprendre) mais là je dois avoué = nikel

    Donc je continue à bientôt

    et encore merci à tous



    Mon père avait raison : "on apprend tous les jours et c'est quand on meurt que l'on devrait naitre".

  7. #7
    Membre à l'essai
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Re bonjour,

    tout marche bien même trop bien, en effet les cellules sources contiennent des formules et donc au lieu de me restituer la valeur dans la destination il me met les formules.

    Est ce qu'avec value ça pourrait le faire? ou y a t il autre chose?

    Merci

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    • Soit comme l'exemple de riaolle du post #4 en spécifiant la propriété Value, les plages devant être de même taille;

    • soit en deux instructions, l'une via Copy et l'autre via la méthode Range.PasteSpecial en spécifiant le type de collage
       (cf aide VBA) …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Marc

    Je suis pas bon, du tout,

    avant de poster j'avais regarder dans l'aide, mais là les explications (surtout en anglais) ne me permettent pas d'avancer.

    J'ai déjà utiliser la fonction pastespecial dans d'autres modules mais là je ne comprend pas pourquoi cela ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ub NVLLEFACT()
     
    ActiveSheet.Range("E5:F5").Copy Destination:=Sheets("FACT").Range("a6").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
      SkipBlanks:=False, Transpose:=False
    ActiveSheet.Range("F6").Copy Destination:=Sheets("FACT").Range("C6")
    je suppose qu'il faut utiliser la fonction pastespecial pour chacune des lignes;

    Merci

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Rien qu'en utilisant l'Enregistreur de macro (donc à la portée d'un débutant !)
    et comme pourtant déjà indiqué en deux instructions :

    ligne n°1 :   RangeSource.Copy  

    ligne n°2 :   RangeDestination.PasteSpecial xlPasteValues   …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Membre à l'essai
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    oui oui biensur

    c'est bien comme ça que j'ai réussi à l'utiliser précédemment mais là ? comme vous pouvez le voir j'ai essayer avec ou sans le "sélection" mais rien n'y fait.

    Nom : pb pastespecial.JPG
Affichages : 722
Taille : 86,5 Ko
    Nom : pb pastespecial 2.JPG
Affichages : 706
Taille : 49,4 Ko

    j'ai bien évidemment réutilisé l'enregistreur,
    je n'ai pas pour habitude de poster qlqchose sans avoir essayer auparavant plusieurs choses (c'est comme ça que j'apprend)
    donc quand je demande de l'aide c'est que malheureusement il y a qlqchose que je fais mal (certainement)
    ou que je ne vois pas (la tête dans le guidon)
    souvent un regard extérieur est la solution ou en tout cas le trouve plus vite.

    Désolé et

    Merci

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Les codes des posts #9 et #11 ne correspondant pas au post #10, ceci explique donc cela …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Membre à l'essai
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Merci pour votre patience Marc

    je dois avancer puisque maintenant j'ai un autre message d'erreur mais est ce que j’écris correctement le code (cette fois en 2 lignes), c'est comme ça?

    Si ce n'est pas le cas, auriez vous l'amabilité de me le corriger.

    Merci

    Nom : pb pastespecial 3.JPG
Affichages : 692
Taille : 77,5 Ko

  14. #14
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Le caractère _ indique une continuité dans la ligne suivante mais c'est comme si c'était sur la même ligne !
    Or ce caractère est pourtant absent dans l'exemple du post #10 ‼     Tout comme Destination, etc …

    Donc encore une fois, cela n'a aucun rapport avec cet exemple, et il ne doit y avoir rien de plus !
    Est-ce si compliqué de juste recopier ce code du post #10 et de juste adapter les plages source et destination ?‼

    ___________________________________________________________________________________________________________
    Zézette épouse X, vous savez pas lire ?!   (Le Père Noël est une ordure)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #15
    Membre à l'essai
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Bonjour Marc

    Comme je l'ai dis je continue et effectivement hier soir voila ce à quoi je suis arrivé après plusieurs essais et avoir relu votre post

    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
    Sub NVLLEFACT()
     
    Dim SourceSheet As Worksheet
    Dim DestinationSheet As Worksheet
     
    Set SourceSheet = ActiveSheet
    Set DestinationSheet = ActiveWorkbook.Sheets("FACT")
     
    SourceSheet.Range("E5:F5").Copy
    DestinationSheet.Range("a6").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
    '''ActiveSheet.Range("F6").Copy Destination:=Sheets("FACT").Range("C6")
    SourceSheet.Range("F2").Copy
    DestinationSheet.Range("D6").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    '''ActiveSheet.Range("P2").Copy Destination:=Sheets("FACT").Range("a7")

    il est vrai que je n'avais pas compris qu'il s'agissait de 2 ordres distincts d'ou "2 lignes"

    j'ai crée des variables et rédiger comme ça et ça fonctionne, impec, je n'ai plus qu'à le reproduire sur l'ensemble des lignes du code.


    Merci beaucoup

  16. #16
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    • Définir une variable objet de type Worksheet pour la feuille source ActiveSheet est un peu too much,
       ActiveSheet étant déjà une variable de type Worksheet
       Et un Range sans ActiveSheet fait quand même référence à la feuille active !

    • Qui plus est il ne faut pas oublier de libérer ces variables objets en fin de procédure (voir Nothing dans l'aide VBA).

    A partir de ton extrait de code précédent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub NVLLEFACT()
        With Worksheets("FACT")
            [E5:F5].Copy:  .[A6].PasteSpecial xlPasteValues
            [F2].Copy:     .[D6].PasteSpecial xlPasteValues
            ' suite …
        End With
    Ici les deux lignes ont été regroupées en une via le séparateur :
    Ce n'est pas conseillé mais ici cela aide à lire directement source & destination.

    Quant à la notation abrégée de Range, elle n'est pas non plus conseillée,
    voir l'aide VBA de la puissante fonction Evaluate.
    Tout comme celle de l'instruction With
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

Discussions similaires

  1. [XL-2010] Copier Coller des colonnes d'une feuille à une autre en fonction d'un critère
    Par Groggy78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/07/2014, 19h12
  2. Réponses: 4
    Dernier message: 17/12/2012, 13h29
  3. [XL-MAC 2004] copier/coller les données d'une période vers autre feuille
    Par Wawa07 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/05/2011, 12h10
  4. [XL-2007] Copier/Coller de formules d'une feuille à une autre
    Par Maady dans le forum Excel
    Réponses: 4
    Dernier message: 09/09/2010, 16h59

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