MAJ fichiers identiques issus de classeurs différents

Bonjour à tous,

Je suis nouvelle sur le forum et débute sur VBA.

je bute sur un problème de mise à jour de fichiers provenant de classeurs différents qui ont exactement la même structure.

En effet, une trentaine de collaborateurs doit compléter un fichier (une Skills Matrix). Le fichier est envoyé à chaque collaborateur qui remplit son niveau de compétences dans sa colonne dédiée (1 colonne à remplir par collaborateur)

Les collaborateurs me renvoient leur fichier grâce auquel je dois mettre à jour le fichier Source.

Le fichier des collaborateurs a exactement la même structure que le fichier Source.

Pour des raisons pratiques, je souhaiterais construire une Macro pour me permettre de mettre à jour le fichier Source en cliquant sur un simple bouton lorsque j'ouvre les fichiers des collaborateurs. (Je ne veux pas que ce soit automatique à l'ouverture du fichier Source)

J'aurais donc deux questions :

1. pouvez-vous svp m'aider à construire le code ?

2. les collaborateurs vont me renvoyer leur version au fil de l'eau. Le fichier de chaque collaborateur comprend les colonnes des autres collaborateurs également. Ainsi, si je reçois le fichier du Collaborateur 1, je vais mettre à jour le fichier Source via la macro. Un peu plus tard dans la semaine par exemple, je reçois le fichier du Collaborateur 2 mais les données du collaborateur 1 ne seront pas les nouvelles données comme le Collaborateur 2 utilise le fichier qu'il a reçu au départ et non le fichier à jour (je ne sais pas si je suis claire !!!) du coup, si je mets à jour le fichier Source pour avoir les nouvelles données du collaborateur 2, j'ai peur que le fichier Source mette aussi à jour toutes les autres données, à savoir celles de la colonne relative au collaborateur 1 alors que ce sont les anciennes données!!! je ne me rends pas compte si ma crainte est fondée ou pas du tout vu ma toute petite expérience d'excel !

en PJ : un fichier simplifié de mon fichier source

merci de votre retour et de votre aide!

Bonjour et bienvenue sur le forum

melimelo57 a écrit :

pouvez-vous svp m'aider à construire le code ?

Réponse : oui

Si tu ne veux pas courir le risque de mauvaise mise à jour que tu décris, le plus sûr serait d’envoyer à chaque collaborateur un fichier vierge qu’il aurait à remplir dans la colonne qui le concerne.

Lorsque tu le reçois en retour, la macro n’aurait plus qu’à compléter ton tableau récapitulatif.

Qu’en dis-tu ?

Bye !

Merci beaucoup de ta réponse rapide Gmb !

effectivement, c'était l'une des solutions envisagées mais le fait est que le manager de l'équipe veut donner la possibilité à chaque collaborateur de pouvoir s'évaluer en fonction des compétences des autres collaborateurs et donc pour cela de laisser visibles les résultats des autres! Désolée j'avais oublié de préciser ce point.

D'ailleurs, j'ai aussi manqué de clarté quant à l'explication du doc attaché: les colonnes remplies par le scollaborateurs et devant être mises à jour à chaque fois ensuite sont les colonnes J, O, T dans l'exemple donné.

Je cherche de mon côté et j'ai notamment essayé d'effectuer les actions après avoir lancé l'enregistrement de la macro et voici le code que j'obtiens. Bien évidemment, ça ne marche pas!!! il manque l'ouverture du fichier Collaborateur dans tel dossier au début je pense. Est-ce qu'il faudrait un truc du genre : Workbook (x emplacement du fichier dans le dossier).Open?

Sub MAJ()

'

' MAJ Macro

'

'

Range("AN13:AN20").Select

Selection.Copy

Windows("APTP - Change IT - Skills Inventory v20 test.xlsm").Activate

Range("AN13").Select

ActiveSheet.Paste

Application.CutCopyMode = False

End Sub

Merci encore de ton aide

Melissa

Alors, voilà ce que je te propose.

Tu baptises ton fichier : ‘’SKills Matrix – Recap’’ ou autre chose mais qui finit par ‘’Recap’’, pour le distinguer de ceux que tu vas envoyer à tes collaborateurs.

Chaque fois que tu enregistres quelque chose dans ce fichier, via une macro, un autre fichier identique se met à jour en même temps. Il s’appellera ‘’ SKills Matrix’’.

