Mon besoin
dans ce fichier "test1"il me faut importer des valeurs du classeur "test2" (les 2 fichiers sont ouverts)
J'ai trouvé sur le net (le lien est en haut dans le classeur) comment le faire
Ce code fonctionne nickel
VB:
Sub Macro1()
Workbooks("test1").Sheets("Feuil1").Range("a2:a100") = Workbooks("test2").Sheets("Feuil1").Range("l2:l100").Value
End Sub
En revanche, j'ai besoin de coller à partir de la cellule active dans mon fichier "test1"
J'ai fait ce code
Code:
Sub Macro1()
Workbooks("test1").Sheets("Feuil1").Range("ActiveCell.Offset(0, 0).Resize(10, 1)") = Workbooks("test2").Sheets("Feuil1").Range("l2:l100").Value
End Sub
Qui beug avec cette information
Je n'arrive pas à trouver mon erreur.
Pourriez-vous m'aider ?
En cas, je joins les 2 fichiers test
@Usine à gaz
Conseil en passant
Quand tu bloques sur un code VAB, utilises des MsgBox (comme je l'ai fait) pour voir d'où peut venir l'erreur de syntaxe.
PS: Tu remarqueras que dans le code de @laurent950, la taille des plage est identique
si ton classeur Test2 est déjà Ouvert
Set Wkb = Workbooks.Item("test2.xlsm")
Mais si il n'est pas ouvert alors
Set Wkb = Workbooks.Open(Ftest1.Parent.Path & "\test2.xlsm")
VB:
Sub Macro1()
Application.ScreenUpdating = False
Dim Ftest1 As Worksheet
Set Ftest1 = ThisWorkbook.Worksheets("Feuil1")
Dim Wkb As Workbook
Dim Ftest2 As Worksheet
On Error Resume Next
' Remplacez "Nom_du_Fichier.xlsm" par le nom du fichier que vous souhaitez copier
'Set Wkb = Workbooks.Open(Ftest1.Parent.Path & "\test2.xlsm")
Set Wkb = Workbooks.Item("test2.xlsm")
Set Ftest2 = Wkb.Worksheets("Feuil1")
On Error GoTo 0
' Copie
Ftest1.Range("A2:A100").Value = Ftest2.Range("L2:L100").Value
Application.ScreenUpdating = True
End Sub
Pour ton information Lionel
Code:
For Each wb In Workbooks
MsgBox "Le classeur " & wb.Name & " est ouvert."
For Each ws In wb.Worksheets
MsgBox ws.Name
Next ws
Next wb
Ici si tu sais que ton classeur est Ouvert alors tu connais le nom du classeur "Test2"
et tu n'a plus besoin de le rechercher avec cette boucle ci-dessus
la clé c'est .Item("Nom du classeur . suivie de l'extension")
Set Wkb = Workbooks.Item("test2.xlsm")
C'est le principe de la POO (Programation Orienté Objet)
Re-JM
Si tu veux bien m'accorder encore un peu de ton temps, je voudrais comprendre mon erreur :
tu me dis : que la taille des plages ne sont pas identiques dans mon code initial
C'était vrai bien sûr !
J'ai donc modifié mon code comme ceci :
Si je reprends mon code Partie 1 :
Workbooks("test1").Sheets("Feuil1").Range("ActiveCell.Offset(0, 0).Resize(99, 1)") = j'ai 99 cellules concernées
Partie 2 :
Workbooks("test2").Sheets("Feuil1").Range("L2:L100") j'ai aussi 99 cellules concernées
Donc plages identiques semble-t-il
Alors pourquoi ça beug avec ce message ?
Je n'arrive pas à comprendre ???
ça marche pas lol
Je ne voulais pas : "Workbooks("test1.xlsm").Sheets("Feuil1").Range("a2:a100")"
mais : Workbooks("test1.xlsm").Sheets("Feuil1").Range("ActiveCell.Offset(0, 0).Resize(99, 1)") =
C'est une autres demandes Lionel et bien sur que ca fonctionne.
VB:
Sub Macro1()
Workbooks("test1.xlsm").Sheets("Feuil1").Range("a2:a100").Select
'OU
' La cellule Active est A2 (Pour l'exemple ci-dessus)
' Avec Select tu veras a l'écrans les plages que tu selectionnes Lionel
Workbooks("test1.xlsm").Sheets("Feuil1").Range(ActiveCell, ActiveCell.Offset(98, 0)).Select
End Sub
Explication :
Si vous voulez sélectionner une plage qui commence à partir de la cellule active et qui s'étend sur 99 lignes dans une seule colonne, vous pouvez le faire comme ceci
Alors :
Workbooks("test1.xlsm").Sheets("Feuil1").Range(ActiveCell, ActiveCell.Offset(98, 0))
et donc :
Cela utilisera la cellule active comme coin supérieur gauche de la plage et la fonction Offset pour spécifier le coin inférieur droit de la plage, qui est décalé de 98 lignes vers le bas par rapport à la cellule active.
Si je reprends mon code Partie 1 :
Workbooks("test1").Sheets("Feuil1").Range("ActiveCell.Offset(0, 0).Resize(99, 1)") = j'ai 99 cellules concernées
Partie 2 :
Workbooks("test2").Sheets("Feuil1").Range("L2:L100") j'ai aussi 99 cellules concernées
Donc plages identiques semble-t-il
Alors pourquoi ça beug avec ce message ?
Je n'arrive pas à comprendre ???
Relire mes posts, et les tests avec MsgBox
La taille des plages doivent être identiques
Ce qui veut dire
Meme nombre de lignes et de colonnes
Donc encore un test MsgBox
Sub test_taille()
Dim Plage As Range
Set Plage = Range("I2:I100")
MsgBox "Nombre de lignes: " & Plage.Rows.Count & vbCr & "Nombre de colonne: " & Plage.Columns.Count
End Sub
Relire mes posts, et les tests avec MsgBox
La taille des plages doivent être identiques
Ce qui veut dire
Meme nombre de lignes et de colonnes
Donc encore un test MsgBox
Sub test_taille()
Dim Plage As Range
Set Plage = Range("I2:I100")
MsgBox "Nombre de lignes: " & Plage.Rows.Count & vbCr & "Nombre de colonne: " & Plage.Columns.Count
End Sub
lol
Mais B....L, j'ai le même nombre de lignes et de colonnes concernées : Partie 1 :
Workbooks("test1").Sheets("Feuil1").Range("ActiveCell.Offset(0, 0).Resize(99, 1)") = j'ai 99 cellules concernées
Partie 2 :
Workbooks("test2").Sheets("Feuil1").Range("L2:L100") j'ai aussi 99 cellules concernées
Bonjour à toutes et à tous :) Grrrr !!! encore dans les choux :mad: Mon besoin dans ce fichier "test1"il me faut importer des valeurs du classeur "test2" (les 2 fichiers sont ouverts) J'ai trouvé sur le net (le lien est en haut dans le classeur) comment le faire Ce code fonctionne nickel Sub...
excel-downloads.com
Encore un test illustratif
Code:
Sub test_taille_B()
Dim Plage As Range, Active As Range, Plage2 As Range
Set Plage = Range("I2:I100")
MsgBox "Nombre de lignes: " & Plage.Rows.Count & vbCr & "Nombre de colonne: " & Plage.Columns.Count, , "Plage1"
MsgBox Plage.Address
Set Active = Range("K2")
MsgBox Active.Resize(99).Address
Range("C3").Select
Set Plage2 = Range("C3").Resize(Plage.Rows.Count)
MsgBox "Nombre de lignes: " & Plage2.Rows.Count & vbCr & "Nombre de colonne: " & Plage2.Columns.Count, vbInformation, "Plage2"
End Sub
Perso, si que j'srais Arthour, que j'testrais carrément ça :
VB:
Sub Macro1()
Workbooks("test1").Sheets("Feuil1").Range("en partant de la cellule active, agrandir à dix lignes") = Workbooks("test2").Sheets("Feuil1").Range("l2:l100").Value
End Sub