VBA - utilisation de OFFSET pour remplacer une plage (plusieurs cellules)

Bonjour à tous,

Tout d'abord je tiens à remercier ceux qui prendrons le temps de lire ma requête, qu'ils puissent m'aider ou non.
Je suis débutant en VBA et j'ai besoin d'établir une macro qui puisse croiser les données entre 2 fichiers Excel :

FS = Mon fichier source, avec une colonne de référence "B" (un export que je reçois tous les mois avec les données à importer sur ma base de donnée)

FC = Mon fichier cible, avec une colonne de référence "A" (la base de donnée sur laquelle je travail et que je dois maintenir à jour)

J'utilise .Find pour parcourir l'ensemble des lignes et trouver une correspondance dans la colonne de référence de mon fichier source, puis j'importe les données qui m'intéresse vers mon fichier cible. Ma macro fonctionne parfaitement pour mon premier import sur une seule cellule :

c.Offset(, 5) = cc.Offset(, 6)

Seulement je n'arrive pas à comprendre l'erreur qui m'empêche d'importer une plage complète :

FC.Range(c.Offset(, 6), c.Offset(, 15)) = FS.Range(cc.Offset(, 18), cc.Offset(, 27))

Vous trouverez le code en entier ci-dessous:

Sub Docleg()

Dim CLS, CLC As Workbook
Dim FS, FC As Worksheet
Dim c, cc As Range

'On commence par définir les Classeurs/Feuilles

Source = Application.GetOpenFilename(FileFilter:="Fichiers Excel (*.xlsx*), *.xlsx*", Title:="Ouvrez l'export des documents légaux", MultiSelect:=False)
Set CLS = Workbooks.Open(Source)
Set CLC = ThisWorkbook
Set FS = CLS.Worksheets("CA Normandie-Seine")
Set FC = CLC.Worksheets("suivi fournisseurs P.I")

'Puis on définit les plages à remplacer

For Each c In Range(FC.Range("A3"), FC.Range("A" & Cells(Rows.Count, 1).End(xlUp).Row))
Set cc = FS.Range("B3:B" & Cells(Rows.Count, 1).End(xlUp).Row).Find(what:=Right(c, 3))
If Not cc Is Nothing Then
c.Offset(, 5) = cc.Offset(, 6)
FC.Range(c.Offset(, 6), c.Offset(, 15)) = FS.Range(cc.Offset(, 18), cc.Offset(, 27))
End If
    Next

End Sub

Merci encore pour votre temps,

Bonne journée,

Bonjour Brashen et

Peut-être en indiquant simplement ce que vous voulez importer

FC.Range(c.Offset(, 6), c.Offset(, 15)).Value = FS.Range(cc.Offset(, 18), cc.Offset(, 27)).Value

A+

En effet ça fonctionne beaucoup mieux.. 1H de perdu pour un .Value J'en aurai honte si cela ne m'amusait pas autant.
Merci !

Rechercher des sujets similaires à "vba utilisation offset remplacer plage"