C’est celui-là que tu enverras à tes collaborateurs et qu’ils te retourneront.

Quand l’un d’entre eux te le renvoie, complété, tu l’ouvres ainsi que ton fichier récap. Et tu lances la macro grâce à un bouton (sur ton fichier)

La macro te demande de choisir le nom du collaborateur concerné dans une liste déroulante et … vogue la galère, elle te fait la mise à jour de ton recap et de l’autre fichier !

Un autre solution pourrait consister à disposer d’un fichier par collaborateur : ‘’Skill Matrix – Collaborateur x’’

Dans ce cas, la macro ne te pose plus de question puisqu'elle le trouve dans le nom du fichier ouvert. Elle met à jour tous les fichiers du dossier. Mais cela sera un peu plus long, surtout si tu en as 30. Et il te faudra envoyer le bon fichier au bon collaborateur.

Qu’en dis-tu ?

Juste pour info : je n'aurai pas accès à mes mails durant une dizaine de jours. Aussi si vous avez la gentillesse de me venir en aide sur ce sujet et que je ne vous réponds pas tout de suite, ne m'en veuillez pas

je serai à nouveau dispo début avril.

Merci en tout cas d'avance pour les éventuelles réponses reçues

A bientôt

ah ouiiii! ta 1ere option me parait super! je te remercie beaucoup de l'idée.

Je suis désolée mais je vais avoir besoin de toi et de tes super lumières pour contruire la macro justement !:)

sans vouloir abuser, pourrais-tu stp m'aider? car je ne suis pas sûre de pouvoir réussir. je me suis acheté un bouquin sur VBA mais ...!!

par contre, comme je le disais dans mon précédent message, je ne serai plus joignable cet après-midi et ce jusque début avril.

merci encore en tout cas pour ta proposition

Je te prépare quelque chose...

Au mois prochain donc !

Bye !

Bonjour

Voici ma proposition.

Quelques indications tout d'abord.

• Les deux dossiers, le dossier Récap et sa copie doivent être enregistrés dans le même dossier. Ex ''Dossier Mélimélo''

• Il ne faut pas mettre le dossier reçu d’un collaborateur dans ce dossier. D’une part Excel demanderait d’écraser celui qui y existe sous le même nom, et ce n’est pas le but … Le laisser sur le bureau ou le mettre dans un autre dossier.

• On peut changer le nom du fichier Récap : il n’intervient pas dans la macro

• En revanche, si tu veux changer le nom de sa copie, il faut modifier également le modifier dans la macro où il intervient :

Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    UserForm1.Hide

    'Tests préliminaires
    On Error GoTo OuvrirFichier

    With Workbooks("SKills Matrix.xlsx")
    . . . . 

• Lorsque la macro a fini son travail, le fichier reçu se referme et reste dans l’état où il était et le fichier qui reste affiché est déjà enregistré dans le Dossier Mélimélo, ainsi que sa copie

Tout cela te convient –il ?

Pour tester dans les conditions réelles tu dois d'abord faire un petit travail préalable :

1 – Créer un dossier ; ex :’’Dossier Mélimélo’’

2 – Y enregistrer le fichier joint : ‘’SKills Matrix - Récap’’

3 – Sur le fichier à l’écran, supprimer le bouton bleu ‘’Mise à jour’’ : clic droit dessus, clic gauche sur la bordure pour sélectionner l’image et non le texte du bouton, puis taper sur la touche ‘’Suppr’’

4 – Enregister dans le Dossier Mélimélo sous le nom ‘’SKills Matrix’’ au format .xlsx : sans macro ce sera la copie du premier

5 – Apporter des modifications au fichier toujours présent à l’écran comme si c’était celui retourné par un collaborateur.

6 – L’enregistrer sur le bureau puis le fermer

Tu es alors dans les conditions réelles : il n’y a plus de fichier Matrix à l’écran.

A – Ouvre le fichier Matrix qui est sur le bureau et qui représente celui retourné par un collaborateur

B – Ouvre le fichier Récap

C – Clique sur le bouton bleu de mise à jour

C’est tout. Le travail est fait.

Reste à vérifier : ouvre le fichier Matrix du dossier Mélimélo. A-t-il bien pris en compte les modifications ?

Dernière opération, à ne faire qu’une fois : me dire le résultat.

Bye !

Hello,

