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 SubMerci 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 SubJ'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 SubC'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.