Copie-coller ligne dans un autre classeur sous condition
Résolu/Fermé
A voir également:
- Copie-coller ligne dans un autre classeur sous condition
- Excel cellule couleur si condition texte - Guide
- Copie cachée - Guide
- Aller à la ligne excel - Guide
- Partager photos en ligne - Guide
- Copie écran samsung - Guide
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).
yg_be
Messages postés
23399
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2024
Ambassadeur
1 556
12 juin 2020 à 14:06
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?
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 :
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
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
yg_be
Messages postés
23399
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2024
1 556
13 juin 2020 à 09:44
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
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 :
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.
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.
yg_be
Messages postés
23399
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2024
1 556
14 juin 2020 à 22:21
14 juin 2020 à 22:21
quelle partie du travail te pose-t'elle problème?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
15 juin 2020 à 09:39
Modifié le 15 juin 2020 à 14:51
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
15 juin 2020 à 14:59
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.