XL 2021 code que je n'arrive pas à faite fonctionner avec Range("ActiveCell.Offset(0, 0).Resize(10, 1)")

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
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
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
1695474793232.png

Je n'arrive pas à trouver mon erreur.

Pourriez-vous m'aider ?
En cas, je joins les 2 fichiers test

Un grand merci à toutes et à tous :)
 

Pièces jointes

  • test1.xlsm
    18.3 KB · Affichages: 7
  • test2.xlsm
    8.5 KB · Affichages: 8

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re

Dans ce cas, ceci fonctionne
VB:
Sub TooFatBoy()
Set p = ActiveCell.Offset(10).Resize(99)
MsgBox p.Address
MsgBox p.Rows.Count
End Sub

mais alors l'énoncé en message#1 manquait de précision

mais alors l'énoncé en message#1 manquait de précision
Lionel à dit:
En revanche, j'ai besoin de coller à partir de la cellule active dans mon fichier "test1"
Moussiou, j'y parle aussi bien frchais que toul'monde...
coller à partir de la cellule active dans mon fichier "test1"
cha veut dire t'y copi cellules du fichier test2 dans mon fichier actif "à partir" d'y cellule "sur l'y feu" :)
 

Staple1600

XLDnaute Barbatruc
@Usine à gaz
Je ne vois pas ce qu'il y de drôle 🤔

Tu indiques bien dans le 1er message
En revanche, j'ai besoin de coller à partir de la cellule active dans mon fichier "test1"
C'est ce que font mes codes et le code de @laurent950

et pour faire cela : coller à partir de la cellule active
on n'a pas besoin d'utiliser cette syntaxe :
ActiveCell.Offset(0, 0).Resize(10, 1)
(qui par ailleurs génère une erreur VBA, comme expliqué plus bas)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
@Usine à gaz
Je ne vois pas ce qu'il y de drôle 🤔

Tu indiques bien dans le 1er message

C'est ce que font mes codes et le code de @laurent950

et pour faire cela : coller à partir de la cellule active
on n'a pas besoin d'utiliser cette syntaxe :
ActiveCell.Offset(0, 0).Resize(10, 1)
(qui par ailleurs génère une erreur VBA, comme expliqué plus bas)
Exactement JM :)
Je vais prendre vos codes, à toi et à Laurent :)
Merci à vous deux vraiment :)

Et pas merci au moqueur 😘🤪😝😜
 

vgendron

XLDnaute Barbatruc
Hello

Juste en passant: je n'ai pas tout lu, mais j'ai l'impression qu'après 36 post, tu n'as pas saisi l'erreur de syntaxe que tu as commise

ton code d'origine
Sub Macro1()
Workbooks("test1").Sheets("Feuil1").Range("ActiveCell.Offset(0, 0).Resize(10, 1)") = Workbooks("test2").Sheets("Feuil1").Range("l2:l100").Value
End Sub

Sans l'erreur de syntaxe: les Guillemets !!
Sub Macro1()
Workbooks("test1").Sheets("Feuil1").ActiveCell.Resize(99, 1) = Workbooks("test2").Sheets("Feuil1").Range("l2:l100").Value
End Sub

ou mieux (mais pas testé)
Sub Macro1()
Set ZoneToCopy=Workbooks("test2").Sheets("Feuil1").Range("l2:l100")
Workbooks("test1").Sheets("Feuil1").activecell.resize(ZoneToCopy.rows.count,1)=ZoneToCopy.value
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Ok, c'est vrai, je me moque et je suis un gros méchant. 😔

Mais allo quoi !!! :
VB:
Workbooks("test1").Sheets("Feuil1").Range("ActiveCell.Offset(0, 0).Resize(10, 1)") = Workbooks("test2").Sheets("Feuil1").Range("l2:l100").Value

Déjà, ActiveCell ce n'est probablement pas ce qu'il y a de mieux pour commencer.

Ensuite Offset(0,0) n'a pas grand intérêt.

Ensuite il y a le Resize qui défini une zone d'une colonne sur 10 lignes, et dedans il faut faire rentrer une zone d'une colonne sur 99 lignes...

Ensuite le tout est mis entre guillemets dans un Range...


Donc oui, je suis trop moqueur, mais c'est juste pour essayer de te faire réfléchir sur les grosses erreurs que tu nous postes. 😉
 

laurent950

XLDnaute Accro
Bonjour @Usine à gaz , @vgendron , @Staple1600 , @TooFatBoy Le forum

Pour Lionel, je te donne le principe de Resize et Offset.

