Copie-coller ligne dans un autre classeur sous condition [Résolu]

Signaler
-
 mathvos -
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).
Messages postés
11454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 juillet 2020
655
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
>
Messages postés
11454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 juillet 2020

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
Messages postés
11454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 juillet 2020
655 > mathvos
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.
Messages postés
11454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 juillet 2020
655
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?
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
Messages postés
11454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 juillet 2020
655
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
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.
Messages postés
11454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 juillet 2020
655
quelle partie du travail te pose-t'elle problème?
parfait, merci beaucoup pour l'aide.

Je vais adapter ça :)