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 :

Syncronisation de données de 2 classeurs [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    Par défaut Syncronisation de données de 2 classeurs
    Salut le forum

    Je suis confronté à un cas qui me dépasse.
    En effet, j'ai 2 classeurs comportant chacun 30 feuilles identiques(le nom des onglets sont les même).
    Je souhaite à partir du classeur source copier les données des feuilles ciblées et les coller sur les feuilles correspondantes du classeur cible.
    J'ai essayé quelque chose avec l'enregistreur mais je ne sais comment faire pour que le collage se face sur la feuille correspondante (feuille ayant le même nom d'onglet).
    Ci-dessous le code que j'ai essayé en m'inspirant également d'autre code:
    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
    Sub Copier_Coller()
    '
    Dim Classeur_source As String
    Dim Classeur_cible As String
     
    Classeur_source = noussfaso.xlsm
    Classeur_cible = atente1.xlsm
     
    ' copie des élements
     
    With Workbooks(Classeur_source)
        .Range("F15:Q45").Copy
     
    'collage des élements
    With Workbooks(Classeur_cible)
        Windows("Classeur_source (3).xlsm").Activate
        Range("F15").Select
        ActiveSheet.Paste
        Windows("classeur_cible.xlsm").Activate
    End Sub
     
    Public Function FeuilleExiste(strNomClasseur As String, strNomFeuille As String) As Boolean
     
    FeuilleExiste = Not (IsError(Evaluate("='[" & strNomClasseur & "]" & strNomFeuille & "'!A1")))
     
    End Function
    Je sais que ce code n'a pas tellement de sens mais je souhaite qu'on m'aide à lui donner vie.
    NB:le collage doit se faire en F15

  2. #2
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Citation Envoyé par capi81 Voir le message
    .
    J'ai essayé quelque chose avec l'enregistreur mais je ne sais comment faire pour que le collage se face sur la feuille correspondante (feuille ayant le même nom d'onglet).
    Pour se positionner sur la feuille voulue il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sheets("Nom de ta feuille").Range("F15").Select

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Comme je ne suis pas trop fan des Copier/Coller, je te poste un code avec récupération des valeurs par l"intermédiaire d'une variable "Range" (Plage).
    Les deux classeurs sont sensés être ouverts et il y a deux feuilles du même nom ici, la feuille source s'appelle "Feuil1" (à adapter) et donc, logiquement la feuille cible porte le même nom d'où "....Worksheets(Fe.Name)" :
    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
     
    Sub RecupValeurs()
     
        Dim Classeur_source As Workbook
        Dim Classeur_cible As Workbook
        Dim Fe As Worksheet
        Dim Plage As Range
     
        Set Classeur_source = Workbooks("noussfaso.xlsm")
        Set Classeur_cible = Workbooks("atente1.xlsm")
     
        'définir le nom de la feuille...
        Set Fe = Classeur_source.Worksheets("Feuil1")
     
        Set Plage = Fe.UsedRange
     
        With Workbooks(Classeur_cible).Worksheets(Fe.Name)
     
            .Range(.Cells(1, 1), .Cells(Plage.Rows.Count, Plage.Columns.Count)).Value = Plage.Value
     
        End With
     
    End Sub
    Hervé.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Il y a une. Chose qui m'échappe mais c'est normal tu n'en as pas parlé!
    Tu veux copier-coller les données source vers un classeur cible ça ok.

    J'imagine que le but n'est pas qu'il soient identique car il suffirait de copier le fichier sous le bon nom alors qu'est-ce qui justifie de balayer les onglets et de les copier-coller dans un autre?

  5. #5
    Membre éclairé
    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
    Par défaut
    Salut à tous les intervenants

    Merci de vous intéresse à mon soucis.
    Thèze : je suis entrain d'adapter ta proposition avec mon cas réel.
    rdurupt:
    J'imagine que le but n'est pas qu'il soient identique car il suffirait de copier le fichier sous le bon nom alors qu'est-ce qui justifie de balayer les onglets et de les copier-coller dans un autre?
    Il faut dire que j'avais envoyé le fichier source à certains de mes collaborateurs qui ont déjà renseigné avec leur données.
    Je me suis rendu compte que le fichier je leur avait envoyé comportait des erreurs de formule.
    Leur envoyer à nouveau le nouveau fichier corrigé serait leur demander de trop (vu déjà leur charge de travail).
    J'ai donc voulu (comme l'erreur vient de moi) leur demander de m'envoyer leur fichier déjà renseigné pour la mise à jour.
    ce qui me nécessitera de copier leur données vers le nouveau fichier corrigé.
    pour aller plus vite, il me faut arriver à trouver la bonne formule qui consistera à copier chaque les plage de chaque feuille et les coller sur les plages correspondantes de la même feuille.
    Exemple : si je copie les données de la plage F15:Q45 de la feuille TBC JS1 du classeur cible, ces données devront être collées sur la plage F15:Q45 du classeur source.
    NB: il y'a 30 feuilles donc il faut que les données (F15:Q45) copiées de chaque feuille du classeur cible soient collées sur la même plage plage du classeur source.
    Espérant m'avoir fait comprendre, je reste à votre disposition pour tout complément d'informations

  6. #6
    Invité
    Invité(e)
    Par défaut
    je suis pas sur d'avoir bien compris, tu parle de formule,j'en est conclus mais c'est loin d'être probant que tu veux corriger les formules dans le classeur de tes collaborateurs.
    je me suis donc concentré sur une plage de formule.

    la ou j'ai le plus de doute, "F15:Q45" car tu dis "exemple"!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub test
    dim Classeur_source as Workbook
    dim Classeur_cible As Workbook
    Const Plage ="F15:Q45"
    dmi i as integer
    Set Classeur_source = Workbooks("noussfaso.xlsm")
    Set Classeur_cible = Workbooks("atente1.xlsm")
    for i=1 to Classeur_source .sheets.count
       Classeur_cible.sheets(I).range(Plage).formular1c1=  Classeur_source.sheets(I).range(Plage).formular1c1
    next
    end sub
    Dernière modification par Invité ; 14/03/2015 à 00h34.

  7. #7
    Membre éclairé
    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
    Par défaut
    Merci pour votre solution que je suis entrain de tester.
    Au faite il faut noter que les plages à copier-coller ne comportent pas de formule mais certaines autres cellules et feuilles non concernées par le copier-coller en comportent.
    J’approfondis le test et vous reviens.

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

Discussions similaires

  1. [VBA-E]Récupérer des données dans différents classeurs
    Par christellec20 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/03/2007, 18h32
  2. [VBA-E] Récupérer des données dans différents classeurs
    Par christellec20 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/03/2007, 11h13
  3. Réponses: 6
    Dernier message: 19/02/2007, 16h44
  4. [VBA-EXCEL] Visibilité données dans le classeur
    Par mimic50 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/02/2007, 12h13
  5. Réponses: 1
    Dernier message: 04/06/2006, 16h08

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