Copie des valeur dans les lignes et colonnes dans ton classeur Test2 Feuille 1 en "I2:M100"

depuis ton classeur Test1 de la Feuille 1

Choisie une Cellule celle que tu veux a un endroit ou tu as assez de place pour pas effacer tes données.

Essaie le programme ci-dessous pour le principe, dit moi ce que tu en pense et si c'est plus clair pour toi.

VB:
Sub Macro1()
' Le Classeur Test 2 / La Feuille 1 / Une Plage défini
Dim WkbTest2 As Workbook
Dim WksF1 As Worksheet
    Set WkbTest2 = Workbooks("test2.xlsm")
    Set WksF1 = WkbTest2.Worksheets("Feuil1")
' Une Plage défini Colonne I2 (Ligne 2 / colonne I) à M100 (Lignes 100 / colonne M)
Dim RgnT2F1 As Range
    Set RgnT2F1 = WksF1.Range("I2:M100")
' On Commence les Tests
' ActiveCell sera dans ce cas la cellule active choisie dans
'            Le Classeur Test1 de la Feuille 1
'
' Récupérer les donner du Classeur Test2 de la Feuille 1 qui sont les valeurs de cette plage
' "l2:M100"
'
' Avec Resize
'
' Je souhaite récupérer la premiéres Lignes (1) à la Lignes (10) sur la colonnes (I)  = Resize(10, 1)
        ActiveCell.Resize(10, 1).Value = RgnT2F1.Value ' 10 premiéres Lignes sur 1 Colonnes
        ActiveCell.Resize(10, 1).Clear
' Cette Fois
' Je souhaite récupérer la premiéres Lignes (1) à la Lignes (10) sur la colonnes (I à L )  = Resize(10, 4)
        ActiveCell.Resize(10, 4).Value = RgnT2F1.Value ' 10 premiéres Lignes sur 3 Colonnes
        ActiveCell.Resize(10, 4).Clear
'
'
' Mais si je veux La colonne K et L Comment Faire - Offset
' C'est la que Offset arrive !!
'
'
' Je souhaite récupérer la premiéres Lignes (1) à la Lignes (10) sur la colonnes (K à L )
' Alors : Offset(0, 2) dans l'exemple : "I2:M100" - I2 est la premiére cellule référence
'                0 = aucun décalage pour les lignes par rapport a I2
'                2 =   2   décalages pour les colonnes par rapport a I2 soit décalage commence a K2
        ActiveCell.Resize(10, 2).Value = RgnT2F1.Offset(0, 2).Value ' 10 premiéres Lignes sur 2 Colonnes
        ActiveCell.Resize(10, 2).Clear
'
'
' Je souhaite récupérer de Lignes (11) à la Lignes (20) sur la colonnes (L à M )
' Alors : Offset(10, 2) dans l'exemple : "I2:M100" - I2 est la premiére cellule référence a Offset
'                10 = 10   décalage pour les lignes par rapport a I2
'                2 =   2   décalages pour les colonnes par rapport a I2 soit décalage commence a L2
        ActiveCell.Resize(10, 2).Value = RgnT2F1.Offset(10, 2).Value ' Lignes 11 Lignes à la Ligne 20 sur 2 Colonnes
        ActiveCell.Resize(10, 2).Clear
'
'
'
' Je souhaite récupérer la Lignes (8) à la Lignes (8) sur la colonnes (J à L )
' Alors : Offset(7, 1) dans l'exemple : "I2:M100" - I2 est la premiére cellule référence a Offset
'                7 =   7   décalage pour les lignes par rapport a I2
'                1 =   1   décalages pour les colonnes par rapport a I2 soit décalage commence a L2
        ActiveCell.Resize(1, 3).Value = RgnT2F1.Offset(7, 1).Resize(1, 1).Value ' Lignes 11 Lignes à la Ligne 20 sur 2 Colonnes
        ActiveCell.Resize(1, 3).Clear
'
'

' Etc.
End Sub
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour à tous,

Après tous ces posts je m'étonne qu'on ne teste pas l'endroit où se trouve la cellule active :
VB:
Sub Macro1()
With Workbooks("test2.xlsm").Sheets("Feuil1").Range("l2:l100")
    If ActiveWorkbook.Name = "test1.xlsm" And ActiveCell.Parent.Name = "Feuil1" Then _
        ActiveCell.Resize(.Rows.Count, .Columns.Count) = .Value
End With
End Sub
A+
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
320
Réponses
12
Affichages
685

Statistiques des forums

Discussions
312 209
Messages
2 086 259
Membres
103 167
dernier inscrit
miriame