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 :

3zfi.xlsm (19.93 Ko)
0zfa.xlsx (8.08 Ko)

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 !

Rechercher des sujets similaires à "need"