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 de feuille à feuille et de classeur à classeur


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Journaliste
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Journaliste

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Copier coller de feuille à feuille et de classeur à classeur
    Bonjour,
    Je recherche depuis quelques jours à réaliser un code qui me permettrait de copier/coller des plages de cellules (comme C1216 puis F12:G16) depuis la feuille "sept12" du classeur A dans la feuille "sept12" du classeur Abis.
    Là où je patine, c'est que dans mon classeur A, il y a aussi la feuille "oct12" que je dois copier dans la feuille "oct12" du classeur Abis.
    Là où je m'embourbe, c'est qu'il faut que je renouvelle cette opération pour le Classeur A, mais aussi Classeur B, bref 78 Classeurs m'attendent patiemment.
    Les morceaux de code glanés ici ou là (associés à un faible niveau de ma part) ne me donnent rien. Hormis quelques crises de nerf tardives...
    Pourriez-vous m'indiquer comment procéder, s'il vous plait ? Par quel bout prendre ce problème?
    Je vous remercie de votre aide
    François

  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 865
    Points
    3 865
    Par défaut
    Bonjour,

    Je te mets deux classeurs en attaché. Le classeurA contient le petit code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Copie_Plage()
     
    For Each sh In Sheets
     
        Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("c12:c16").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("c12")
        Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("f12:g16").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("f12")
     
    Next sh
    End Sub
    Il te permet de copier tes deux zones et fait une boucle sur tous les onglets du fichiers. Il faut ouvrir les deux fichiers. A toi d'améliorer pour boucler sur tes fichiers.
    Fichiers attachés Fichiers attachés

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Journaliste
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Journaliste

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut EThop c'est reparti !
    Bonjour,
    Merci beaucoup de coup de main (de maître)
    j'adapte le tout
    encore un grand merci
    à bientôt
    François

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Journaliste
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Journaliste

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Un soucis de verrou
    Bonjour et encore merci,
    j'ai adapté le code aux zones à copier/coller mais je me retrouve confronté aux verrouillages du classeur et des feuilles
    J'ai essayé quelques codes mais sans résultat d'autant avec l'effet de Loop
    Si mon problème peut inspiration compassion et aide ...
    d'avance merci beaucoup

    François

    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
     Sub Copie_Plage()
     
       For Each sh In Sheets
     
    Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("c12:d16").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("d12:e16")
    Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("f12:g16").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("g12:h16")
    Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("i12:j16").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("j12:k16")
    Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("c18:d22").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("d20:e24")
    Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("f18:g22").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("g20:h24")
    Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("i18:j22").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("j20:k24")
     Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("c24:d28").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("d28:e32")
      Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("f24:g28").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("g28:h32")
       Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("i24:j28").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("j28:k32")
     Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("c30:d34").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("d36:e40")
      Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("f30:g34").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("g36:h40")
      Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("i30:j34").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("j36:k40")
     Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("c36:d40").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("d44:e48")
      Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("f36:g40").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("g44:h48")
      Workbooks("ClasseurA.xls").Sheets(sh.Name).Range("i36:j40").Copy Workbooks("ClasseurAbis.xls").Sheets(sh.Name).Range("j44:k48")
     
     
    Next sh
     
     End Sub

  5. #5
    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 865
    Points
    3 865
    Par défaut
    Salut,

    Tu peux utiliser ceci dans ta bloucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each sh In Sheets   
    Workbooks("ClasseurA.xls").Sheets(sh.Name).Unprotect
    ...

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Journaliste
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Journaliste

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Perfectionner un peu le code
    Excellent !!! et merci beaucoup
    Deux questions pour parfaire le code:
    est-ce qu'il y a une instruction pour déverrouiller également le classeur et les cellules ?

    Je cherche aussi à changer les noms définis "classeurA.xls" (source) et "classeurAbis" (destination) dans le code par deux "noms de fichier variables" définis en fonction de l'ouverture du fichier en début genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomFichWord = Application.GetOpenFilename("Documents Word (*.doc), *.doc", , , , True)
    mais pour un fichier Excel
    L'idée est d'éviter de changer le code à chaque changement de nom de fichier.

    encore un grand merci pour vos sérieux coups de main
    François

  7. #7
    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 865
    Points
    3 865
    Par défaut
    Bonjour,

    est-ce qu'il y a une instruction pour déverrouiller également le classeur et les cellules ?
    Pour déverrouiller la cellule A1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveSheet
       .Range("A1").Locked = False
    End With
    Pour déverrouiller classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Unprotect Password:="xxx"
    Pour déverouiller feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Unprotect Password:="xxx"
    Je cherche aussi à changer les noms définis "classeurA.xls" (source) et "classeurAbis" (destination) dans le code par deux "noms de fichier variables" définis en fonction de l'ouverture du fichier en début genre:
    Tu peux passer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomCompletFichier= Workbooks(ActiveWorkbook.Name).FullName

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Journaliste
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Journaliste

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut ameliorer le code
    Bonjour et merci pour toutes ces réponses
    Si du côté déverrouillage, j'arrive à trouver le bout du tunnel, c'est l'aspect "fichiers variables" qui me semble encore flou.
    Où et comment intégrer dans mon code la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomCompletFichier= Workbooks(ActiveWorkbook.Name).FullName
    Puis par quoi remplacer les valeurs "classeurA.xls" (données source) et "classeurAbis" (destination des données)
    merci de votre réponse et de votre aide
    François

  9. #9
    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 865
    Points
    3 865
    Par défaut
    Bonjour,

    Tu fais comme ceci pour remplacer par tes variables...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Copie_Plage()
     
    Set DonneeSource = GetObject("c:\temp\classeura.xls")
    Set DestinationDesDonnees = GetObject("c:\temp\classeurabis.xls")
     
    For Each sh In Sheets
     
        DonneeSource.Sheets(sh.Name).Range("c12:c16").Copy DestinationDesDonnees.Sheets(sh.Name).Range("c12")
        DonneeSource.Sheets(sh.Name).Range("f12:g16").Copy DestinationDesDonnees.Sheets(sh.Name).Range("f12")
     
    Next sh
    End Sub

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Journaliste
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Journaliste

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut encore un grand merci
    Ouf ! j'ai remis les mains dans le fichier et tout fonctionne
    encore un grand merci à toi pour tes conseils avisés
    à bientôt
    françois

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Journaliste
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Journaliste

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut probleme d'ouverture de fichier...
    Bonjour,
    Encore un grand merci pour ces coups de main
    Bon finalement, j'ai tenté un truc mais sans succès:
    Je souhaite sélectionner un fichier source au lancement de la macro, mais j'ai en permanence une erreur 13 "incompatibilité de type"
    sans comprendre le pourquoi
    je suis preneur de toute suggestion
    d'avance merci beaucoup
    François

    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
    Sub Copie_Plage()
    Set DonneeSource = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*", , , , True)
    Set DestinationDesDonnees = GetObject("C:\Users\francois\Desktop\gestion Magali\ClasseurAbis.xls")
     
     
        For Each sh In Sheets
        DonneeSource.Sheets(sh.Name).Unprotect "grh"
        DonneeSource.Sheets(sh.Name).Range("c12:d16").Copy DestinationDesDonnees.Sheets(sh.Name).Range("d12:e16")
        DonneeSource.Sheets(sh.Name).Range("f12:g16").Copy DestinationDesDonnees.Sheets(sh.Name).Range("g12:h16")
        DonneeSource.Sheets(sh.Name).Range("i12:j16").Copy DestinationDesDonnees.Sheets(sh.Name).Range("j12:k16")
        DonneeSource.Sheets(sh.Name).Range("l12:l16").Copy DestinationDesDonnees.Sheets(sh.Name).Range("m12:m16")
        DonneeSource.Sheets(sh.Name).Range("c18:d22").Copy DestinationDesDonnees.Sheets(sh.Name).Range("d20:e24")
        DonneeSource.Sheets(sh.Name).Range("f18:g22").Copy DestinationDesDonnees.Sheets(sh.Name).Range("g20:h24")
        DonneeSource.Sheets(sh.Name).Range("i18:j22").Copy DestinationDesDonnees.Sheets(sh.Name).Range("j20:k24")
        DonneeSource.Sheets(sh.Name).Range("l18:l22").Copy DestinationDesDonnees.Sheets(sh.Name).Range("m20:m24")
        DonneeSource.Sheets(sh.Name).Range("c24:d28").Copy DestinationDesDonnees.Sheets(sh.Name).Range("d28:e32")
        DonneeSource.Sheets(sh.Name).Range("f24:g28").Copy DestinationDesDonnees.Sheets(sh.Name).Range("g28:h32")
        DonneeSource.Sheets(sh.Name).Range("i24:j28").Copy DestinationDesDonnees.Sheets(sh.Name).Range("j28:k32")
        DonneeSource.Sheets(sh.Name).Range("l24:l28").Copy DestinationDesDonnees.Sheets(sh.Name).Range("m28:m32")
        DonneeSource.Sheets(sh.Name).Range("c30:d34").Copy DestinationDesDonnees.Sheets(sh.Name).Range("d36:e40")
        DonneeSource.Sheets(sh.Name).Range("f30:g34").Copy DestinationDesDonnees.Sheets(sh.Name).Range("g36:h40")
        DonneeSource.Sheets(sh.Name).Range("i30:j34").Copy DestinationDesDonnees.Sheets(sh.Name).Range("j36:k40")
        DonneeSource.Sheets(sh.Name).Range("l30:l34").Copy DestinationDesDonnees.Sheets(sh.Name).Range("m36:m40")
        DonneeSource.Sheets(sh.Name).Range("c36:d40").Copy DestinationDesDonnees.Sheets(sh.Name).Range("d44:e48")
        DonneeSource.Sheets(sh.Name).Range("f36:g40").Copy DestinationDesDonnees.Sheets(sh.Name).Range("g44:h48")
        DonneeSource.Sheets(sh.Name).Range("i36:j40").Copy DestinationDesDonnees.Sheets(sh.Name).Range("j44:k48")
        DonneeSource.Sheets(sh.Name).Range("l36:l40").Copy DestinationDesDonnees.Sheets(sh.Name).Range("m44:m48")
     
    Next sh
     
    End Sub

  12. #12
    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 865
    Points
    3 865
    Par défaut
    Bonjour,

    En modifiant comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DonneeSource = GetObject(Application.GetOpenFilename("Fichier Excel (*.xls), *.xls"))

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Journaliste
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Journaliste

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    merci beaucoup de cette info. C'est génial !!!
    Mais je me retrouve confronter à un autre problème:
    J'ai une zone où des champs (nom, prénom) doivent être copier/coller.
    Or ces champs ont des cellules fusionnées.
    Apparemment, cela génère une erreur bloquante.
    Aussi j'ai essayé par Unmerge de "défusionner" ces cellules mais sans succès.

    Aussi je me permets de vous solliciter de nouveau, si d'aventure le problème vous inspire une solution
    D'avance merci beaucoup
    Cordialement,
    François

  14. #14
    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 865
    Points
    3 865
    Par défaut
    Quelle est l'erreur ?

    Aurais-tu un exemple sans données persos pour voir d'où tu viens et comment c'est données doivent être copiées ?

    Mais c'est souvent lourd avec des cellules fusionnées. Tu peux faire une copie normale et ensuite tu récupères le format d'origine. Bof.

Discussions similaires

  1. [XL-2000] Comment copier-coller d'une feuille vers une autre d'un même classeur ?
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/07/2014, 15h40
  2. [XL-2003] Problème bizzare de copier coller d'une feuille à une autre
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/09/2009, 14h16
  3. [XL-2003] Blocage d'un copier/coller d'une feuille
    Par nicoaix dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 16/04/2009, 15h18
  4. [VBA] Pb avec Copier/coller d'une feuille Excel
    Par sebastien_oasis dans le forum Excel
    Réponses: 3
    Dernier message: 14/12/2007, 11h08
  5. JTree : copier, coller dans une feuille.
    Par sricard dans le forum Composants
    Réponses: 2
    Dernier message: 28/09/2006, 07h35

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