I need a
Hi every one ,
mon problème est le suivant .
Jai deux fichier excel le premier c est ZFA.xlsx qui est par exemple dans un fichier dans le disque C
je veux copies des élément qui sont dedans et les envoyé vers un autre fichier ZFI.xlsm qui est dans un autre endroit on vas dire le bureau
remarque : le fichier ZFI.xlsm on peut le renommé si on veut " si non si je le donne à un autre il le renomme ça marche pas "
je vous présente les fichier suivant :
Bonjour Marc, bonjour le forum,
Il faudrait que tu comprennes que ce que tu demandes n'est pas possible sinon comme je te l'ai proposé ici : https://forum.excel-pratique.com/viewtopic.php?f=2&t=133348
Le VBA demande, comme tout les langages informatiques, demande de la précision et de la rigueur. Pour pouvoir récupérer des données d'un fichier1 vers un fichier2 il faut que le code précise :
- le chemin d'accès du Fichier 1
- le chemin d'accès du Fichier 2
- le nom du fichier 1
- le nom du fichier 2
- l'onglet du fichier 1
- l'onglet du fichier 2
- la plage des données dans l'onglet du fichier 1
- la plage des des données dans l'onglet du fichier 2 (ou la cellule de destination)
Si tu codes tout ça et que par la suite tu changes l'emplacement, ou le nom du fichier, ou le nom d'un onglet, dans l'un des deux fichiers, le code va planter automatiquement !... Donc arrête de poster pour la même question.
Si tu veux que ça marche à tous les coups, une solution serait celle que je t'ai proposée sur l'autre post...
Les deux fichiers sont dans un même dossier qui ne contient qu'eux deux. Le code se trouve dans le fichier source (ZFA.xlms). Tu pourras renommer comme tu veux le fichier destination ZFI.xlsx (ou autre si renommé) et donner les deux fichiers à une autre personne qui les mettra ailleurs (mais toujours eux deux seuls dans un dossier). Ça marchera.
Le code :
Sub Mise_à_jour2()
Dim C1 As Workbook
Dim O1 As Worksheet
Dim CA As String
Dim F As String
Dim C2 As Workbook
Dim O2 As Worksheet
Dim PlgFE1 As Range
Dim PlgFE2 As Range
Dim Cel1 As Range
Dim Cel2 As Range
Set C1 = ThisWorkbook
Set O1 = C1.Worksheets("Documents")
CA = C1.Path & "\"
F = Dir(CA & "*.xls")
Do While F <> ""
If Not F = C1.Name Then
On Error Resume Next
Set C2 = Workbooks(CA & F)
If Err.Number <> 0 Then Set C2 = Workbooks.Open(CA & F)
On Error GoTo 0
Set O2 = C2.Worksheets("Feuil1"):
Set PlgFE2 = O2.Range(O2.Cells(3, 2), O2.Cells(Application.Rows.Count, 2).End(xlUp))
Set PlgFE1 = O1.Range(O1.Cells(4, 4), O1.Cells(Application.Rows.Count, 4).End(xlUp))
For Each Cel2 In PlgFE2 'pour chaque cellule 1 dans fichier ZFA.Worksheets("Feuil1")
For Each Cel1 In PlgFE1 'pour chaque cellule 2 dans fichier ("ZFI.xlsm").Worksheets("Documents")
If Cel2.Value = Cel1.Value Then Cel1.Offset(, 1).Value = Cel2.Offset(, 2).Value
Next Cel1
Next Cel2
C2.Close
End If
F = Dir
Loop
Application.ScreenUpdating = True
End Sub
en faite le premier fichier ZFA.xlsx est dans une base de donné partagé c est a dire c est moi qui le met dedans en choisissant le chemin .après pour le fichier ZFI.xlsm je leurs donne ça et il mette ou il veulent c est pas un soucis
le seule problème par exemple il veut renommé ZFI.xlsm pour se souvenir parce que la fonctionnalité de se fichier elle sarrette pas la. j ai mis beaucoup d'application c est juste une partie du code que je vous présente ici dans ce programme c est mon seule soucis.j ai chercher ailleurs pour trouver une réponse mais j ai rien trouver voila le code que j ai fait a la base .
sub Mise_à_jour()
Application.ScreenUpdating = False
Dim ZFA As Workbook
Dim PlgFE1 As Range
Dim PlgFE2 As Range
Dim Cel1 As Range
Dim Cel2 As Range
Workbooks.Open Filename:=ThisWorkbook.Path & "\ZFA.xls"
Set ZFA = Workbooks("ZFA.xls")
With ZFA.Worksheets("Feuil1"):
Set PlgFE1 = .Range(.Cells(3, 2), .Cells(.Rows.Count, 2).End(xlUp)):
End With
With Workbooks("ZFI.xlsm").Worksheets("Documents"):
Set PlgFE2 = .Range(.Cells(4, 4), .Cells(.Rows.Count, 4).End(xlUp)):
End With
For Each Cel1 In PlgFE1
For Each Cel2 In PlgFE2
If Cel1.Value = Cel2.Value Then Cel2.Offset(, 1).Value = Cel1.Offset(, 2).Value
Next Cel2
Next Cel1
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub
S'il n'y a strictement aucun élément fixe dans cette histoire : nom, emplacement des fichiers, il est éventuellement possible de s'en sortir avec une macro dans chaque fichier, qui génère un fichier txt à chaque enregistrement du fichier (dans une macro évenement "BeforeSave" et/ou "BeforeClose"). Ces fichiers txt, stockés dans un emplacement connu, servent de repère.
Un fichier texte "ZFI.txt" avec le dernier chemin complet + nom du fichier ZFI
Idem pour le second fichier.
Au passage, salut ThauThème !