Transfert de donnees entre 2 fichiers Excel

Bonjour à tous et bonne année 2019

Voici ce que je souhaite faire avec ces 2 fichiers Excel.

Le fichier A sert à renseigner des infos basiques

le fichier B, sert de destination.

A chaque transfert, les données du fichier A sont supprimées et transférées dans la feuilles ARCHIVES de ce même fichier

Je souhaite pouvoir en appuyant sur un bouton transférer les données du fichier A vers B

mais je n'arrive pas à transférer plusieurs lignes d'un seul coup dans le fichier B

Je souhaiterais pouvoir transférer les zones non vide du fichier A de cette feuille en partant de la cellule A2.

Je vous met en pièce jointe les deux fichiers. En espérant pouvoir trouver de l'aide...

Merci d'avance

Julia

Salut Julia,

Il manque tes fichiers A et B

Cordialement.

Bonjour Yvouille,

Faute de manip

Voici les 2 fichiers, est-il possible que VBA reconnaisse les champs non vides, à partir d'une cellule de départ ?

Mon problème, je n'arrive qu'a transférer une ligne à la fois dans le fichier B ...

J'ai cherché du coté de la fonction Array mais sans succès.

merci d'avance

Julia

15fichier-a.xlsm (19.77 Ko)
13fichier-b.xlsm (7.83 Ko)

Bonjour à vous deux,

Pourrais-tu essayer ce programme?

Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False

    'Déclaration de variables
    Dim Fichier As Workbook
    Dim DerLig As Long, LigExport As Long
    Dim FeuilleDep As Worksheet, FeuilleFin As Worksheet
    NomFichier = "C:\Users\m.julia\Desktop\FICHIER B"

    If MsgBox("Etes-vous certain de transférer les infos ?", vbYesNo, "Demande de confirmation") = vbYes Then
        Set FeuilleDep = Sheets("SAISIE")
        DerLig = FeuilleDep.Range("a" & FeuilleDep.Rows.Count).End(xlUp).Row

        'Vérification de la validité du fichier de départ
        If DerLig = 1 Then
            MsgBox "Erreur, il n'y a pas d'informations dans le fichier de départ.", vbExclamation
            Exit Sub
        End If

        'Ouverture du fichier
        Set Fichier = Workbooks.Open(NomFichier)
            'Vérification de l'ouverture du fichier
            If Fichier Is Nothing Then
                MsgBox "Le fichier de destination n'a pas pu être ouvert.", vbCritical
                Exit Sub
            End If

        Set FeuilleFin = Fichier.Worksheets("DESTINATION")
        'Appel de la ligne nommée "export:"
        GoTo export
        Set FeuilleFin = Nothing

        Application.DisplayAlerts = False
        Fichier.Save
        Fichier.Close
        Set Fichier = Nothing

        Set FeuilleFin = Sheets("ARCHIVES")
        GoTo export
        Set FeuilleFin = Nothing
        ActiveWorkbook.Save

    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Le contenu a été transmis aux Archives et vers le fichier B!"

Exit Sub
export:
    'Exportation des données dans la feuille de destination
    LigExport = FeuilleFin.Range("a" & FeuilleFin.Rows.Count).End(xlUp).Row + 1
    FeuilleFin.Range("a" & LigExport, "c" & LigExport + DerLig - 1) = FeuilleDep.Range("a2", "c" & DerLig)
Return
End Sub

Tu me diras si ça fonctionne correctement, je ne l'ai pas testé...

J'ai volontairement ajouté des tests pour voir si on continuait bien le code ou non, ce qui rallonge un peu la procédure, mais ça permet de ne pas avoir trop de soucis lors de la suite du programme, je me suis dis que ça pouvait servir de gérer les erreurs propremment...

bonjour

salut Ausecurs

ma suggestion : faire simple, ne pas archiver.

conserver un unique onglet servant à la saisie

si besoin créer une colonne "Archivé" dans laquelle on saisit X pour signifier que la ligne en question est terminée

au quotidien, on filtre sur cette colonne "différent de X" et on voit ce qui est en cours

du coup, pas de double onglet, pas de VBA, pas de formule, rien !

cet onglet va durer 20 ans

amitiés à tous et bonne année

Bonjour jmd

En effet, c'est plus simple ainsi!

Bonjour,

Merci pour les éléments de recherches, et bonne idée pour les archives.

Cependant le transfert des données entre le fichier A vers B est indispensable, car il y aura 2 utilisatrices, une pour le fichier A (saisie), et une fois valider, elle transfert au fichier B, les informations. Les fichiers seront présent sur un réseau commun.

@JMD , j'ai testé ton programme, il me retourne une erreur de type Return sans goSub, et quand j'essaye d'intégrer le goSub, il me dit qu'il manque un numéro de ligne

J'ai donc enlevé le Return, et la ben , le fichier B s'ouvre, mais aucune données n'est transférées, bizarre ... pourtant le code me semble correcte.

Cordialement

Julia

8fichier-a.xlsm (21.89 Ko)
7fichier-b.xlsm (7.86 Ko)

Bonjour,

Le programme n'est pas de jmd, mais pas grave

J'essaye une correction, pourras-tu me dire si ça fonctionne?

Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False

    'Déclaration de variables
    Dim Fichier As Workbook
    Dim DerLig As Long, LigExport As Long
    Dim FeuilleDep As Worksheet, FeuilleFin As Worksheet
    NomFichier = "C:\Users\m.julia\Desktop\FICHIER B"

    If MsgBox("Etes-vous certain de transférer les infos ?", vbYesNo, "Demande de confirmation") = vbYes Then
        Set FeuilleDep = Sheets("SAISIE")
        DerLig = FeuilleDep.Range("a" & FeuilleDep.Rows.Count).End(xlUp).Row

        'Vérification de la validité du fichier de départ
        If DerLig = 1 Then
            MsgBox "Erreur, il n'y a pas d'informations dans le fichier de départ.", vbExclamation
            Exit Sub
        End If

        'Vérification du chemin
        test = Dir(NomFichier & ".xlsm")
        If test = "" Then
            MsgBox "Le fichier de destination n'a pas pu être trouvé.", vbCritical
            Exit Sub
        End If

        'Ouverture du fichier
        Set Fichier = Workbooks.Open(NomFichier)
        Set FeuilleFin = Fichier.Worksheets("DESTINATION")
        'Appel de la ligne nommée "export:"
        GoSub export
        Set FeuilleFin = Nothing

        Application.DisplayAlerts = False
        Fichier.Save
        Fichier.Close
        Set Fichier = Nothing

        Set FeuilleFin = Sheets("ARCHIVES")
        GoSub export
        Set FeuilleFin = Nothing
        ActiveWorkbook.Save

    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Le contenu a été transmis aux Archives et vers le fichier B!"

Exit Sub
export:
    'Exportation des données dans la feuille de destination
    LigExport = FeuilleFin.Range("a" & FeuilleFin.Rows.Count).End(xlUp).Row + 1
    FeuilleFin.Range("a" & LigExport, "c" & LigExport + DerLig - 1) = FeuilleDep.Range("a2", "c" & DerLig)
Return
End Sub

re

je ne suis pas l'auteur du code VBA

ma solution d'un fichier en liste ou Tableau simple sans "archivage" reste valable

il faut juste fournir à la seconde personne une lecture