je reprends le travail aujourd'hui et je découvre avec grand plaisir que non seulement tu m'as répondu et je t'en remercie beaucoup mais qu'en plus ça marche super bien !!! DOUBLEMENT MERCI!! c'est vraiment génial et très propre!

je ne doutais pas de ta solution mais plutôt de ma capacité à la mettre en oeuvre !

du coup ma reprise est un peu moins douloureuse grâce à toi

J'ai juste deux petites questions stp :

1. le dossier Skills Matrix qui représente la copie du fichier Récap doit-il obligatoirement être en format .xlsx? En effet, le fichier comporte d'autres macros simples (boutons qui renvoient à d'autres feuilles du classeur). j'aurais besoin de conserver ces macros lorsque je l'envoie aux collaborateurs. Je suis désolée, je ne me suis pas rendu compte que cela pourrait avoir une incidence.

J'ai refait un test sur ton fichier en modifiant le format xlsx pour xlsm dans le code de ta macro mais ça ne marche pas malheureusement?

2. pourrais-tu m'expliquer comment je peux modifier et ajouter des collaborateurs à la liste déroulante des collaborateurs lorsque je clique sur Mise à jour? d'ailleurs, si cela ne t'embête pas trop, je serais très curieuse de savoir comment tu as procédé. Je trouve ça super !

Je te remercie beaucoup de ton aide

Bonjour et bon retour

melimelo57 a écrit :

le dossier Skills Matrix qui représente la copie du fichier Récap doit-il obligatoirement être en format .xlsx?

Pas du tout.

Mais il faut tout de même

• que la macro le sache : c’est le cas pour le fichier ci-joint

• Que dans ton dossier où se trouvent ce fichier il y ait la copie avec ce format.

pourrais-tu m'expliquer comment je peux modifier et ajouter des collaborateurs à la liste déroulante

Il te suffit d’ajouter des colonnes dans tes differents fichiers en faisant bien attention :

• A conserver les mêmes principes que les précédentes : 2 colonnes par nom, nom dans la première des deux, colonne des noms 5 colonnes après celle des nom précédents ….

• A retrouver ces mêmes données dans les copies avec le nom écrit rigoureusement de la même manière : orthographe mais aussi majuscules, espaces …

je serais très curieuse de savoir comment tu as procédé

C’est la macro ‘’Initialize’’ de l'UserForm qui se charge de ça :

Private Sub UserForm_initialize()

    For col = 9 To Cells(3, Columns.Count).End(xlToLeft).Column Step 5
        ComboBox1.AddItem Cells(3, col).Value
    Next col
End Sub

OK ?

Bye !

merci pour tes explications et modif.

je vais essayer de faire le test sur mon fichier et te tiens au courant.

Merci encore

Bonne soirée

Hello,

alors c'est bien ce que je craignais ! je suis désolée mais je ne parviens pas à affecter ta macro à mon doc.

j'ai essayé de 2 manières : - de la copier après avoir cliqué sur "New" dans Developer-Macro. Ca me met un message d'erreur : Compile Error-Expected End Sub

- comme je la retrouvais dans ma liste de macro à l'ouverture de mon propre fichier, j'ai essayé de l'affecter à un bouton mais forcément ça me dit que c'est lié au fichier au Skills Matrix Recap v2 qu'il ne retrouve pas.

PAr ailleurs, tu me disais que si je veux changer le nom de la copie, je dois aussi le modifier dans la macro du user form + MAJ, c'est bien cela?

Autre question stp: si jamais, je souhaite aussi faire la MAJ sur la 1ere colonne sous le nom en plus de la 2eme, ca se passe ici?

Private Sub UserForm_initialize()

    For col = 9 To Cells(3, Columns.Count).End(xlToLeft).Column Step 5
        ComboBox1.AddItem Cells(3, col).Value
    Next col

et je peux ajouter cette même partie en mettant For col = 8 ?

Merci encore de ton aide et de at patience


Pourrais-tu stp m'expliquer cette partie pour que je comprenne un peu mieux le fonctionnement de cette macro:

'Recopie des données

col = ComboBox1.ListIndex * 5 + 10

fS.Range(fS.Cells(5, col), fS.Cells(23, col)).Copy Cells(5, col)

je crois comprendre qu'il s'agit des 5 colonnes (2 visibles et 3 cachées) et des 10 lignes. mes catégories n'ont pas toutes 10 lignes dans mon tableau, du coup ca marchera quand même et même si j'ajoute des lignes, il y en a en effet plus de 300 en réalité.

