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

Excel Discussion :

comparer 2 colonnes si "match" copier/coller le format de la colonne1 sur la colonne 2


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut comparer 2 colonnes si "match" copier/coller le format de la colonne1 sur la colonne 2
    Bonjour,
    J'ai besoin d'effectuer une comparaison sur deux colonnes et pour chaque valeurs identiques, de copier/coller le format des cellules de la colonne1 vers le colone2?

    Par exemple:
    dans l'onglet1 : en B3 "Carotte" en orange
    dans l'onglet2 : en B16 "Carotte" sans couleur
    J'aimerai alors recopier la couleur de la cellule "carotte" de onglet1 B3 vers l'autre cellule "carotte" en onglet2 B16


    Pour m'aider j'ai trouver un fichier sur le net (pièces jointes "comparaison_original") qui compare deux colonnes de deux onglets dans un même classeur, ce fichier indique le numéro de la ligne à la quelle il a trouvé la même valeur. à la place j'aimerai simplement qu'il copie le format pour le coller sur l'autre onglet.

    Je joint également un premier essaie qui me permet de copie le format d'une colonne vers une autre sans tenir compte des valeurs.


    Merci d'avance pour votre aide
    Je suis sur excel 2007
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Voici une solution pour effectuer la copie de couleur.
    A noter que la recherche ne prend pas en compte les solutions multiples (plusieurs fois le mot carotte par exemple). Si besoin, cela peut être adapté.

    Cordialement.
    Fichiers attachés Fichiers attachés

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Un grand merci c'est exactement ce qu'il me fallait!

    toute fois est ce que cela peut fonctionner si les onglets "source" et "cible" sont dans des fichiers différents?
    il faudra peut être modifier ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set WsS = Worksheets("Feuil1") 'Feuille source
    Set WsC = Worksheets("Feuil2") 'Feuille cible
    Et je remarque que s'il n'y a pas de couleur de fond dans la cellule source, la macro met du blanc a la place dans la cellule cible. Est-il possible de copier coller le format complet avec bordures, police ...?

    Et encore une question est-il possible de coller le format de la cellule source sur, non pas une seule cellule de l'onglet cible, mais une ligne? (disons 5 colonnes A B C D E de l'onglet cible).

    Encore merci pour ce code qui va déjà m'être très utile

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    est ce que cela peut fonctionner si les onglets "source" et "cible" sont dans des fichiers différents?
    Oui. Il faut simplement que tu gères correctement l’ouverture de tes fichiers et la déclaration de tes classeurs et feuilles.
    Est-il possible de copier coller le format complet avec bordures, police non pas sur une seule cellule de l'onglet cible, mais une ligne? (disons 5 colonnes A B C D E de l'onglet cible).
    Essaie comme cela
    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
    Public Sub Start()
    Dim WsS As Worksheet, WsC As Worksheet
    Dim PlageS As Range, Cel As Range, C As Range
        Set WsS = Worksheets("Feuil1") 'Feuille source
        Set WsC = Worksheets("Feuil2") 'Feuille cible
        'On définit la plage source
        Set PlageS = WsS.Range("B2:B" & WsS.Range("B" & WsS.Rows.Count).End(xlUp).Row)
        'On balaye toutes les cellules de la plage source
        For Each Cel In PlageS
            'Pour chaque cellule de la plage source, _
            on recherche dans la colonne B de la feuille cible une cellule de même valeur.
            Set C = WsC.Columns(2).Find(Cel, LookIn:=xlValues, lookat:=xlWhole)
            'Si cette cellule existe
            If Not C Is Nothing Then
                'on lui affecte le même format ainsi qu'aux cellules adjacentes
                Cel.Copy
                C.Offset(0, -1).Resize(1, 5).PasteSpecial Paste:=xlPasteFormats
            End If
        Next Cel
        Application.CutCopyMode = False
    End Sub
    Cordialement

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Un grand merci pour le code c'est parfait!
    Pour le faire fonctionner sur plusieurs fichiers ... ba sais po faire non plus
    Voici arborescence des fichiers :
    _ Dossier
    Fichier1.xlsx--->onglet Source "8SB"
    Fichier2.xlsx--->onglet Cible "8SB"
    Macro.xls----->contenant la macro

    Les deux onglets (source et cible) portent le même nom mais sont dans des fichiers différents. j'ai placé la macro seule avec un onglet "macro" dans un autre fichier.

    Mais je ne sais pas comment déclarer les fichiers correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set WsS = Worksheets("[fichier1.xlsx]8SB") 'Feuille source
    Set WsC = Worksheets("[fichier2.xlsx]8SB") 'Feuille cible
    Ca c'est sur çà marche pas.


    A savoir j'ai au total 7 code différents : 8SB, 8MH, 8SA ...
    Chacun ont un fichier de la veille : onglet Source et un fichier du jour : onglet Cible.
    J'aimerai que le fichier macro, lorsque je clic sur par exemple le bouton "8SB" ouvre lui même les deux fichiers, copie et colle les info de l'onglet source sur l'onglet cible.

    ensuite, a ce jour je fait a la main mais on peut peut etre mettre çà aussi dans la macro : je ferme le fichier source(celui de la veille) et j'enregistre le fichier du jour sur le fichier de la veille pour l'écraser.

    Voilà s'il y a une solution pour tout çà on arriverai vraiment au top!

    Merci d'avance

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Je reformule pour être certain d’avoir compris.
    Tu as 2 classeurs pour les données (Fichier1.xlsx et Fichier2.xlsx) et un classeur pour la macro (Macro.xls).
    Chacun des 2 classeurs de données contient 7 feuilles (8SB, 8MH, 8SA, ...).
    Chaque jour, les formats du fichier de la veille Fichier1.xlsx (classeur "Source") sont copiés dans le fichier du jour Fichier2.xlsx (classeur "Cible").
    Le fichier source (celui de la veille) est fermé en l’état.
    Le fichier cible (celui du jour) est enregistré avec le nom du fichier de la veille et vient écraser ce dernier.

    Est-ce que la copie est effectuée sur toutes les feuilles ou uniquement sur des feuilles sélectionnées auparavant ?

    Voici un lien pour te familiariser avec les ouvertures/fermetures de classeurs.
    http://vb.developpez.com/faqvba/?page=3.2#booknosave

    Cordialement.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Tu as tout compris sauf pour les 7 feuilles des fichiers, en réalité il existe un jeu de deux fichiers par code: le 8SB a son fichier de la veille + celui du jour ; idem pour 8MH ...

    J'aurais dû t'expliquer un peu mieux c'est vrai :
    • Dossier "Synthèse des manquants"
    • |__Dossier "01 - MANQUANTS" (ce dossier contient les fichiers "source"
      |_____Fichier"Manquants_8SB.xlsx" (Fichier de la veille source) 1seul onglet "8SB"
      |_____Fichier"Manquants_8SA.xlsx" (Fichier de la veille source) 1seul onglet "8SA"
      |_____Fichier"Manquants_8MH.xlsx" (Fichier de la veille source) 1seul onglet "8MH"
      |_____Fichier"Manquants_8MK.xlsx" (Fichier de la veille source) 1seul onglet "8MK"
    • |__Dossier "02 - DATAS" (ce dossier contient les nouveaux fichiers exportés depuis access)
      |_____Fichier"8SB.xlsx" (Fichier du jour cible)1seul onglet "8SB"
      |_____Fichier"8SA.xlsx" (Fichier du jour cible)1seul onglet "8SA"
      |_____Fichier"8MH.xlsx" (Fichier du jour cible)1seul onglet "8MH"
      |_____Fichier"8MK.xlsx" (Fichier du jour cible)1seul onglet "8MK"


    Voilà c'est peu être plus clair comme çà, les fichiers sont placés sur le réseau pour les essaies je vais faire comme s'ils étaient placer a la racine de ma clé usb G:\

    Je vais jeter un oeil a ton lien
    merci

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    C’est plus clair effectivement mais .... dans un post précédent, tu évoquais 7 codes différents : 8SB, 8MH, 8SA ... Apparemment, il n’en reste plus que 4. Normal ?
    Lorsque tu réalises une copie, est-ce qu’elle concerne un seul code (donc 2 fichiers), plusieurs codes ou la totalité des codes ?
    Si tu souhaites effectuer une copie pour un seul couple, il suffit de faire une identification du couple concerné.
    Si tu dois pouvoir choisir plusieurs couples, il faut que tu prévoies de coder cette sélection.
    Si tu effectues systématiquement la copie de la totalité des couples, il suffit de gérer les ouvertures / fermetures des fichiers.

    Cordialement.

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    re bonjour,
    il y a bien 7 code je ne les ai pas tous listés.

    il y a Une copie par code entre 2 fichiers

    J'avais pensé créer 7 boutons (1 par code) qui appellerai un couple précis avec chacun sa propre macro. voici la macro pour le code 8SB :

    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
    Public Sub Start()
    'ouverture des fichiers
    Application.Workbooks.Open "G:\Synthese des manquants\01-MANQUANTS\Manquants_8SB.xlsx"
    Application.Workbooks.Open "G:\Synthese des manquants\02-DATAS\8SB.xlsx"
     
    Dim WsS As Worksheet, WsC As Worksheet
    Dim PlageS As Range, Cel As Range, C As Range
        Set WsS = Worksheets("8SB") 'Feuille source
        Set WsC = Worksheets("8SB") 'Feuille cible
        'On définit la plage source
        Set PlageS = WsS.Range("B2:B" & WsS.Range("B" & WsS.Rows.Count).End(xlUp).Row)
        'On balaye toutes les cellules de la plage source
        For Each Cel In PlageS
            'Pour chaque cellule de la plage source, _
            on recherche dans la colonne B de la feuille cible une cellule de même valeur.
            Set C = WsC.Columns(2).Find(Cel, LookIn:=xlValues, lookat:=xlWhole)
            'Si cette cellule existe
            If Not C Is Nothing Then
                'on lui affecte le même format ainsi qu'aux cellules adjacentes
                Cel.Copy
                C.Offset(0, -1).Resize(1, 5).PasteSpecial Paste:=xlPasteFormats
            End If
        Next Cel
        Application.CutCopyMode = False
        'activation du fichier a fermer
        Windows("Manquants_8SB.xlsx").Activate
        'fermeture sans enregistrement
        ActiveWorkbook.Close False
        'activation du fichier a enregistrer
        Windows("8SB.xlsx").Activate
        'et la je ne sais pas coment lui dire enregistre toi sous :
        '"G:\Synthese des manquants\01-MANQUANTS\Manquants_8SB.xlsx"
     
    End Sub
    Les ouvertures et fermetures fonctionnement bien mais je ne sais pas comment enregistrer a la fin.
    par contre gros soucis les couleurs ne sont plus copier, on voit les cellules qui sont lu mais rien ne se passe.

    le fichier macrocolor ce trouve dans le dossier datas.

    Je ne comprends pas pourquoi çà ne fonctionne plus je n'ai pas touché l'intérieur du code.
    Fichiers attachés Fichiers attachés

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Le probleme vient surement de ces deux lignes la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set WsS = Worksheets("8SB") 'Feuille source
        Set WsC = Worksheets("8SB") 'Feuille cible
    Je ne sais pas comment lui dire que les onglets sont dans deux classeurs différents.

  11. #11
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Tu peux essayer le fichier joint en respectant le classement suivant
    G:\Synthèse des manquants\01 - MANQUANTS\Manquants_8SB.xlsx
    G:\Synthèse des manquants\02 - DATAS\8SB.xlsx
    G:\Synthèse des manquants\01 - MANQUANTS\Manquants_8SA.xlsx
    G:\Synthèse des manquants\02 - DATAS\8SA.xlsx
    G:\Synthèse des manquants\01 - MANQUANTS\Manquants_8MH.xlsx
    G:\Synthèse des manquants\02 - DATAS\8MH.xlsx
    G:\Synthèse des manquants\01 - MANQUANTS\Manquants_8MK.xlsx
    G:\Synthèse des manquants\02 - DATAS\8MK.xlsx
    Etc.

    Le programme propose la sélection des fiches codes, effectue la copie des formats, le nouveau nommage du fichier cible, la suppression de l’ancien fichier source et la fermeture du nouveau.

    Fais le test et dis-moi si ça bloque.

    Cordialement.
    Fichiers attachés Fichiers attachés

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    C'est absolument excellent!! y a rien a dire a part un grand MERCI!!
    j'ai juste deux petits soucis :
    - Je n'arrive pas a voir la macro, a part en causant un bug par le mode débogage.

    - Et je ne sais pas comment paramétrer la petite fenêtre pour changer les autres codes.

    Il faudra que je regarde au boulot je me souviens plus de tous et il me semble qu'il y en a un huitième.

    Sinon c'est vraiment le top! Encore Merci

  13. #13
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Ce que tu appelles "petite fenêtre" est en fait un Userform.
    Dans ce Userform, tu disposes du bouton "Quitter" qui te permet de sortir du programme et revenir à la feuille active. Tu peux ensuite cliquer sur l’onglet Développeur / Visual Basic pour accéder aux codes VBA.
    Tu dois tout d'abord afficher l'éditeur de macros (Alt + F11), puis l'explorateur de projets (CTRL + R).
    Dans le projet VBAProject (Copie_Comparaison_original.xls), tu vas t’intéresser à 3 parties :
    le module ThisWorkbook (sous Microsoft Excel Objects),
    le module Userform1 (sous Feuilles)
    le module Module1 (sous Modules)

    Voici les phases importantes du programme :
    A l’ouverture du classeur, on affiche l’Userform1 (lancement effectué avec l’évènement Workbook_Open du module ThisWorkbook).
    La sélection des feuilles à traiter est réalisée dans le code de cet Userform.
    Après sélection, on lance la procédure Start du Module1. C’est cette procédure qui assure le reste du traitement.

    Pour modifier le Userform1 afin de déclarer les autres feuilles, tu cliques 2 fois sur Userform1 (ou bouton droit / Afficher objet).
    Si tu n’es pas trop familiarisé avec l’utilisation d’un Userform, je te conseille ces lectures
    http://silkyroad.developpez.com/VBA/UserForm/
    http://silkyroad.developpez.com/VBA/...erForm/http://

    Cordialement.

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    Merci pour ces dernières infos, j'ai réussi a ajouter le code 8MB tout fonctionne très bien.

    Je n'aie plus qu'a installer tout çà au bureau demain, modifier quelques colonnes et çà devrait aller.

    Plus besoin de tout faire a la main, ce bijoux de programme va bien m'aider.

    Encore merci d'avoir usé tout ce temps pour m'aider,

    le final est parfait

    Je reviens demain te dire si çà fonctionne aussi bien au bureau.

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    Les tests effectués au bureau sont concluants, je n'ai testé que pour "8SB" mais tout c'est déroulé sans soucis.
    j'ai modifié quelques lignes la recherche doit se faire dans la colonne "C" et non "B" et il y a 23 colonne au total et non 5.
    mais a part çà, çà fonctionne très bien.

    je regarderais plus tard pour rajouter une fenêtre a la fin avec un message genre "mise a jour terminée".

    Voilà un grand merci pour ton aide,

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

Discussions similaires

  1. [XL-2013] Copier-Coller avec format conditionnel
    Par PICHOUX dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/01/2014, 10h33
  2. [XL-2003] Copier coller en fonction de non vide d'une colonne adjacente
    Par Vadorblanc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/03/2011, 20h43
  3. [XL-2003] copier coller avec des séparateur puis formatage sur une ligne
    Par kalwin dans le forum Excel
    Réponses: 3
    Dernier message: 17/09/2010, 19h45

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