Mise à jour d'un fichier Excel à partir d'un autre fichier

Bonjour,

Je galère pour trouver la solution à mon problème et souhaiterai savoir si il aurait des personnes qui pourraient m'aider?

Au fait, j'ai deux fichiers excel (ci-joint la forme des fichiers).

Je dois créer un bouton dans le fichier Mettre_à_jour_Liste_Employés qui me permettra à chaque fois que je clic dessus, de remplir celui-ci ou de mettre à jour la ligne des matricules déjà existent dans le fichier Mettre_à_jour_Liste_Employés et cela à partir du fichier Base_de_données.

En effet il devra vérifier si les matricules existants dans le fichier Base_de_données se trouve aussi dans le fichier Mettre_à_jour_Liste_Employés si oui il met à jour dans le fichier Mettre_à_jour_Liste_Employés les les info de ce matricule (à partir Base_de_données)

Sinon si le matricule n'existe pas dans Mettre_à_jour_Liste_Employés alors il ajoutera ce matricule avec les info lui correspondent (à partir Base_de_données) .

Correspondance des champs

Matricule =>Matricule

Nom =>NomUsuel

Prenom =>Prénom

DateNaissance =>

H/F => Qualité

Type de contrat =>Classification

CSP =>Cost Center

Etablissement => Etablissement

Direction Générale => CodeUnitéOrganisLLUO1

Direction métier =>Code unité organis

Je ne sais pas si j’étais assez claire.

Merci pour votre aide.

351base-de-donnees.xlsx (10.78 Ko)

Bonjour et bienvenu(e)

Les 2 fichiers dans le même répertoire

A tester

Bonjour et merci pour votre réponse ça marche.

Comme j'aime pas faire les choses bêtement et comme je suis débutante je souhaiterais savoir si possible de me mettre des commentaires sur chaque ligne dans la macro (pour la macro MiseAJour et Declarations ).

As-tu utilisé un bouton formulaire ou active X

Merci pour ton retour.

Bonjour

Des commentaires dans le code

amoul87 a écrit :

As-tu utilisé un bouton formulaire ou active X

Une forme (un dessin quelconque)

Merci pour les commentaire.

par contre pour la ligne suivante j'ai pas bien compris

T1(1, I) = .Cells(J, Choose(I, "B", "D", "E", "ZZ", "C", "L", "AR", "R", "AO", "AL"))

T1(1, I) 'c'est le tableau qui recoit les valeurs la ligne

Choose(I, "B", "D", "E", "ZZ", "C", "L", "AR", "R", "AO", "AL") 'ça c'est pour prendre les valeurs souhaitées

