Ajouter des informations prises dans un autre fichier

Bonjour,

J'ai 2 fichiers A et B avec un identifiant commun N°ID. je voudrais que pour chaque N°ID de A, il aille voir si N°ID existe dans B.

  • Si NON : passer au N°ID suivant et recomancer la boucle, jusqu'a la fin du fichier

Je vous joints un fichier A et un B

14fichiera.xlsm (33.09 Ko)
19fichierb.xlsx (13.70 Ko)

Merci de me donner le plus d'infos / commentaires possibles, afin que je puisse adapter facilement la macro à d'autres fichiers.

Merci d'avance.

Bonjour,

Les formules suivantes pourront faire ça, si tu veux :

Fichier A cellule D3

=SIERREUR(RECHERCHEV($A3;[FichierB.xlsx]Feuil1!$A:$E;2;0);"")

ou (version 2007)

=SI(ESTNA(RECHERCHEV($A3;[FichierB.xlsx]Feuil1!$A:$E;2;0));"";RECHERCHEV($A3;[FichierB.xlsx]Feuil1!$A:$E;2;0))

Fichier A cellule E3

=SIERREUR(RECHERCHEV($A3;[FichierB.xlsx]Feuil1!$A:$E;3;0);"")

ou version 2007

=SI(ESTNA(RECHERCHEV($A3;[FichierB.xlsx]Feuil1!$A:$E;2;0));"";RECHERCHEV($A3;[FichierB.xlsx]Feuil1!$A:$E;3;0))

et de les copies vers le bas

Bonjour

Essaie avec ce code à placer dans le fichier A dans module en VBA

Sub test()
'MAcro Dan McRdg le 27/06/2012
Dim FichierB As Workbook
Dim plage As Range, ID As Range
Dim lg As Integer
Set FichierB = Workbooks("FichierB.xlsx")
With ThisWorkbook.Sheets("Feuil1")

Set plage = .Range("A3:A" & .Range("A" & Rows.Count).End(xlUp).Row)

For Each ID In plage
    On Error Resume Next
    lg = WorksheetFunction.Match(ID, FichierB.Sheets("Feuil1").Range("A3:A" & FichierB.Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row), 0)
    If lg > 0 Then
        FichierB.Sheets("Feuil1").Range("B" & lg + 2).Copy .Range("D" & ID.Row)
        FichierB.Sheets("Feuil1").Range("C" & lg + 2).Copy .Range("E" & ID.Row)
        FichierB.Sheets("Feuil1").Range("D" & lg + 2).Copy .Range("F" & ID.Row)
    End If
    lg = 0
Next
End With
End Sub

Le fichier B doit être ouvert bien entendu

Si ok, merci de cloturer ton fil en cliquant sur le V vert à coté du bouton EDITER

Amicalement

D'abord un grand merci à Raja et à Dan pour leur réponse ; elles vont me servir beaucoup à l'avenir

Je ne voudrais pas abuser, mais j'ai pas tout compris dans la macro :

Déjà quand tu défini

Dan a écrit :

Dim lg As Integer

(lg abréviation de quoi ?) pourquoi integer puisqu'il s'agit de chiffres et de lettres Z013685 ?

Ensuite dans la routine, je ne comprends pas la sélection

Dan a écrit :

.Range("B" & lg + 2)

, ni comment "il" sait que c'est dans le fichierA qu'il faut coller l'information.

Si tu peux m'expliquer...

si non tant pis, c'est déjà super.

vous avez fait une heureuse !

Re,

Dim lg As Integer (lg abréviation de quoi ?) pourquoi integer puisqu'il s'agit de chiffres et de lettres Z013685 ?

Non "lg" est une variable qui contient le numéro de ligne dans la colonne A du fichier B. Cette ligne est trouvée dans la fonction Worksheetfunction. Il s'agit donc de chiffre.

Integer permet d'aller jusque lg = 32867

Ensuite dans la routine, je ne comprends pas la sélection .Range("B" & lg + 2)

Dans la ligne worksheetfunction, on se sert de la plage A3 à Ax. Si le numéro ID est trouvé en A3 (soit la première ligne de la plage), "lg" vaudra 1. Si l'on ne met pas "lg+2", les données seront pêchées donc sur la ligne 1 du fichier B au lieu de la ligne 3.

ni comment "il" sait que c'est dans le fichierA qu'il faut coller l'information

La ligne --> With ThisWorkbook.Sheets("Feuil1") identifie le fichier A et feuille 1 (Si tout le code est bien placé dans le fichier A, bien sûr !)

L'instruction Range("D" & ID.Row) dispose d'un point juste avant qui identifie qu'il s'agit du fichier A.

Pour comprendre :

With ThisWorkbook.Sheets("Feuil1")
FichierB.Sheets("Feuil1").Range("B" & lg + 2).Copy .Range("D" & ID.Row)
end with

donne le même résultat que ceci :

FichierB.Sheets("Feuil1").Range("B" & lg + 2).Copy ThisWorkbook.Sheets("Feuil1").Range("D" & ID

On aurait donc pu écrire le code de cette manière mais c'est plus compliqué. Donc comme pour les maths on met en évidence ce qui est commun.

Amicalement

Bonjour,

Super clair Dan, merci beaucoup.

Rechercher des sujets similaires à "ajouter informations prises fichier"