Copie-coller ligne dans un autre classeur sous condition

Résolu/Fermé
mathvos - 12 juin 2020 à 10:09
 mathvos - 15 juin 2020 à 16:19
Bonjour,

j'ai un petit soucis avec un deux fichiers.

En gros j'ai un fichier principal appelé DAF.xlsm dans ce fichier j'ai une feuille principale sur laquelle en colonne D on peut choisir les initiales d'un employé. une fois que les initiales sont sélectionnées, la ligne se coupe et colle automatiquement via une macro dans une feuille qui reprend les initiales.

Chaque employé possède son propre classeur avec différentes feuilles dont la feuille DAF. A l'heure actuelle, les employés doivent aller chercher manuellement les lignes dans le classeur DAF pour les coller dans leur classeur personnel à la feuille DAF.

J'aimerai donc bien trouver une macro qui copie/colle la ligne dans leurs classeurs à la première ligne vide de la feuille daf.

Au besoin je peux ajouter les classeurs mais avec un code j'espère pouvoir me débrouiller pour le mettre en place.

Par facilité, le classeur de destination peut être fermé (pas ouvert par un autre utilisateur), mais par contre il n'est pas dans le même dossier que le classeur source


merci d'avance pour la lecture et bonne journée



Configuration: Windows / Firefox 69.0

5 réponses

l'ouverture et la fermeture du fichier de destination et la copie (sachant qu'il n'est pas dans le même dossier).
1
yg_be Messages postés 23232 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 septembre 2024 1 538
15 juin 2020 à 09:39
un exemple avec ouverture, copie, et fermeture.
Dim cdest As Workbook
Set cdest = Workbooks.Open("chemin d'acces au classeur à ouvrir")
cdest.Sheets("nom de la feuille").[D123] = ThisWorkbook.Sheets("nom de l'autre feuille").[Z456]
cdest.Close
0
mathvos > yg_be Messages postés 23232 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 septembre 2024
Modifié le 15 juin 2020 à 14:51
Merci pour l'aide,

Juste une question, à quoi correspondent les [D123] et [Z456] ?

En testant, le classeur s'ouvre bien, il se ferme mais entre les deux il ne colle pas dans la feuille ad-hoc :s
0
yg_be Messages postés 23232 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 septembre 2024 1 538 > mathvos
15 juin 2020 à 14:59
cela correspond à la cellule D123 et Z456.
je t'ai simplement donné un exemple de comment travailler avec plusieurs classeurs et copier de l'un à l'autre. je te laisse l'adapter à ton cas. pour copier, tu peux, par exemple faire comme en ligne 17 de ton code.
le principe général, c'est que tu précises partout dans ton code sur quel classeur doit se faire le travail.
0
yg_be Messages postés 23232 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 septembre 2024 Ambassadeur 1 538
12 juin 2020 à 14:06
bonjour,
en général, une macro se réalise, elle ne se trouve pas.
tu serais plus clair si tu utilisais un vocabulaire consistent: "fichier principal", "classeur de destination", "classeur source", ...
dans quel classeur devrait se trouver la macro?
qu'as-tu essayé, sur quoi bloques-tu?
0
Bonjour,

Merci pour la réponse.

Alors le classeur source est le classeur DAF.xlsm
Le classeur de destination est le classeur SH.xlsm
la macro devrait se trouver dans le classeur source (DAF.xlsm)

Pour le moment j'ai une macro évenementielle qui est écrite comme ceci :

Sub Worksheet_Change(ByVal Target As Range)
Dim LgnS As Range, TblC As Range, lnS%, lnC%, k%
If Target.Value = "SH" Then
lnS = Target.Row - 1
Set LgnS = Me.ListObjects(1).DataBodyRange.Rows(lnS)
k = LgnS.Columns.Count
With Worksheets("SH").ListObjects(1)
If .Range.Cells(2, 1) <> "" Then
Set TblC = .DataBodyRange: lnC = TblC.Rows.Count + 1
Else
Set TblC = .Range.Rows(2): lnC = 1
End If
End With
TblC.Cells(lnC, 1).Resize(, k).Value = LgnS.Value
LgnS.EntireRow.Delete
EndIf
EndSub


Donc ce que je voudrais c'est qu'en plus de cette macro, lorsque les initiales SH sont choisies, la ligne se copie-colle dans le classeur SH (située dans un autre dossier) dans la feuille DAF à la première ligne libre.

Je cale sur l'ensemble, j'ai essayé de bricoler plusieurs choses mais sans grand succès à l'heure actuelle :s
0
yg_be Messages postés 23232 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 septembre 2024 1 538
13 juin 2020 à 09:44
merci d'utiliser les balises de code quand tu postes du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

je pense qu'il faut ajouter du code pour:
- ouvrir le classeur de destination (supposé fermé)
- trouver la première ligne libre dans la feuille DAF
- enregistrer les données dans cette ligne
0
Désolé pour l'affichage du code, le revoici en version correcte :

Sub Worksheet_Change(ByVal Target As Range)
Dim LgnS As Range, TblC As Range, lnS%, lnC%, k%

If Target.Value = "SH" Then
lnS = Target.Row - 1
Set LgnS = Me.ListObjects(1).DataBodyRange.Rows(lnS)
k = LgnS.Columns.Count

With Worksheets("SH").ListObjects(1)
If .Range.Cells(2, 1) <> "" Then
Set TblC = .DataBodyRange: lnC = TblC.Rows.Count + 1
Else
Set TblC = .Range.Rows(2): lnC = 1
End If
End With

TblC.Cells(lnC, 1).Resize(, k).Value = LgnS.Value
LgnS.EntireRow.Delete

EndIf
EndSub



Et en effet, il faudrait effectivement ajouter du code pour les trois points que vous avez soulevés dans votre dernier message.

Le classeur de destination sera en effet fermé et il faudrait idéalement le refermer après la copie de la ligne.
0
yg_be Messages postés 23232 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 septembre 2024 1 538
14 juin 2020 à 22:21
quelle partie du travail te pose-t'elle problème?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
parfait, merci beaucoup pour l'aide.

Je vais adapter ça :)
0