tu peux :

  • lui fournir régulièrement une copie du fichier d'origine
  • lui faire un fichier contenant de simples "=" dans chaque cellule de manière à afficher une image fidèle du fichier en saisie (j'appelle ça un fichier miroir)
  • Power Query, mais ça ne me semble pas nécessaire
  • un fichier avec un TCD pointant vers le fichier en saisie
  • autre

explore les solutions simples d'Excel.

tout dépend du travail que doit faire la seconde personne. A préciser ? ? ?

à te relire

Bonjour jmd, Ausecour,

J'ai essayé la méthode du fichier miroir, mais sur le réseau cela ne fonctionne pas. Les 2 fichiers sont présent dans le même dossier sur le réseau

Le fichier A est ouvert sur mon PC. Le fichier B est ouvert sur le PC d'une autre personne. Quand je rentre les informations du fichier A, et que j'enregistre rien de se passe sur le fichier B. Je ne comprend pas.

@Ausecour, j'ai intégré ton code, mais rien ne se passe, seulement le fichier B qui se ferme

Cordialement

Julia, et merci pour le travail que vous avez déjà fourni.

10fichier-a.xlsm (22.68 Ko)
10fichier-b.xlsm (7.86 Ko)

Bonjour

J'ai cette fois testé le programme, je l'ai corrigé, et maintenant il fonctionne chez moi, il faudra juste que tu mettes le bon chemin pour le fichier et ça devrait marcher chez toi aussi

17fichier-b.xlsm (7.80 Ko)

[quote=julia^^ post_id=723873 time=1547214336 user_id=20025]

J'ai essayé la méthode du fichier miroir, mais sur le réseau cela ne fonctionne pas. Les 2 fichiers sont présent dans le même dossier sur le réseau

Le fichier A est ouvert sur mon PC. Le fichier B est ouvert sur le PC d'une autre personne. Quand je rentre les informations du fichier A, et que j'enregistre rien de se passe sur le fichier B. Je ne comprend pas.

[/quote]

re

sur le fichier B il faut faire menu Données, Modifier les liaisons et cliquer "Mettre à jour les valeurs"

ce n'est hélas pas automatique

amitiés

[quote=jmd post_id=723929 time=1547219707 user_id=2979]

[quote=julia^^ post_id=723873 time=1547214336 user_id=20025]

J'ai essayé la méthode du fichier miroir, mais sur le réseau cela ne fonctionne pas. Les 2 fichiers sont présent dans le même dossier sur le réseau

Le fichier A est ouvert sur mon PC. Le fichier B est ouvert sur le PC d'une autre personne. Quand je rentre les informations du fichier A, et que j'enregistre rien de se passe sur le fichier B. Je ne comprend pas.

[/quote]

re

sur le fichier B il faut faire menu Données, Modifier les liaisons et cliquer "Mettre à jour les valeurs"

ce n'est hélas pas automatique

amitiés

[/quote]

On peut exécuter cette mise à jour en ajoutant une ligne de code VBA avec comme évènement l'ouverture du classeur, on place ça dans le fichier B et ça mettra à jour les données à l'ouverture du fichier, mais c'est une fioriture.

Bonjour, et tout d'abord je vous remercie pour votre aide

Je voudrais régler juste un dernier détail. Je souhaite que le fichier de destination reste ouvert pendant le transfert des informations, j'ai essayé de supprimer la fonction fichier.close, mais cela engendre un bug

Voici le bout de code concerné :

Set Fichier = Workbooks.Open(nomFichier)

Set FeuilleFin = Fichier.Worksheets("DESTINATION")

'Appel de la ligne nommée "export:"

GoSub export

Set FeuilleFin = Nothing

Application.DisplayAlerts = False

Fichier.Save

Je vous remercie par avance .

Julia

Bonjour,

dommage que tu doives tomber sur un os pour nous remercier

Enfin tant pis!

J'ai regardé ton soucis, c'est normal que ça plante, comme j'avais prévu que le fichier B se ferme, le Fichier A redevenait le classeur actif, je pouvais donc appeler sa feuille Archive sans avoir à préciser de nom de classeur, ça allait appeler la feuille du classeur actif, le soucis c'est que si on laisse le fichier B ouvert, il faut changer de feuille, du coup j'ai rajouté ça et maintenant ça remarche!

Voici le fichier A en retour:

Rechercher des sujets similaires à "transfert donnees entre fichiers"