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

Usine à gaz

XLDnaute Barbatruc
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

Staple1600

XLDnaute Barbatruc
Re

@Usine à gaz
Ce que tu aurais du voir, c'est que les plages de cellules n'ont pas la même taille !!
Donc évidemment ca marche moins bien

Alors que ceci fonctionne
Code:
Sub test_ok()
Dim a As Range, b As Range
Set a = Workbooks("Classeur2").Worksheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column)
Set b = Workbooks("Classeur3").Worksheets("Feuil1").Range("I2:I100")
a.Resize(b.Rows.Count).Value = b.Value
End Sub

PS: Si je t'ai proposé de faire le test en message#2 c'est qu'il y avait une raison...
:rolleyes:

NB: Ré-adaptes le noms des classeurs avec ceux de tes classeurs
 

Staple1600

XLDnaute Barbatruc
Re

@Usine à gaz
Ceci aussi fonctionne
(mais ce n'est pas forcément judicieux)
Code:
Sub test_ok_bis()
With Workbooks("Classeur3").Worksheets("Feuil1").Range("I2:I100")
Workbooks("Classeur2").Worksheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column).Resize(.Rows.Count) = .Value
End With
End Sub
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Désolé JM :
VB:
Sub test_ok()
Dim a As Range, b As Range
Set a = Workbooks("test1").Worksheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column)
Set b = Workbooks("test2").Worksheets("Feuil1").Range("I2:I100")
a.Resize(b.Rows.Count).Value = b.Value
End Sub
Il ne se passe rien lol :)=
 

Usine à gaz

XLDnaute Barbatruc
Vraiment désolé, je dois être "bouché"

Code:
Sub test_ok_bis()
With Workbooks("test2").Worksheets("Feuil1").Range("I2:I100")
Workbooks("test1").Worksheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column).Resize(.Rows.Count) = .Value
End With
End Sub
Il ne se passe rien non plus lol :)
 

Usine à gaz

XLDnaute Barbatruc
Tes codes :
VB:
Sub test_ok()
Dim a As Range, b As Range
Set a = Workbooks("test1").Worksheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column)
Set b = Workbooks("test2").Worksheets("Feuil1").Range("I2:I100")
a.Resize(b.Rows.Count).Value = b.Value
End Sub

[CODE]Sub test_ok()
Sub test_ok_bis()
With Workbooks("test2").Worksheets("Feuil1").Range("I2:I100")
Workbooks("test1").Worksheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column).Resize(.Rows.Count) = .Value
End With
End Sub
Chez moi
- le fichier actif est test1
- le fichier récepteur est test1 et la provenance est de test2
:)
 

Staple1600

XLDnaute Barbatruc
Re

On est bien d'accord
Le classeur actif est test1 (chez moi Classeur2)
Les données à copier sont dans test2 (chez Classeur3)

ma cellule active est sur la feuille 1 de test1 (donc chez moi Classeur2)
je lance ma macro
et j'obtiens le résultat illustré par ma précédente copie d'écran

"recopie" en feuille 1 de test1 (chez Classeur2) des données issues de la plage I2:I100 de la feuille 1 de test2 (chez moi Classeur3)
 

Staple1600

XLDnaute Barbatruc
@Usine à gaz
En attendant que tu arrives à faire fonctionner mon code ;)

un autre test basique pour te montrer le pourquoi de l'erreur
(ou plutôt d'où vient l'erreur)
Code:
Sub erreur_syntaxe()
MsgBox Range("ActiveCell.Offset(0, 0).Resize(10, 1)").Address
End Sub
Sub syntaxe_OK()
MsgBox ActiveCell.Offset(0, 0).Resize(10, 1).Address
End Sub

Pour info, le Offset(0, 0) ne sert à rien
Ceci fait pareil que syntaxe_OK
Code:
Sub syntaxe_OK_bis()
MsgBox ActiveCell.Resize(10, 1).Address
End Sub

PS: je sais que ces sont des MsgBox, mais elles ne servent ici qu'à trouver d'où peut venir une erreur dans une syntaxe VBA.
 

laurent950

XLDnaute Barbatruc
Bonjour @Usine à gaz

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)
 

Usine à gaz

XLDnaute Barbatruc
Bon, je suis arrivé à faire fonctionner ton 1er code
Super et Grand merci à toi ainsi que pour ta patience
VB:
Sub test_ok()
Dim a As Range, b As Range
Set a = Workbooks("test1").Worksheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column)
Set b = Workbooks("test2").Worksheets("Feuil1").Range("L2:L100")
a.Resize(b.Rows.Count).Value = b.Value
End Sub
Pour le fun :
Ton code 2
Code:
Sub test_ok_bis()
With Workbooks("test2").Worksheets("Feuil1").Range("I2:I100")
Workbooks("test1").Worksheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column).Resize(.Rows.Count) = .Value
End With
End Sub
Il efface le contenu de la cellule active et des suivantes de mon fichier actif "test1"
:)
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
368

Statistiques des forums

Discussions
313 220
Messages
2 096 313
Membres
106 566
dernier inscrit
Fabiens