Comparer 2 cellules dans 2 classeurs différents

Bonjour à tous,

Mes compétences sont assez limités pour la macro que je veux faire, j'ai besoin de votre aide.

J'ai 2 classeurs A et B. J'ai une plage de cellule en colonne dans le Classeur A, il faut que je verifie si la première cellule dans A est présente dans la plage de cellules du classeur B.

Si la cellule existe dans le classeur B, je doit copier des informations du classeur B vers le classeur A.

Voila a quoi j'ai pensé :

Pour i = 1 à 100

Pour j = 1 à 100

Si cellule Ai du classeur A= Cellule Aj du classeur B

alors copier Cellules Bj à Dj du classeur B dans la cellule Bi du classeur A & next i

sinon next j

Dites moi si je suis sur la bonne voix, si oui je veux le code correspondant a cet algorithme.

Existe il une fonction VB qui permet de faire ces comparaison ?

Merci

Guillaume

bonsoir,

voici une macro à mettre dans un classeur autre que A et B

Sub copieB2A()

On Error GoTo notopen
fichier = "booka.xlsx":  ' à adapter
'wsa=référence vers la feuille du classeur A
Set wsa = Workbooks(fichier).Sheets("sheet1"): ' "sheet1" à adapter

On Error GoTo notopen
fichier = "bookb.xlsx":  ' à adapter
'wsb= reférence vers la feuille du classeur B
Set wsb = Workbooks(fichier).Sheets("sheet1"):  ' "sheet1" à adapter

On Error GoTo 0
' i est un pointeur de ligne
i = 1
'on boucle sur les lignes du classseur A
While wsa.Cells(i, 1) <> ""
'on recherche dans le classeur B, le nom trouvé en colonne A dans le classeur A
Set rp = wsb.Range("a:a").Find(wsa.Cells(i, 1))

If Not (rp Is Nothing) Then
 'on a trouvé le nom dans le classeur B on copie les colonnes D à B dans le classeur A
 wsb.Range("b" & rp.Row & ":d" & rp.Row).Copy wsa.Range("b" & i)
End If
'on passe à la ligne suivante
i = i + 1
Wend
Set wsa = Nothing
Set wsb = Nothing
Exit Sub

notopen:
'on ouvre le fichier si on a une erreur (erreur 9 attendue)
Workbooks.Open (fichier)
Resume

End Sub

Merci pour ta réponse,

Je vais essayer.

Le programme ne trouve pas mes deux fichiers : "CLIENT.xlsm" et "FOURNISSEUR.xlsm" erreur d’exécution 1004

Est ce possible d’exécuter une macro à partir du fichier A (pour ne pas avoir un troisième classeur) ?

Merci

J'ai trouvé la solution voici le code :

Sub MacroClient()
'Cette Macro récupere les données du fichier FOURNISSEUR et les colle dans le fichier client.

Dim i As Integer
Dim j As Integer

Dim Nbrow As Long
Nbrow = Range("A" & Rows.Count).End(xlUp).Row
'défini le numero de la derniere ligne du fichier client

Dim Nbrowf As Long
Windows("FOURNISSEUR.xlsm").Activate
Nbrowf = Range("A" & Rows.Count).End(xlUp).Row
'défini le numero de la derniere ligne du fichier fournisseur

Windows("CLIENT.xlsm").Activate

For i = 4 To Nbrow
For j = 4 To Nbrowf

If Range("A" & i).Value = Workbooks("FOURNISSEUR.xlsm").Sheets("Fournisseur").Range("A" & j).Value Then
Windows("FOURNISSEUR.xlsm").Activate
Sheets("Fournisseur").Range(Cells(j, 5), Cells(j, 6)).Select
Selection.Copy
Workbooks("CLIENT.xlsm").Activate
Sheets("Feuil1").Range("G" & i).Select
ActiveSheet.Paste
End If

Next j
Next i

End Sub

J'aurais besoin maintenant que la macro fonctionne lorsque le fichier "CLIENT" est fermé.

Cela est il possible ?

Merci de votre aide

befsa a écrit :

Le programme ne trouve pas mes deux fichiers : "CLIENT.xlsm" et "FOURNISSEUR.xlsm" erreur d’exécution 1004

Est ce possible d’exécuter une macro à partir du fichier A (pour ne pas avoir un troisième classeur) ?

Merci

1) mettre le chemin complet ou mettre les fichiers dans le répertoire par defaut d'excel

2) oui il est possible, de mettre la macro dans le fichier A.

3) pour ce qui est de travailler avec le fichier fermé, je te propose de le fermer à la fin de la procédure, voir les lignes surlignées.

Sub copieB2A()

On Error GoTo notopen
fichier = "booka.xlsx":  ' à adapter
'wsa=référence vers la feuille du classeur A
Set wsa = Workbooks(fichier).Sheets("sheet1"): ' "sheet1" à adapter

On Error GoTo notopen
fichier = "bookb.xlsx":  ' à adapter
'wsb= reférence vers la feuille du classeur B
Set wsb = Workbooks(fichier).Sheets("sheet1"):  ' "sheet1" à adapter

On Error GoTo 0
' i est un pointeur de ligne
i = 1
'on boucle sur les lignes du classseur A
While wsa.Cells(i, 1) <> ""
'on recherche dans le classeur B, le nom trouvé en colonne A dans le classeur A
Set rp = wsb.Range("a:a").Find(wsa.Cells(i, 1))

If Not (rp Is Nothing) Then
 'on a trouvé le nom dans le classeur B on copie les colonnes D à B dans le classeur A
wsb.Range("b" & rp.Row & ":d" & rp.Row).Copy wsa.Range("b" & i)
End If
'on passe à la ligne suivante
i = i + 1
Wend
wsa.save
wsa.close
Set wsa = Nothing
Set wsb = Nothing
Exit Sub

notopen:
'on ouvre le fichier si on a une erreur (erreur 9 attendue)
Workbooks.Open (fichier)
Resume

End Sub

C'est super, mon code marche. merci !

J'aimerai l'améliorer.

J'ai donc 2 fichiers excel sur dans un dossier réseau. Deux types d'utilisateur ont accès a ce dossier. Les utilisateur qui renseigne le fichier A et les utilisateur qui renseigne le fichier B.

J'ai besoin de verrouiller l’accès a chaque fichier avec un mot de passe (jusque là pas de souci). Par contre lorsque j’exécute ma macro, elle ouvre l'autre fichier. Je dois donc rentrer le mot de passe pour exécuter la macro.

Je vois 2 solution :

La première est d'avoir 2 mots de passe ( 1 pour l'utilisateur normal et 1 pour exécuter la macro )

La deuxième est d'exécuter la macro sans mot de passe

La première solution me parait être la plus facile a mettre en œuvre.

Rechercher des sujets similaires à "comparer classeurs differents"