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, Bonjouer @laurent950

@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
Enrichi (BBcode):
' Copie
    Ftest1.Range("A2:A100").Value = Ftest2.Range("L2:L100").Value
C'était ce que devait te montrer le test du message#2
A savoir que dans ton code initial, la taille n'était pas identique.
 

Usine à gaz

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)
Bjr Laurent :)
Merci à toi c'est nickel
Merci aussi pour toutes tes explications...
:)
 

Usine à gaz

XLDnaute Barbatruc
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 :
VB:
Workbooks("test1").Sheets("Feuil1").Range("ActiveCell.Offset(0, 0).Resize(99, 1)") = Workbooks("test2").Sheets("Feuil1").Range("L2:L100").Value
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 ?
1695480542784.png

Je n'arrive pas à comprendre ???
:)
 

laurent950

XLDnaute Barbatruc
Re @Usine à gaz

en Poste #14 tu as la réponse
tu as noté
"test1"
Mais c'est .xlsm qu'il faut Noté
"test1.xlsm"

Soit :
Workbooks.Item("test2.xlsm")
Ou
Workbooks("test2.xlsm")
Mais
.xlsm ou une Autres extension
Puis
Le fichier doit être ouvert bien sûr Lionel

VB:
Sub Macro1()
Workbooks("test1.xlsm").Sheets("Feuil1").Range("a2:a100") = Workbooks("test2.xlsm").Sheets("Feuil1").Range("l2:l100").Value
End Sub
 

laurent950

XLDnaute Barbatruc
Re @Usine à gaz

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.

J'espère que cela va t'aider Lionel

Laurent
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
je l'ai mis au #Post 18 :)
J'ai donc modifié mon code comme ceci :
code
VB:
Workbooks("test1").Sheets("Feuil1").Range("ActiveCell.Offset(0, 0).Resize(99, 1)") = Workbooks("test2").Sheets("Feuil1").Range("L2:L100").Value
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 ?
1695480542784.png

Je n'arrive pas à comprendre ???

Même si j'ajoute .xlsm, ça ne fonctionne pas.
:)
 

Staple1600

XLDnaute Barbatruc
Re

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
 

Usine à gaz

XLDnaute Barbatruc
Re

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

Sur 1 colonne pour les 2

Grrrrr !!!! je vire au vert
:)
 

Staple1600

XLDnaute Barbatruc
Re

@Usine à gaz
Tu as zappé le message où je parle d'erreur de syntaxe...

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
 

TooFatBoy

XLDnaute Barbatruc
Hi,

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








🥳
 

Discussions similaires

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