Copie de colonne d'un classeur à un autre avec décalage de ligne
Fermé
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
-
21 juin 2017 à 18:06
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 - 2 juil. 2017 à 21:45
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 - 2 juil. 2017 à 21:45
A voir également:
- Copie de colonne d'un classeur à un autre avec décalage de ligne
- Partage de photos en ligne - Guide
- Déplacer une colonne excel - Guide
- Site de vente en ligne particulier - Guide
- Aller à la ligne excel - Guide
- Copie cachée - Guide
5 réponses
Kalissi
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
20
21 juin 2017 à 20:05
21 juin 2017 à 20:05
Bonjour,
Quelques informations :
K
Quelques informations :
Private Sub cbImporter_Click() Const decal = 6 Dim WkbSrce As Workbook, WkbDest As Workbook Dim FeuilSrce As Worksheet Dim chemfic As String, onglet As String Dim celNom As Range, celLot As Range, celTantG As Range Dim nblot As Integer, lgfin As Long Dim col As char Application.DisplayAlerts = False Application.ScreenUpdating = False nblot = CInt(tbx_nblot.Text) onglet = CStr(tbx_onglet.Text) ' Ici pour affecter une plage à un objet, il faut utiliser l'instruction Set Set celLot = Range(CStr(tbx_celLot.Text)) Set celNom = Range(CStr(tbx_celNom.Text)) Set celTantG = Range(CStr(tbx_celTantG.Text)) lgfin = decale + nblot 'Workbooks.Open Filename:=chemfic ' Ici il y a ouverture d'un classeur Set WkbSrce = Workbooks.Open(chemfic) ' Ici il y a attachement d'un objet sur une feuille Set FeuilSrce = WkbSrce.Sheets(onglet) ' Problème : Ici le classeur actif est WkbScre, voir 2 instructions avant ' Alors pourquoi attacher l'objet WkbDest qui semble être le fichier de destination Set WbkDest = ActiveWorkbook Sheets("Presence").Select WbkSrce.Activate FeuilSrce.Select '----- (les 2 classeurs sont ouverts) ----- 'copie Lots With FeuilSrce col = Column(celLot) .Range(celLot & ":" & col & lgfin).Copy End With With WbkDest ' -Ici le feuille "Presence" a été sélectionné préalablement ' donc la copie sera effectué sur cette feuille .Range("C6").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True Application.CutCopyMode = False End With '-----------code d origine--------- ' -Une nouvelle copie, et on ne copie qu'une seule ' ligne (137) de colonne B à colonne BB ??? ' -Aucune feuille n'est spécifié, donc dans les deux classeur ' c'est la feuille active qui est ciblé With WbkSrce .Range("B137:BB137").Copy End With With WbkDest .Range("A65536").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True Application.CutCopyMode = False End With End Sub
K
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
22 juin 2017 à 14:56
22 juin 2017 à 14:56
Désolé, mais les modifications qu'a fait Kalissi n'ont rien données de bon.
Les ranges ne conviennent pas. Alors j'ai tout refait mais il y a un blocage au niveau de l'ouverture des classeurs pour copier.
Pour la ligne en gras on voit bien que les colonnes sont sélectionnées dans les 2 classeur mais rien n'est collé et le carré de sélection de copie est toujours actif.
Quelqu'un serait-il m'aider svp?
Les ranges ne conviennent pas. Alors j'ai tout refait mais il y a un blocage au niveau de l'ouverture des classeurs pour copier.
Private Sub cbImporter_Click()
Const decal As Integer = 6
Dim WkbSrce As Workbook
Dim WkbDest As Workbook
Dim FeuilSrce As Worksheet
Dim chemfic As String
Dim onglet As String
Dim celNom As String
Dim celLot As String
Dim celTantG As String
Dim nblot As Integer
Dim lgfin As Long
Dim col As String
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set WkbDest = ActiveWorkbook
'Sheets("Presence").Activate
MsgBox (ActiveWorkbook.Name)
nblot = CInt(tbx_nblot.Text)
onglet = CStr(tbx_onglet.Text)
chemfic = CStr(tbx_chemfic.Text)
col = Left(tbx_celLot.Text, 1)
celLot = tbx_celLot.Text
celNom = tbx_celNom.Text
celTantG = tbx_celTantG.Text
lgfin = decal + nblot
Set WkbSrce = Workbooks.Open(chemfic)
'----- copie Lots -----
WkbSrce.Sheets(onglet).Range(celLot & ":" & col & lgfin).Copy
'---------jusque là ça marche !
WkbDest.Activate
WkbDest.Sheets("Presence").Range("C6").PasteSpecial (xlPasteValues)
Pour la ligne en gras on voit bien que les colonnes sont sélectionnées dans les 2 classeur mais rien n'est collé et le carré de sélection de copie est toujours actif.
Quelqu'un serait-il m'aider svp?
Kalissi
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
20
Modifié le 22 juin 2017 à 21:06
Modifié le 22 juin 2017 à 21:06
Bonjour,
Idéalement, positionne toi avant de coller ...
Le range de positionnement peut être dynamique.
Y a-t-il une raison particulière d'utiliser le "PasteSpecial" ?
Explication :
Dans ta première définition :
Ces variables sont définis comme étant des objets "plage" (Range).
Or un objet "plage" (range) ne peut recevoir une affectation simple.
on doit utiliser l'instruction Set pour affecter une ou plusieurs cellule(s) à un objet "plage" (Range).
K
Idéalement, positionne toi avant de coller ...
WbkDest.Activate Sheets("Presence").Range("C6").Select ActiveSheet.Paste Application.CutCopyMode = False
Le range de positionnement peut être dynamique.
Y a-t-il une raison particulière d'utiliser le "PasteSpecial" ?
Explication :
Dans ta première définition :
Dim celNom As Range Dim celLot As Range Dim celTantG As Range
Ces variables sont définis comme étant des objets "plage" (Range).
Or un objet "plage" (range) ne peut recevoir une affectation simple.
celNom = "A4"
on doit utiliser l'instruction Set pour affecter une ou plusieurs cellule(s) à un objet "plage" (Range).
Set celNom = Range("A4") celnom.Select Set celNom = Range("A4:A40") celNom.Select
K
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
23 juin 2017 à 13:58
23 juin 2017 à 13:58
Y a-t-il une raison particulière d'utiliser le "PasteSpecial" ?
en fait, il y a des ligne de couleur et en copiant les couleurs sont emportées aussi ce qui détruit tout à à destination.
C'est pourquoi, j'ai tout recommencé, mais sans succès.
j'ai ajouter ton code mais toujours pas de copie:
erreur 424 sur la ligne en gras "objet attendu"
en fait, il y a des ligne de couleur et en copiant les couleurs sont emportées aussi ce qui détruit tout à à destination.
C'est pourquoi, j'ai tout recommencé, mais sans succès.
j'ai ajouter ton code mais toujours pas de copie:
Private Sub cbImporter_Click()
Const decal As Integer = 6
Dim WkbSrce As Workbook
Dim WkbDest As Workbook
Dim FeuilSrce As Worksheet
Dim chemfic As String
Dim onglet As String
Dim celNom As String
Dim celLot As String
Dim celTantG As String
Dim nblot As Integer
Dim lgfin As Long
Dim col As String
Dim plage As String
Application.DisplayAlerts = False
Application.ScreenUpdating = False
nblot = CInt(tbx_nblot.Text)
onglet = CStr(tbx_onglet.Text)
chemfic = CStr(tbx_chemfic.Text)
col = Left(tbx_celLot.Text, 1)
celLot = tbx_celLot.Text
celNom = tbx_celNom.Text
celTantG = tbx_celTantG.Text
lgfin = decal + nblot
plage = celLot & ":" & col & lgfin
Set WkbDest = ActiveWorkbook 'modif
Set WkbSrce = Workbooks.Open(chemfic) 'modif
WkbSrce.Sheets(onglet).Range(celLot & ":" & col & lgfin).Copy
WbkDest.Activate
Sheets("Presence").Range("C6").Select
ActiveSheet.Paste
Application.CutCopyMode = False
erreur 424 sur la ligne en gras "objet attendu"
Kalissi
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
20
29 juin 2017 à 16:24
29 juin 2017 à 16:24
Bonjour,
Voilà, j'ai testé le code, simuler devrais-je dire.
J'ai trouvé l'erreur ...
Ceci dit, je ne connais pas exactement ce que tu veux copier,
mais avec ces informations ça devrait fonctionner ...
K
Voilà, j'ai testé le code, simuler devrais-je dire.
J'ai trouvé l'erreur ...
nblot = 5 'CInt(tbx_nblot.Text) Onglet = "Fle" 'CStr(tbx_onglet.Text) ChemFic = "C:\Document\VBA\Excel\UnClasseur.xls" 'CStr(tbx_chemfic.Text) NomFic = "UnClasseur.xls" col = "B" 'Left(tbx_celLot.Text, 1) celLot = "C" 'tbx_celLot.Text celNom = "D" 'tbx_celNom.Text celTantG = "E" 'tbx_celTantG.Text LgFin = decal + nblot ' ... Ici lors de la définition de la plage à copier il manque la colonne ' remplace le chiffre LgDeb par la bonne position LgDeb = 1 Plage = celLot & LgDeb & ":" & col & LgFin Set WkbSrce = ActiveWorkbook 'modif Set WkbDest = Workbooks.Open(ChemFic) 'modif WkbSrce.Sheets(Onglet).Range(Plage).Copy '... ici, je ne m'explique pas encore pourquoi ' l'instruction WkbDest.Activate ne fonctionne pas ... ' j'ai pourtant déjà vu cette erreur ... Workbooks(NomFic).Activate Sheets("Presence").Range("C6").Select ActiveSheet.Paste Application.CutCopyMode = False
Ceci dit, je ne connais pas exactement ce que tu veux copier,
mais avec ces informations ça devrait fonctionner ...
K
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
29 juin 2017 à 17:12
29 juin 2017 à 17:12
Bonjour Kalissi,
J'avais laissé tombé alors j'ai du m'y replonger. Merci de ton aide!
Je cherche en fait à copier des noms et des valeurs d'un fichier excel pour les copier dans un nouveau fichier excel mais à un emplacement différent (cellule et feuille).
je reviens dès que j'ai recopié ton code...
J'avais laissé tombé alors j'ai du m'y replonger. Merci de ton aide!
Je cherche en fait à copier des noms et des valeurs d'un fichier excel pour les copier dans un nouveau fichier excel mais à un emplacement différent (cellule et feuille).
je reviens dès que j'ai recopié ton code...
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
Modifié le 1 juil. 2017 à 18:53
Modifié le 1 juil. 2017 à 18:53
là il y a eu des copies erronées: ça a copié dans le même fichier, dans la bonne colonne mais pas dans la bonne ligne et feuille.
Comme tu as inversé dest et srce je suis obligé d'adapter.
Comme tu as inversé dest et srce je suis obligé d'adapter.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
1 juil. 2017 à 19:54
1 juil. 2017 à 19:54
grâce à ta proposition j'ai réussi la copie comme ça:
Le problème c'est que j'ai à destination le formatage de la source (couleur et bordures).
Je sais qu'il faut mettre "value" quelque part pour empêcher cela, mais ou donc, svp?
J'ai essayé
Set WkbDest = ActiveWorkbook
Set WkbSrce = Workbooks.Open(chemfic)
'copie dans fichier source
WkbSrce.Sheets(onglet).Range(plage).Copy
'colle dans fichier destination
WkbDest.Activate
Sheets("Presence").Range("C6").Select 'va coller dans fichier destination à partir de cellule "C6"
ActiveSheet.Paste.Value
'WkbSrce.Sheets(onglet).Range(plage).Copy _
' WkbDest.Sheets("Presence").Range("C6").Value
Application.CutCopyMode = False
Le problème c'est que j'ai à destination le formatage de la source (couleur et bordures).
Je sais qu'il faut mettre "value" quelque part pour empêcher cela, mais ou donc, svp?
J'ai essayé
Range(page).copy.valueet
Range(page).value.copysans succès.
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
1 568
2 juil. 2017 à 12:28
2 juil. 2017 à 12:28
bonjour, peut-être ainsi?
WkbSrce.Sheets(onglet).Range(plage).Copy WkbDest.Sheets("Presence").Range("C6").PasteSpecial xlPasteValues
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
>
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
2 juil. 2017 à 18:58
2 juil. 2017 à 18:58
Merci yg_be c'est impeccable !
néanmoins tu peux m'indiquer comment faire une copie mais sans ouvrir le fichier source stp ? ou comment le fermer après la copie stp.
merci
néanmoins tu peux m'indiquer comment faire une copie mais sans ouvrir le fichier source stp ? ou comment le fermer après la copie stp.
merci
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
1 568
>
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
2 juil. 2017 à 19:12
2 juil. 2017 à 19:12
je ne pense pas qu'il soit possible de le lire sans l'ouvrir.
pour le fermer, je suggère (après le Paste):
pour le fermer, je suggère (après le Paste):
WkbSrce.Close
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
2 juil. 2017 à 20:01
2 juil. 2017 à 20:01
Super ça a marché! j'ai essayé plein de truc mais sans succès.
A destination la zone copiée reste en surbrillance malgré:
c'est bien cela qui permet de désélectionner le cadre de copie, non?!
j'ai essayé un
Peux-tu m'éclairer stp?
A destination la zone copiée reste en surbrillance malgré:
Application.CutCopyMode = False
c'est bien cela qui permet de désélectionner le cadre de copie, non?!
j'ai essayé un
range("A4").selectmais le code plante
Peux-tu m'éclairer stp?
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
1 568
>
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
2 juil. 2017 à 20:31
2 juil. 2017 à 20:31
as-tu supprimé tous les
.Activateet
.Select?
21 juin 2017 à 21:32
je ne comprends pas pourquoi on dois convertir le texte (ex:A4) puis faire range(A4) et finir par l'affecter à sa variable ? c'est un texte, à la base, qui est entré ...
WkbDest est effectivement le classeur de destination donc je le prépare par cette ligne
Enfin, au moment de coller la copie, la feuille sélectionnée avant c'est "FeuilSrce " pas "Presence". ça j'ai du mal à comprendre comment est fait le distinguo.
merci de votre aide