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
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 SubTu 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
Cordialement
Julia
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 Subre
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.
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.
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
[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.
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.
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: