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 d'un classeur vers un autre et de plage différentes [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut Copier-coller d'un classeur vers un autre et de plage différentes
    Salut le forum

    J'ai 2 classeurs excel.
    Le premier classeur contient 30 feuilles.
    Je souhaite dans les dites feuilles copier les cellules suivantes:
    - B11
    - somme B13, B15 (on doit sommer les données des deux cellules (B13 et B15)
    - B19
    Le deuxième classeur contient une feuille comportant un tableau vers lequel les données copiées du premier classeur devront y être coller. Le collage doit se faire suivant certaines conditions:
    le tableau (du 2è classeur) contient de B5:B34 le nom des feuilles du premier classeur.
    Donc les données copiées sur une feuille du premier classeur devra être collées sur la sur ligne correspondant à son nom figurant sur la plage B5:B34 du deuxième classeur.
    - B11 devra être collé sur D
    - la somme de B13 et B15 devra être collée en I
    - B19 devra être collé en N
    Exemple:
    si dans le premier classeur je copie les éléments définis sur ma feuille intitulé SIEGE, ces éléments devront être collé en D5, I5 et N5 car sur mon deuxième classeur, SIEGE se trouve sur la ligne 5.

    Si d'autres informations vous seront utile pour pouvoir m'aider, merci de me faire un feedback car le traitement est fastidieux manuellement et récurrent.

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour capi81,

    Je te félicite tout d'abord pour cette explication claire !
    Je reviens vers toi avec une petite macro fonctionnelle.

    EDIT : As-tu une préférence entre une macro située dans ton classeur source (30 onglets) ou cible ?

    Voici :
    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
    34
    35
    36
    Option Explicit
     
    Sub capi81()
    Dim Rng_source As Range
    Dim Rng_cible As Range
    Dim i As Integer
     
    Dim Classeur_source As String
    Dim Classeur_cible As String
     
    Classeur_source = "Classeur source.xlsm"
    Classeur_cible = "Classeur cible.xlsm"
     
    With Workbooks(Classeur_cible)
        With .Worksheets("Résultats")
            Set Rng_source = .Range("B5")
            For i = 0 To .Columns(2).Find("*", , , , , xlPrevious).Row - 5
                With Workbooks(Classeur_source)
                    If FeuilleExiste(Classeur_source, Rng_source.Offset(i, 0)) Then
                        With .Worksheets(CStr(Rng_source.Offset(i, 0)))
                            Rng_source.Offset(i, 2) = .Range("B11")
                            Rng_source.Offset(i, 7) = .Range("B13") + .Range("B15")
                            Rng_source.Offset(i, 12) = .Range("B19")
                        End With
                    End If
                End With
            Next i
        End With
    End With
    End Sub
     
    Public Function FeuilleExiste(strNomClasseur As String, strNomFeuille As String) As Boolean
     
    FeuilleExiste = Not (IsError(Evaluate("='[" & strNomClasseur & "]" & strNomFeuille & "'!A1")))
     
    End Function
    Petites précisions :
    Tes deux classeurs doivent, avec cette macro, être ouvert pour que celle-ci fonctionne.
    Logiquement, tu peux la placer dans le deux classeurs. (Je ne l'ai testé que depuis le classeur cible, dans la feuille "Résultats".)
    Il est possible, avec les chemins des classeurs ou leur localisation dans un répertoire d'ouvrir le classeur cible correspondant.
    On peut utiliser une TextBox pour insérer son nom par exemple.
    Ces derniers point nécessitent d'avoir des informations complémentaires et de développer des éléments en plus.

    Bref, n'hésite pas à revenir vers moi pour tout complément !

    Cordialement,
    Kimy

  3. #3
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Salut Kimy_Ire

    Merci pour les encouragements et pour l'intérêt que vous avez accordez à mon soucis.
    Je suis entrain de réaliser les tests mais je rencontre des difficultés que j'ai certainement crée dans l'expression de mon besoin.
    le tableau (du 2è classeur) contient de B5:B34 le nom des feuilles du premier classeur.
    C'est plutôt la plage A5:A34
    J'ai essayé d'adapter mais je trébuche.
    Pouvez-vous voire ou ca coince?

    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
    Option Explicit
     
    Sub capi81()
    Dim Rng_source As Range
    Dim Rng_cible As Range
    Dim i As Integer
     
    Dim Classeur_source As String
    Dim Classeur_cible As String
     
    Classeur_source = "SUIVI BUDGETAIRE.xlsx"
    Classeur_cible = "PAC 1er tri AC test.xlsm"
     
    With Workbooks(Classeur_cible)
        With .Worksheets("Analyse des comptes")
            Set Rng_source = .Range("A5")
            For i = 0 To .Columns(1).Find("*", , , , , xlPrevious).Row - 5
                With Workbooks(Classeur_source)
                    If FeuilleExiste(Classeur_source, Rng_source.Offset(i, 0)) Then
                        With .Worksheets(CStr(Rng_source.Offset(i, 0)))
                            Rng_source.Offset(i, 3) = .Range("B11")
                            Rng_source.Offset(i, 8) = .Range("B13") + .Range("B15")
                            Rng_source.Offset(i, 13) = .Range("B19")
                        End With
                    End If
                End With
            Next i
        End With
    End With
    End Sub

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour capi81,

    Hum... L'adaptation me semble très correcte.
    Qu'est qui "coince" ?

    Kimy

  5. #5
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Salut Kimy_Ire et le forum

    Ca fonctionne.
    Il y avait des feuilles non identifiées dans le classeur source.
    Je l'ai est supprimé et en exécutant la macro, ca fonctionnée.
    Par ailleur comment faire pour que le collage se face en valeur car les données à copiées contiennent (souvent) des formules donc ca joue sur le collage.
    Merci d'avance

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    capi81,

    Pour ta première problématique, la méthode FeuilleExiste(Classeur_source, Rng_source.Offset(i, 0)) que je t'ai fourni dans mon premier code devrait analyser les feuilles non-présentes dans ton classeur source...
    Je ne comprends pas bien...

    Concernant ta question, un simple .Range("Bx").Value devrait suffire je pense !

    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

    Ne pas oublier en fin de post et si réponse(s) pertinente(s).

    EDIT : Désolé et merci Winjerome pour les balises.

  7. #7
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Salut Kimy_Ire

    Après révision, je constate que le code en tant que tel ne comportait pas d'erreur.
    J'avais fait une erreur de manipulation (Erreur sur le nom des classeur); ce qui empêchait la macro de bien fonction. Comme quoi votre assistance était tel que je ne pouvais obtenir que le résultat escompté.
    Encore merci pour votre solution géniale.

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

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. copier feuille d'un classeur vers un autre
    Par steeeve34 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/07/2012, 19h08
  3. [XL-2007] Pb copier/coller d'une cellule vers une autre
    Par rch05 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 29/01/2011, 16h24
  4. Copier coller d'un fichier vers un autre
    Par loloz27 dans le forum Excel
    Réponses: 2
    Dernier message: 02/02/2009, 17h40
  5. copier des données d'un classeur vers un autre
    Par jackall dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 01/08/2008, 17h20

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