Problème de copier coller de données depuis un classeur fermé.

Problème de copier coller de données depuis un classeur fermé. - VB/VBA/VBS - Programmation

Marsh Posté le 02-07-2007 à 10:15:13    

Bonjour Forum et bon début de semaine à tous,  
 
Celle-ci commence pas très bien pour moi, car je suis confronté une nouvelle fois à mes lacunes en VBA :( .
 
Mon but est de copier des cellules se trouvant dans un classeur fermé, vers un emplacement bien precis dans un classeur ouvert pour ensuite procéder à une mise en page (mais cette étape sera une autre croisade).
 
Par des recherches sur internet, j'ai souvent trouvé cette méthode de copier/coller, mais bien sûr elle ne fonctionne pas chez moi.
La voici:  
 
 
"C:\Documents and Settings\1\Bureau\"  =  chemin du fichier fermé  
test1.xls    = nom du fichier  fermé
Alésage      = Nom de la feuille du fichier  
C14:C27  = Plage à copier  
 
 
 
 
 

Code :
  1. Sub test()
  2. GetValuesfromAClosedWorkbook "C:\Documents and Settings\1\Bureau\"  "test1.xls", "Alésage", "C14:C27"
  3. End Sub
  4. '-----------------------------
  5. Sub GetValuesfromAClosedWorkbook(fPath As String, fName As String, sName, cellRange As String)
  6. With ActiveSheet.Range(cellRange)
  7.     .Formula = "='" & fPath & "\[" & fName & "]" & sName & "'!" & cellRange
  8.     .Value = .Value
  9. End With
  10. End Sub


 
 
Et à l'execution de ce joli code une erreur de ce type survient:
 
Erreur d'application '1004':
 
Erreur définie par l'aplication ou par l'objet
 
Et le débuger se place à le ligne
 
.Formula = "='" & fPath & "\[" & fName & "]" & sName & "'!" & cellRange
 
 
Merci de votre aide.
 
Julien.
 

Reply

Marsh Posté le 02-07-2007 à 10:15:13   

Reply

Marsh Posté le 02-07-2007 à 10:36:50    

Reply

Marsh Posté le 02-07-2007 à 10:48:52    

Merci Kiki 29 pour ta lecture, je vais m'y mettre.
 
Je pense que j'aurai surement quelques problèmes, je vous tiens au courant si questions il y a.
 
Sinon aucune suggestions pour mon erreur de code générée ci-dessus?
 
Merci.
 
Julien.

Reply

Marsh Posté le 02-07-2007 à 10:59:54    

Salut,
 
Dans ta variable fPath tu finit par un backslash "C:\Documents and Settings\1\Bureau\" et tu en remet un après  .Formula = "='" & fPath & "\[" & fName & "]" & sName & "'!" & cellRange  
 
Je pense que l'erreur vient de la

Reply

Marsh Posté le 02-07-2007 à 11:05:55    

Bonjour DamienCYS,  
 
J'ai suivi ton conseil avec grand enthousiasme, mais malheureusement même si j'enlève "\" juste après Bureau, l'erreur est tout de même présente.
 
Merci quand même.
Mais ne desespérons pas la solution existe...
 
Julien.

Reply

Marsh Posté le 02-07-2007 à 11:18:24    

GetValuesfromAClosedWorkbook "C:\Documents and Settings\1\Bureau","test1.xls", "Alésage", "C14:C27"


Message édité par kiki29 le 02-07-2007 à 11:20:30
Reply

Marsh Posté le 02-07-2007 à 11:26:59    

Re kiki29,  
 
Malhereusement la virgule n'a aucun effet sur la génération de ce problème. :(
 
Merci beaucoup de plancher sur mon problème.

Reply

Marsh Posté le 02-07-2007 à 11:36:28    

Curieux car chez moi ça marche... enfin elle se fout du nom de feuille ici "Alésage" mais lit bien des valeurs bidons que j'ai placé dans fichier xls.A priori tu ne nous a pas donné tout ton code

Reply

Marsh Posté le 02-07-2007 à 11:57:45    

Re kiki29,  
 
le bout de code donné est juste un test pour pouvoir ensuite l'inserer dans un autre gros programme.
 
Concernant le test que je veux valider, c'est exactement le code que j'ai publié (sans "\" après Bureau et avec une virgule en plus. :p).  
J'ai juste oublié de preciser que les feuilles des deux classeurs ont exactement les même nom, et que les cellules que je veux copier (C14:C27)  forment un ensemble de deux tableaux de nombres décimaux. Le 1er tableau  (C14:C17) et le 2ième (24:27), ils sont  sans en-têtes.
 
Je sais pas si ça peut changer quelque chose.
 
Merci d'avance.

Reply

Marsh Posté le 02-07-2007 à 12:05:52    

Re kiki 29,  
 
Ca i est ça marche, le problème ét

Reply

Marsh Posté le 02-07-2007 à 12:05:52   

Reply

Marsh Posté le 02-07-2007 à 12:07:48    

Oups désolé fausse manip....
 
Donc ça i est ça marche le problème était dans la syntaxe du .Formula, vu que je ne travaille pas sur le même ordi une " ' " avait été oubliée.
 
Merci beaucoup pour ton aide.
Julien.

Reply

Marsh Posté le 02-07-2007 à 13:01:48    

Hello tout le monde,  
 
Un autre problème se pose à moi dans le même code que tout à l'heure,  
comment je peux le modifier pour que je puisse copier des données de la feuille 2 du classeur fermé test1.xls vers la feuille 2 de mon classeur ouvert.
 
Merci d'avance.
Julien.

Reply

Marsh Posté le 02-07-2007 à 13:39:01    

utilise le même code mais remplace les variables de feuille

Reply

Marsh Posté le 02-07-2007 à 13:48:50    

Re DamienCYS,  
 
c'est bien ce que j'ai fait la première fois, mais si j'apelle la fonction
GetValuesfromAClosedWorbook avec des paramètres différents conernant la feuille n°2 par exemple, celle-ci va me prendre les bonnes valeurs mais me les mettra toujours sur la feuille n°1 de mon classeur ouvert.
 
Je pense qu'une modification de code serait à faire au niveau de la ligne:
 
ActiveSheet.Range(cellRange) pour lui dire d'excecuter le collage dans le feuille n°2.
 
En tout cas si tu as d'autre propositions n'hésite pas.
Julien

Reply

Marsh Posté le 02-07-2007 à 13:56:55    

c'est bien cette ligne qu'il faut que tu modifie tu peut utiliser a la palce de activesheet worksheets(2) pour la feuille 2 du classeur
ou WorkSheets(ActiveSheet.Index + 1) pour la feuille qui suit la feuille active

Reply

Marsh Posté le 02-07-2007 à 14:09:48    

Ok super DamienCYS, ta méthode marche très bien.
Merci!
 
Je vais peut être abusé, mais je me demandais comment faire pour que la macro me copie les valeurs dans les colones que je souhaite (la colone juste après celle ou il fait la copie tout en gardant les meme lignes).  
 
Existerai t'il une syntaxe du genre:
 
.Range(celleRange +1)
 
Merci d'avance.

Reply

Marsh Posté le 02-07-2007 à 14:30:38    

utilise plutot Cells(rowindex, columnindex) à la place de range qui te permet de passer un numéro de colonne, soit :
Cells(range(Cellrange).row, range(Cellrange).column + 1)

Reply

Marsh Posté le 02-07-2007 à 14:53:39    

Re DamienCYS,
 
J'ai un petit problème avec ta syntaxe, lorsque je copie d'un autre fichier un tableau de 4 valeurs allant de C14:C17 ( valeur affectée à cellRange) il me recopie seulement la première valeur du tableau mais à la place voulue à savoir dans la case D14 du fichier de destination :).
 
Sais tu comment résoudre ce petit problème?
Merci.

Reply

Marsh Posté le 02-07-2007 à 15:03:33    

j'avais zappé que tu copiais des plage
tu peut le faire avec des boucles pour parcourir ta palge et copier cellule par cellule.  
1 boucle pour les lignes et une autre pour les colonnes à agencer suivant l'ordre de copie que tu désires

Reply

Marsh Posté le 02-07-2007 à 15:05:52    

Ok merci du conseil.
Julien.

Reply

Marsh Posté le 02-07-2007 à 15:06:45    

Vas voir sur les 2 liens que je t'ai donné
Le 1er donne une réponse en copiant cellule par cellule
Le 2nd via ADO pour copier une plage plus importante
De plus les 2 utilisent ExecuteExcel4Macro correctement

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed