Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb copie de cellules depuis un autre classeur

2 réponses
Avatar
plexus
Bonjour,

Toujours dans le cadre de mon projet d'=E9changer des donn=E9es entre 2
classeurs, j'ai opt=E9 pour la solution des feuilles cach=E9es :
A partir d'un classeur je copie 2 pages vers un 2e classeur dont le
nom est pr=E9format=E9 par une variable.
la feuille cach=E9e de ce 2e classeur a toujours le m=EAme nom, ou je
stocke la valeur de mes variables dans une plage de longueur fixe, que
je veux r=E9cup=E9rer dans un 3e fichier qui les traitera.
pour importer les donn=E9es et les transformer en variables dans le 3e
classeur j'utilise le code suivant, qui me parait assez simple mais qui
plante :

Sub importe_don=E9es()
Dim classimport As String
Dim CW As Workbook
Set CW =3D ThisWorkbook 'mon 3e classeur
Dim Wimport As Workbook
classimport =3D Application.GetOpenFilename("Rapport de voyage (*.xls),
*=2Exls")
Workbooks.Open classimport
Set Wimport =3D Workbooks(Dir$(classimport))
Wimport.Sheets("echange donn=E9es").Range("B2:B85").Copy
CW.Sheets("donn=E9es import=E9es").Range("B2:B85").Paste
Application.CutCopyMode =3D False
Wimport.close
End Sub

J'ai le message d'erreur suivant =E0 la ligne CW.Sheets("donn=E9es
import=E9es").Range("B2:B85").Paste : "propri=E9t=E9 ou m=E9thode non
g=E9r=E9e par cet objet". Ce qui me laisse perplexe.
Mes recherches ne m'ont pas fournies de solution a ce probl=E8me.
Le code acc=E8de bien au classeur =E0 importer, je l'ai v=E9rifi=E9 par une
msgbox de (Wimport.Sheets("echange donn=E9es").Range("B1")), mais ne
veut pas coller

1=B0/ auriez vous une explication =E0 ce ph=E9nom=E8ne ?
Je voudrais =E9viter de s=E9lectionner ou d'activer le 2e classeur de
mani=E8re a ce que l'op=E9ration se fasse de mani=E8re masqu=E9e

2 réponses

Avatar
Jacky
Bonjour,

J'ai le message d'erreur suivant à la ligne CW.Sheets("données
importées").Range("B2:B85").Paste :



Ceci:
Wimport.Sheets("echange données").Range("B2:B85").Copy
CW.Sheets("données importées").Range("B2:B85").Paste

Doit être saisie sur une seule ligne
--
Salutations
JJ

"plexus" a écrit dans le message de news:

Bonjour,

Toujours dans le cadre de mon projet d'échanger des données entre 2
classeurs, j'ai opté pour la solution des feuilles cachées :
A partir d'un classeur je copie 2 pages vers un 2e classeur dont le
nom est préformaté par une variable.
la feuille cachée de ce 2e classeur a toujours le même nom, ou je
stocke la valeur de mes variables dans une plage de longueur fixe, que
je veux récupérer dans un 3e fichier qui les traitera.
pour importer les données et les transformer en variables dans le 3e
classeur j'utilise le code suivant, qui me parait assez simple mais qui
plante :

Sub importe_donées()
Dim classimport As String
Dim CW As Workbook
Set CW = ThisWorkbook 'mon 3e classeur
Dim Wimport As Workbook
classimport = Application.GetOpenFilename("Rapport de voyage (*.xls),
*.xls")
Workbooks.Open classimport
Set Wimport = Workbooks(Dir$(classimport))
Wimport.Sheets("echange données").Range("B2:B85").Copy
CW.Sheets("données importées").Range("B2:B85").Paste
Application.CutCopyMode = False
Wimport.close
End Sub

J'ai le message d'erreur suivant à la ligne CW.Sheets("données
importées").Range("B2:B85").Paste : "propriété ou méthode non
gérée par cet objet". Ce qui me laisse perplexe.
Mes recherches ne m'ont pas fournies de solution a ce problème.
Le code accède bien au classeur à importer, je l'ai vérifié par une
msgbox de (Wimport.Sheets("echange données").Range("B1")), mais ne
veut pas coller

1°/ auriez vous une explication à ce phénomène ?
Je voudrais éviter de sélectionner ou d'activer le 2e classeur de
manière a ce que l'opération se fasse de manière masquée


Avatar
plexus
Bonjour Jacky et merci de ta réponse,

j'ai finalement opté en désespoir de cause pour une autre méthode
qui au final me satisfait mieux, même si je n'en perçois pas encore
tous les effets secondaires indésirables :

Sub importe_donées()
Dim typfichier As String
Dim classimport As Variant
Dim filtrindex As Integer
Dim titre As String
Dim nomceclass As String
Dim msg, titre2 As String
Dim bouton As Integer
Dim rep As Long
Dim CW As Workbook
Dim Wimport As Workbook
Dim i As Integer
Dim donnéeimporT(1 To 85)

nomceclass = ThisWorkbook.Name
Set CW = Workbooks(nomceclass)


classimport = Application.GetOpenFilename(typfichier, filtrindex,
titre)

Set Wimport = GetObject(classimport)
For i = 2 To 85
CW.Sheets("données importées").Range("B" & i).Value =
Wimport.Sheets("echange données").Range("B" & i).Value
Next i

End Sub

cela semble me causer moins de conflits, et je n'ai pas besoin des
mises en pages car seuls les valeurs m'intêressent.

Maintenant ces données représentent les valeurs des variables que je
souhaitais importer dans mon calsseur CW afin de les y déclarer
automatiquement :
dans la colonne A, j'ai le nom de la variable
dans la colonne B, j'ai sa valeur
dans la colonne C, le type dans lequel je voudrais déclarer la
variable.

1/ est-ce possible de déclarer de cette manière mes variables, (en
sachant que je voudrais qu'elles soient public) ? ou dois-je déclarer
"à la main" mes 85 variables et les affecter de même ?
j'ai tenté avec cette procèdure mais je ne récolte que des
erreurs...

Sub attribut_variables()
Dim donnéesimporT(1 To 85, 1 To 3) As String
Dim nomvar(1 To 85) As String
Dim typvar(1 To 85) As String
Dim valvar(1 To 85) As String

For j = 1 To 3
For i = 2 To 85
donnéesimporT(i, j) = Sheets("données importées").Cells(i, j).Value
nomvar(i) = donnéesimporT(i, 1)
valvar(i) = donnéesimporT(i, 2)
typvar(i) = donnéesimporT(i, 3)
Public Type testtypevar
nomvar(i) as valvar(i)
End Type
Next i
Next j

End Sub

Merci