Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Mettre à jour les données d'un fichier excel à partir d'un autre fichier avec VBA

LINA1997

XLDnaute Nouveau
Bonjour Team ,

J’ai besoin de votre aide j’ai cherché mais je n’arrive pas à trouver une solution..

J’ai deux fichiers Excel un fichier « A »et un autre « B »,

« A » contient plusieurs colonnes, « B » contient quelques colonnes qui sont déjà dans « A ».

J’ai besoin de faire 2 choses :

1- Mettre à jour « A » si les données de « B » changent, (Dans le fichier « A » il y a une possibilité de trouver le même nom ; prénom qui se répète, pour faire la comparaison je dois balayer la liste chercher la dernière occurrence du nom ; prénom en question et mettre à jour les informations.

2- Mettre à jour « B » si les données « de » A changent

Par exemple dans l’exemple que j’ai mis :

Pour le ‘Nom, Prénom ‘:Anol, fin’ j’ai deux lignes dans mon fichier « A » et il y a eu une modification au nouveau de fichier « B » donc je cherche la dernière ligne du ‘Nom, Prénom ‘:Anol, fin’ et je fais ma modification.

J’espère que j’ai bien expliqué mon problème, je vous remercie pour votre aide.
Cordialement ,
Lina
 

Pièces jointes

  • B.xlsx
    13.5 KB · Affichages: 53
Dernière édition:

LINA1997

XLDnaute Nouveau
Encore une fois merci pour votre temps ...
j'ai une idée et j’espère qu'elle va vous aider .. faire une comparaison des noms si je trouve que le nom change la mise à jour s’effectue sur la dernière occurrence , j'ai essayé de vous expliquer l'idée dans le fichier en PJ.
merci
 

Pièces jointes

  • explication.xlsx
    11.8 KB · Affichages: 41

zebanx

XLDnaute Accro
Bonjour,

Merci.

Il n'y aurait donc pas de projet, de dates... permettant de faire une clé commune et unique sur chaque tableau entre les deux fichiers.

De ma compréhension, votre dernier fichier correspond au tableau B et les valeur D2, D3 et D4 de ce tableau (fichier B) devraient alimenter dans l'ordre descendant du tableau A respectivement la première, deuxième et troisième lignes respectives ayant comme Nom 'Anol fin" soit :
"D2" (B) -->"AT10" (A)
"D3" (B) --> "AT14" (A)

Est-ce bien ça ?

Cdlt
thierry
 

LINA1997

XLDnaute Nouveau
Bonjour ,

Dans le fichier B les noms sont uniques il n’ya pas des doublons==> ligne par personne
Les doublons sont dans le fichier A, ==> nombre des lignes changent selon le nombre des projet
la comparaison doit se faire dans le fichier A
je dois chercher la dernière apparition du nom dans A et mettre à jour (Date Dernière convergence /Date prochaine convergence) à partir des données de fichier B.
merci
 

zebanx

XLDnaute Accro
Re-bonjour,

Ci-joint les deux fichiers. Il y a un détail complet sur le classeur "B".
Je pense que cela devrait correspondre à ce que vous souhaitiez ! (j'espère car j'y ai passé pas mal de temps mais c'est intéressant d'aller chercher l'occurence sur la dernière ligne).

Cdlt
thierry
 

Pièces jointes

  • B.zip
    111.8 KB · Affichages: 72

LINA1997

XLDnaute Nouveau
Bonjour,
Un grand merci pour votre temps et votre aide ,

Si j’ai bien compris lorsque j’ajoute une ligne dans mon fichier A je dois rajouter la même ligne dans le même emplacement dans la feuille « Liste A »?
c'est bien ça ?
merci
 

zebanx

XLDnaute Accro
Bonsoir,

Plus rapide encore, il faut faire une copie de la colonne D directement de la feuille 1 du classeur A vers cette liste A sur la première colonne.

L'important reste que si vous avez 900 lignes par exemple vous ayez bien la ligne sur la colonne AY du tableau A qui soit remplie parce que c'est sur ce critère (et pas le nom) que va se faire la recherche.
La colonne E de la feuille 1 du classeur B vient chercher le numéro de la dernière ligne correspondant au nom indiqué dans la colonne B. Faites quelques tests pour vous en assurer -).

Bonne soirée
thierry
 
Dernière édition:

LINA1997

XLDnaute Nouveau
Bonjour
Je vous remercie pour votre retour et pour votre aide, j’essaye de puis votre dernier poste de trouver une autre solution puisque je ne peux pas ajouter une nouvelle colonne à mon code mais je n’ai pas trouvé …

Je dois chercher comment trouver la dernière occurrence du nom sans avoir besoin d’une clé unique..

Donc je dois faire une boucle for chercher le dernier nom (comme j’ai expliqué la dernière fois et faire la mise à jour ) mais malheureusement pour moi je n’ai pas trouvé …

Avez-vous une autre solution pour moi @zebanx ?
merci
 

zebanx

XLDnaute Accro
Bonjour,

Une seule de mon point de vue.
Et elle est moins bonne.

Il faudrait :
- nécessairement rajouter une colonne pour avoir les numéros d'enregistrement (permettant de retrouver le tableau tel qu'il est présenté au départ -cf ci-dessous les autres étapes).
- ensuite faire un tri sur les noms (ordre ascendant)
- ensuite avoir une macro qui supprime les doublons de noms triés ou les trier manuellement en ayant mis une MEFC qui les mettent en évidence
- ensuite lancer la première macro de gosselien
- puis remettre tous les noms en vide en sélectionnant la colonne de "noms", sélectionner les cellules vides et recopier valeur (du dessous)
- et enfin retrier par la première colonne qui permet de retrouver le tableau de départ.