j'ai fait le test en supprimant des lignes et ça a bien marché mais je préférais m'en assurer auprès de toi

merci

Bonjour

melimelo57 a écrit :

je ne parviens pas à affecter ta macro à mon doc.

Alors, envoie-moi ton ''doc'' et je ferai l'adaptation.

Bye !

ohh je suis vraiment désolée d'abuser autant. C'est vraiment très gentil de ta part.

Du coup, peut-être que j'arriverais mieux à comprendre le code dans ce cas. Du moins je l'espère bien !on peut vraiment faire des trucs géniaux avec excel!

et du coup, j'abuse encore mais tu penses pouvoir ajouter stp la mise à jour de la 1ere colonne sous le nom?

Un énorme merci, je vais vraiment plancher sur tout ça!

je n'arrive pas à joindre mon fichier il est trop gros même en le compressant, ca ne passe pas...

du coup j evais essayer de revoir ton code. j'ai réussi à faire un userform.

je te remercie beaucoup pour ton aide jusqu'à présent

Passe par http://www.cjoint.com

bye !

décidément ... c'est super !

je te remercie

voici le lien

Ci-joint la nouvelle version.

melimelo57 a écrit :

tu me disais que si je veux changer le nom de la copie, je dois aussi le modifier dans la macro du user form + MAJ, c'est bien cela?

C’est bien cela.

si jamais, je souhaite aussi faire la MAJ sur la 1ere colonne sous le nom en plus de la 2eme, ca se passe ici?

Désolé mais je ne comprends pas ce que tu veux dire.

La macro initialize permet de charger le combobox qui présente la liste des collaborateurs. Comme leur nom est passé de la ligne 3 (fichier matrix) à la ligne 11 (fichier inventory), il faut adapter. Cela devient :

Private Sub UserForm_initialize()

    For col = 9 To Cells(11, Columns.Count).End(xlToLeft).Column Step 5
        ComboBox1.AddItem Cells(11, col).Value
    Next col
End Sub

Pourrais-tu stp m'expliquer cette partie pour que je comprenne un peu mieux le fonctionnement de cette macro:

'Recopie des données

col = ComboBox1.ListIndex * 5 + 10

fS.Range(fS.Cells(5, col), fS.Cells(23, col)).Copy Cells(5, col)

Quand on choisit la première valeur du combobox (Collaborateur 1), combobox1.ListIndex vaut 0 (zéro) et la colonne de la feuille est la colonne 10

Quand on choisit la 2° valeur du combobox (Collaborateur 2) combobox.ListIndex vaut 1 et la colonne de la feuille est la colonne 15

La relation entre la colonne de la feuille et la position de l'item du combobox se calcule donc comme l’équation d’une droite passant par 2 points dans un repère (x,y)

La 2° ligne que tu reproduis ne fait que copier la plage des valeurs de cette colonne d’un fichier sur l’autre.

A noter aussi que comme tu as ajouté des lignes, j’ai modifié formule pour bien tout copier…

OK ?

Bye !

hello !

C'est très clair, je te remercie beaucoup. je dis pas que j'arriverai à en construire une toute seule d'ici peu mais en tout cas après avoir bien analysé ton code, je comprends à quoi renvoient les lignes.

Par contre, j'ai juste deux points :

1. quand j'ouvre la matrix, j'ai un message qui me dit que certaines données sont liées à des sources externes (Screenshot 1 du doc en PJ)- je suppose que c'est du fait que le doc recap ets lié à sa copie. je me permets de l'évoquer tout de même car j'étais surprise comme ça ne l'avait pas fait lors des tests d'hier avec les versions initiales.

2. quand j'enregistre le doc récap et que je l'ouvre pour une nouvelle mise à jour par ex, j'ai le message du screenshot 2 qui apparaît: que certaines données sont illisibles et du coup je dois le mettre en mode "repaired". Excel explique alors qu'il a dû "réparer"ou "retirer" certains éléments : Screenshot 3 + screenshot 4 pour avoir les éléments retirés.

Est-ce que tu aurais une idée de la source de ces messages?

Merci beaucoup

melissa

Bonjour

Curieux... je n'arrive pas à trouver le ou les cellules qui contiennent des références à un autre fichier.

Je suis donc reparti du document initial en y mettant mes macros et UserForm

Bye !

Rechercher des sujets similaires à "maj fichiers identiques issus classeurs differents"