Importer les données d'un fichier à un autre fichier

Bonjour ,

Je débute sur vba et je souhaiterai transférer des données de plusieurs fichiers dans un seul fichier.J'ai essayer ce code pour 3 fichiers

Sub transfert()
Dim wk1 As Workbook, wk2 As Workbook, wk3 As Workbook
Dim sh1, sh2, sh3
Dim i As Integer

'adapter le chemin
Workbooks.Open Filename:=ThisWorkbook.Path & "\test1.xlsm"

Set wk1 = Workbooks("test2.xlsm")
Set wk2 = Workbooks("test1.xlsm")
Set wk3 = Workbooks("TEST3.xlsm")
Set sh1 = wk1.Sheets("Source")
Set sh2 = wk2.Sheets("Finale")
Set sh3 = wk3.Sheets("Source2")

If sh2.Cells(3, i) <> "" Then

'transfert '
For i = 12 To 27
sh2.Range("F12:F27").Value = sh1.Range("F12:F27").Value

For i = 48 To 49

sh2.Range("F48:F49").Value = sh1.Range("F48:F49").Value
For i = 87 To 97
'transfert '
sh2.Range("F87:F97").Value = sh3.Range("F87:F97").Value
sh2.Range("E87:F97").Value = sh3.Range("E87:F97").Value

End If

wk2.Save

End Sub

La première boucle me transfère bien les données mais le reste plus rien .J'ai essayer de modifier pour voir où se trouve l'erreur mais je ne vois pas .Vous auriez une idée ?

Bonjour,

Ici la boucle ne sert à rien. La condition de vérification est au dessus de ta boucle.
Quel est l'objectif exact et les manipulations à réaliser ? Vérifier que chaque ligne est remplie avant de la fusionnée ? Pourquoi ne pas copier et coller directement les valeurs ? Si vous avez des lignes vides peut être filtrer puis ne prendre que les cellules visibles à l'aide de Range("Votre plage").SpecialCells(xlCellTypeVisible).Copy ?

Cdlt,

Edit : N'hésitez pas à nous joindre vos fichiers si vous en avez la possibilité.

Oui effectivement c'est plus simple de passer par excel mais je dois trouver un moyen de le faire par vba .

En gros ,je vais recevoir plusieurs fichiers de même format dont je ne connais pas le contenu avec des cellules partiellement remplies (qui seront mes imputs) je veux avoir en sortie un fichier complet qui à toutes les cellules remplies grâce aux fichiers partiellement remplies .

6fichier1.xlsx (8.69 Ko)
7fichier2.xlsx (8.62 Ko)

Bonjour,

Je te mets une piste par VBA sans passer par une boucle qui fonctionne très bien avec les fichiers que tu m'as joint :

Sub transfert()
Dim WB()
Dim WS_I As Worksheet
Dim i%
Application.ScreenUpdating = False
Application.DisplayAlerts = False
WB = Array("fichier1", "fichier2")
Set WS_I = ThisWorkbook.Worksheets("Feuil1")
For i = 0 To UBound(WB)
    Workbooks.Open Filename:=ThisWorkbook.Path & "\" & WB(i) & ".xlsx"
    ActiveWorkbook.ActiveSheet.Cells.Copy
    WS_I.Cells.PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True 'skipblanc permet de ne pas écraser les cellules avec valeur par des cellules sans valeur
    ActiveWorkbook.Close
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

A noter qu'il sera surement nécessaire de restreindre la range cells des lignes 11 et 12 pour ne pas trop ralentir l’exécution. J'espère que tu arriveras à adapter ce code à ton fichier. Le soucis c'est que là les données sont présentées en colonnes, dans ton code en lignes. Ce ne sont pas les mêmes plages, vas-tu avoir des plages recouvrantes entre tes différents fichiers où des collages vont écraser d'autres valeurs ?

Ce code est à titre d'exemple afin de te montrer qu'il n'est pas forcément nécessaire de passer par des boucles pour atteindre ton objectif (même si c'est souvent très pratique !).

Cdlt,

Merci ,

J'aurais des plages à remplir et je dois éviter les collages .

J'aurais une question concernant le code pour me mettre sur la piste .Est ce que je n'aurais pas un souci en cas de données manquantes ?

Je vais essayer d'adapter ce code à mon sujet et de tester .

Bonjour,

Si la donnée est manquante dans le fichier d'export, alors la cellule sera vide dans le fichier d'import. Par contre si elle est présente dans le fichier d'export et que vous avez déjà une valeur dans le fichier d'import, alors cette dernière sera écrasée par la valeur d'export.

C'est un peu comme si vous aviez différents calques superposés mais dont aucun modèle ne recoupe l'autre tel des cercles concentriques de plus en plus petit. Aucun trait ne peut écraser l'autre malgré le fait que les calques soient les uns sur les autres

Je reste à disposition si besoin.

Cdlt,

Bonjour,

J'ai tester le code mais j'ai un message d'erreur .''La taille des cellules fusionner doit être la même ".Pourtant sur les 2 fichiers j'ai le même format .

Cdt ,

Bonjour,

Il n'y avait pas de cellules fusionnées sur les classeurs transmis ? Je ne comprends pas ce message, il n'est jamais apparu.

Cdlt,

le code s'il est bien adapté fonctionne .Le souci se trouvait au niveau du collage spécial dans mon cas il fallait copier non seulement les valeurs mais aussi le format .

C'est super ,merci .

cdt ,

Bonjour,

Oui dans le cas de cellules fusionnées il faut d'abord coller les valeurs puis ensuite le format ou sinon PasteSpecial Paste:=xlAll puis ensuite recopier la UsedRange sur ton classeur final et recoller en valeur. Toujours en conservant la propriété SkipBlanks quoi qu'il arrive.

Heureux pour toi que ça fonctionne.

N'hésites pas à passer ton sujet en résolu.

Cdlt,

Rechercher des sujets similaires à "importer donnees fichier"