C'est plus long que la solution présentée avec les lignes.

Désolé, je ne devrais pas trouver mieux... La formule en AY peut très bien être rajoutée avant chaque traitement, ça me parait peu consommateur de temps de prendre cette option.
Mais j'espère que d'autres trouveront cette formule tant recherchée, objectivement, ça m'intéresse de l'avoir !

Cdlt
thierry

ps : je vais quand meme essayer de trouver un truc demain mais ce serait étonnant. Je vous tiens informé
 
Dernière édition:

zebanx

XLDnaute Accro
Bonsoir,

Il y aurait peut-être une solution si quelqu'un peut modifier le code pour utiliser une fonction INDIRECT dans la formule (qui permettrait de relier l'indirect de F4 (D14) de la feuille "B' à la dernière occurence du nom recherché dans la feuille "A").

Ca je ne sais pas faire et ça m'intéresserait beaucoup aussi.

Merci par avance à GOSSELIEN et d'autres experts de ce type de code s'il peuvent corriger l'excellent première copie de code de GOSSELIEN.

Bonne soirée.

thierry
 

Pièces jointes

  • fichiers du 24.07.2017.zip
    119.5 KB · Affichages: 27

gosselien

XLDnaute Barbatruc
Bonjour,
une autre façon de faire, basée sur la formule de le colonne F de B.XLS
Je n'utilise plus le "find" mais je me rends directement dans le classeur A, vers l'adresse mémorisée et là je colle les infos 42 et 43 colonne plus à droite
Les 2 classeurs ouverts bien sur
Il doit y avoir moyen de se passer de la formule en colonne E, mais j'en suis incapable sauf avec 3 ans devant moi en VBA

VB:
Option Explicit
Sub NewInfo3()
Dim Wb1, Wb2 As Workbook
Dim Wb1F1, Wb2F1 As Worksheet
Set Wb1 = Workbooks("A.xls"): Set Wb2 = Workbooks("B.xls")
Set Wb1F1 = Wb1.Sheets("feuil1")
Set Wb2F1 = Wb2.Sheets("feuil1")
Dim I, Last As Integer
Dim C, M1, M2, Cel, FirstAddress
Dim Adr
Last = Wb2F1.[B65000].End(xlUp).Row
For I = 4 To Last
   Set Cel = Wb2F1.Cells(I, 6)   'devrait renvoyer indirectement au nom
   M1 = Wb2F1.Cells(I, 3)
   M2 = Wb2F1.Cells(I, 4)
   Wb1F1.Activate
   Wb1F1.Range(Cel).Activate
   ActiveCell.Offset(, 42) = M2: ActiveCell.Offset(, 42).Interior.ColorIndex = 40
   ActiveCell.Offset(, 43) = M2: ActiveCell.Offset(, 43).Interior.ColorIndex = 40
Next
End Sub
 

zebanx

XLDnaute Accro
Bonjour Gosselien, Bonjour Lina 1997.

Un code (tout) épuré et qui fait le travail.
Du "très bel ouvrage" , bravo et merci Gosselien !

Bonne journée.
Thierry

Correction : juste une valeur en rouge pour Lina 1997 (et par ma faute sur le précédent envoi)
-----
Option Explicit
Sub NewInfo3()
Dim Wb1, Wb2 As Workbook
Dim Wb1F1, Wb2F1 As Worksheet
Set Wb1 = Workbooks("A.xls"): Set Wb2 = Workbooks("B.xls")
Set Wb1F1 = Wb1.Sheets("feuil1")
Set Wb2F1 = Wb2.Sheets("feuil1")
Dim I, Last As Integer
Dim C, M1, M2, Cel, FirstAddress
Dim Adr
Last = Wb2F1.[B65000].End(xlUp).Row
For I = 4 To Last
Set Cel = Wb2F1.Cells(I, 6) 'devrait renvoyer indirectement au nom
M1 = Wb2F1.Cells(I, 3)
M2 = Wb2F1.Cells(I, 4)
Wb1F1.Activate
Wb1F1.Range(Cel).Activate
ActiveCell.Offset(, 42) = M1: ActiveCell.Offset(, 42).Interior.ColorIndex = 40
ActiveCell.Offset(, 43) = M2: ActiveCell.Offset(, 43).Interior.ColorIndex = 40
Next
End Sub
 
Dernière édition:

ickkiss

XLDnaute Nouveau
Bonjour je suis nouvelle sur ce forum et ce poste date un peu je sais mais je cherche à faire sensiblement la même chose sauf que j'ai un fichier global où je fais un suivi avec des commentaires dans des colonnes supplémentaires. et je fais un export tous les 2 jours depuis le "web outil" que je mets sur le même fichier dans l'onglet "BDD" qui est la source de MAJ afin de récupérer les nouvelles lignes créées par les commerciaux au fur et à mesure. Du coup c'est une mise à jour des données vraiment globale.
ce que je souhaite c'est de ne rajouter sur les onglets "orateur" et "suivi RPS" que les nouvelles lignes créées entre 2 exports
 

Pièces jointes

  • BAS maj Datas excel hebdo.xlsx
    12 KB · Affichages: 6
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…