(si j'ai bien compris le j renvoie le numéro de la ligne du fichier base de données) par contre je ne comprends pas ce que sera le resultat de :

.Cells(J, Choose(I, "B", "D", "E", "ZZ", "C", "L", "AR", "R", "AO", "AL"))

Bonjour

Cells demande 2 paramétres : Ligne et Colonne

Dans

 .Cells(J, Choose(I, "B", "D", "E", "ZZ", "C", "L", "AR", "R", "AO", "AL"))

La ligne sera toujours J

Pour la colonne elle va varier en fonction de l'élément ( I ) du tableau

Quand I = 1 --> On va stocker dans le tableau la valeur de la cellule : Cells(J, "B")

Quand I = 2 --> On va stocker dans le tableau la valeur de la cellule : Cells(J, "D")

etc...

etc..

Quand I = 10 --> On va stocker dans le tableau la valeur de la cellule : Cells(J, "AL")

Pour schématiser

Ça

        For I = 1 To UBound(T1, 2)
          T1(1, I) = .Cells(J, Choose(I, "B", "D", "E", "ZZ", "C", "L", "AR", "R", "AO", "AL"))
        Next I

Équivaut à ça

        T1(1, 1) = .Cells(J, "B")
        T1(1, 2) = .Cells(J, "D")
        T1(1, 3) = .Cells(J, "D")
        T1(1, 4) = .Cells(J, "ZZ")
        T1(1, 5) = .Cells(J, "C")
        T1(1, 6) = .Cells(J, "L")
        T1(1, 7) = .Cells(J, "AR")
        T1(1, 8) = .Cells(J, "R")
        T1(1, 9) = .Cells(J, "AO")
        T1(1, 10) = .Cells(J, "AL")

Ok j'ai bien compris.

je te joint les deux fichier originales avec les quels je travaille mais ils comporte uniquement 3 lignes.

le soucis c'est que dans le fichier que je dois mettre ajour quand je lance la macro il commence a mettre le resultat a la premiere ligne non pas au dessous de l'entete jaune.

De plus quand un matricule existe deja dans le fichier à mettre à jour il lui recrée une autre ligne au lieu de modifiers les info sur la ligne deja existante. a chaque clic sur le bouton il duplique les ligne il ne met pas à jour.

Merci pour ton aide et desolée de t'avoir embêter

119effectif.xlsx (141.36 Ko)

Bonjour

En recopiant tu as oublié le . ( point ) devant Range("B" & j)

Set Cel = Wsheet.Columns("A").Find(what:=.Range("b" & J), LookIn:=xlValues, lookat:=xlWhole)

C'est tout ce que j'ai vu

Bonjour Banzai64,

Merci bcp pour ton aide. Comme je te l'ai déjà dit je ne veux pas faire les choses bêtement sans les comprendre et franchement tu m'as bcp aidé.

je pense que ça va être ma dernière question=> la je bloque au niveau de "Cel"

D’après ce que j'ai compris :

'ici

Cel = Wsheet.Columns("A").Find(What:=.Range("B" & J), LookIn:=xlValues, lookat:=xlWhole)

' la variable Cel peut recevoir deux valeur ( "Is Nothing" ou "Not Is Nothing")

et du coup si c'est bien ça, je ne comprends pas ce que c'est le " Cel.Resize " dans ce qui suit

Cel.Resize(1, UBound(T1, 2))= T1 ce qui est <=> Cel.Resize(1, 10) = T1

Merci bcp pour ton aide.

Bonjour

Je vais essayer

Set Cel = Wsheet...... cherche la valeur .Range("B" & J) dans la Columns("A")

En retour 2 possibilités : Trouvé et .... Pas trouvé

Pour signaler "Pas trouvé", Cel (qui est un objet Range) aura la valeur Nothing (rien, vide, que dalle, Nada etc...)

Pour signaler "Trouvé" Cel aura la valeur de .Range("B" & J) (Cel.value) , mais aussi son adresse (Cel.Address)

Pour Cel.Resize(...) Cel étant un objet Range, on peut le redimensionner ( Resize(Nombre de ligne,Nombre de colonne) )

Comme tu as marqué

Cel.Resize(1, UBound(T1, 2))= T1 = Cel.Resize(1, 10) = T1

On redimensionne (agrandit - dans ce cas-) la cellule Cel de 1 ligne (donc ne change pas en hauteur) et Ubound(T1) ( dans ce cas 10 colonnes)

Si au départ : Cel.Address = $B$1, après le redimensionnement on a Cel.Resize(1, UBound(T1, 2)).Address = $B$1:$K$1

Et c'est dans cette zone que l'on copie le tableau T1

Tu as une touche magique F1

Place le curseur sur un mot ( exemple Resize ) et appuie sur F1

Super merci merci merci bcp pour ton aide précieuse et en plus jusqu'au bout.

Bonne continuation.

Bonjour Banzai64,

Désolée je sais que je vous ai trop embêté avec ce sujet.

Au fait je galère sur un dernier truc, j'ai une dernière question:

la recherche du matricule dans les fichier tableau formation se fait une fois du coup il me met à jour uniquement la première occurrence du matricule mais moi je veux qu'il me mette à jour toutes les lignes des duplicatas d'un matricule.

Obtenu: met à jour uniquement la première occurrence du matricule.

Attendu: Mise a jour des lignes de toutes les occurrences d'un matricule.

Merci pour ton aide

Bonjour,

je vous embête encore une fois comme vous pouvez le voir dans ce qui a été fait précédemment. je voudrais rajouter une colonne au début de mon fichier que je doit mettre a jour. Justement actuellement la recherche du matricule dans le fichier a MAJ se fait a la colonne A donc si j'ajoute une colonne juste avant il se décale a la colonne B

Cependant comme j'ai une nouvelle colonne juste avant le matricule dans le T1

le reseize ne fonctionne pas et décale l'emplacement du T1. j'airerai savoir si y'a moyen de faire le reseize a partir de la cellule qui a gauche de l'adresse du matricule trouvé ( avoir un reseize a partir de la cellule qui a gauche de B1 (matricule))

merci pour votre aide.

---Résultat obtenu actuel:

Matricule Nom Prenom DateNaissance H/F Type de contrat CSP Etablissement Direction Génér DirectionMétier

0003072 amoul amoula 12/08/1967 M. DI EMP GRENOBLE Direction Générale 1 Direction 1

--- Résultat souhaité:

Société Matricule Nom Prenom DateNaissance H/F Type de contrat CSP Etablissement DirectionGénér DirectionMétier

soc1 0003072 amoul amoula 12/08/1967 M. DI EMP GRENOBLE Direction Générale 1 Direction 1

Rechercher des sujets similaires à "mise jour fichier partir"